isabelle-hacks/fxp/src/Parser/Base/baseData.sml

111 lines
3.6 KiB
Standard ML

(*--------------------------------------------------------------------------*)
(* Structure: BaseData *)
(*--------------------------------------------------------------------------*)
structure BaseData =
struct
open DfaData
(*--- external ids may have a public id and must have a system id ---*)
(*--- for notations, however, also the system id can be optional ----*)
datatype ExternalId =
EXTID of (string * UniChar.Char) option * (Uri.Uri * Uri.Uri * UniChar.Char) option
(*--- external ids may have a public id and must have a system id ---*)
type NotationInfo = ExternalId option
(*--- replacement of a general entity ---*)
datatype GenEntity =
GE_NULL
| GE_INTERN of UniChar.Vector * UniChar.Vector
| GE_EXTERN of ExternalId
| GE_UNPARSED of ExternalId * int * Errors.Position
type GenEntInfo = GenEntity * bool
fun isExtGen (GE_EXTERN _) = true
| isExtGen _ = false
(*--- replacement of a parameter entity ---*)
datatype ParEntity =
PE_NULL
| PE_INTERN of UniChar.Vector * UniChar.Vector
| PE_EXTERN of ExternalId
type ParEntInfo = ParEntity * bool
fun isExtPar (PE_EXTERN _) = true
| isExtPar _ = false
(*--- declared type of an attribute ---*)
datatype AttType =
AT_CDATA
| AT_NMTOKEN
| AT_NMTOKENS
| AT_ID
| AT_IDREF
| AT_IDREFS
| AT_ENTITY
| AT_ENTITIES
| AT_GROUP of int list
| AT_NOTATION of int list
(*--- typed attribute value ---*)
datatype AttValue =
AV_CDATA of UniChar.Vector
| AV_NMTOKEN of UniChar.Data
| AV_NMTOKENS of UniChar.Data list
| AV_ID of int
| AV_IDREF of int
| AV_IDREFS of int list
| AV_ENTITY of int
| AV_ENTITIES of int list
| AV_GROUP of int list * int
| AV_NOTATION of int list * int
fun isIdType at = at=AT_ID
(*--- default values of attributes ---*)
datatype AttDefault =
AD_IMPLIED
| AD_REQUIRED
| AD_DEFAULT of (UniChar.Vector * UniChar.Vector * AttValue option)
* (Errors.Position * bool Unsynchronized.ref)
| AD_FIXED of (UniChar.Vector * UniChar.Vector * AttValue option)
* (Errors.Position * bool Unsynchronized.ref)
(*--- attribute definition (list) ---*)
(*--- the boolean says whether it was externally declared ---*)
type AttDef = int * AttType * AttDefault * bool
type AttDefList = AttDef list
(*--- content specification ---*)
fun defaultAttDef idx = (idx,AT_CDATA,AD_IMPLIED,false)
(*--- content specification ---*)
datatype ContentSpec =
CT_ANY
| CT_EMPTY
| CT_MIXED of int list
| CT_ELEMENT of DfaData.ContentModel * DfaData.Dfa
fun isMixed ct =
case ct
of CT_ANY => true
| CT_MIXED _ => true
| _ => false
type ElemInfo = {decl : (ContentSpec * bool) option,
atts : (AttDefList * bool) option,
errAtts : int list}
val nullElemInfo : ElemInfo = {decl=NONE,
atts=NONE,
errAtts=nil}
(*--------------------------------------------------------------------*)
(* the id info tells whether an id value has occurred for a name and *)
(* the list of all positions where it occurred as an idUnsynchronized.ref value. *)
(*--------------------------------------------------------------------*)
type IdInfo = bool * Errors.Position list
val nullIdInfo : IdInfo = (false,nil)
end