HaXml-1.20.2: Utilities for manipulating XML documents

Text.XML.HaXml.DtdToHaskell.TypeDef

Contents

- Internal representation of types
- Pretty-print a TypeDef
- Name mangling

Description

Defines an internal representation of Haskell data/newtype definitions that correspond to the XML DTD types, and provides pretty-printers to convert these types into the `Doc` type of Text.PrettyPrint.HughesPJ.

Synopsis

- data TypeDef
  - = DataDef Bool Name AttrFields Constructors
  - | EnumDef Name [Name]
- type Constructors = [(Name, [StructType])]
- type AttrFields = [(Name, StructType)]
- data StructType
  - = Maybe StructType
  - | Defaultable StructType String
  - | List StructType
  - | List1 StructType
  - | Tuple [StructType]
  - | OneOf [StructType]
  - | Any
  - | StringMixed
  - | String
  - | Defined Name
- ppTypeDef :: TypeDef -> Doc
- ppHName :: Name -> Doc
- ppXName :: Name -> Doc
- ppAName :: Name -> Doc
- data Name = Name {
  - xName :: String
  - hName :: String
  }
- name :: String -> Name
- name_ :: String -> Name
- name_a :: String -> String -> Name
- name_ac :: String -> String -> String -> Name
- name_f :: String -> String -> Name
- mangle :: String -> String
- manglef :: String -> String

# Internal representation of types

data TypeDef

Constructors

DataDef Bool Name AttrFields Constructors | Bool for main/aux.
EnumDef Name [Name] |

Instances

Eq TypeDef |

type Constructors = [(Name, [StructType])]

type AttrFields = [(Name, StructType)]

data StructType

Constructors

Maybe StructType |
Defaultable StructType String | String holds default value.
List StructType |
List1 StructType | Non-empty lists.
Tuple [StructType] |
OneOf [StructType] |
Any | XML's contentspec allows ANY
StringMixed | mixed (#PCDATA | ... )*
String | string only (#PCDATA)
Defined Name |

Instances

Eq StructType |
Show StructType |

# Pretty-print a TypeDef

ppTypeDef :: TypeDef -> Doc

ppHName :: Name -> Doc

Pretty print Haskell name.

ppXName :: Name -> Doc

Pretty print XML name.

ppAName :: Name -> Doc

Pretty print Haskell attributes name.

# Name mangling

data Name

Need to keep both the XML and Haskell versions of a name.

Constructors

Name |

Fields

xName :: String

  original XML name

hName :: String

  mangled Haskell name

Instances

Eq Name |

name :: String -> Name

Make a type name valid in both XML and Haskell.

name_ :: String -> Name

Append an underscore to the Haskell version of the name.

name_a :: String -> String -> Name

Prefix an attribute enumeration type name with its containing element name.

name_ac :: String -> String -> String -> Name

Prefix an attribute enumeration constructor with its element-tag name, and its enumeration type name.

name_f :: String -> String -> Name

Prefix a field name with its enclosing element name.

mangle :: String -> String

Convert an XML name to a Haskell conid.

manglef :: String -> String

Convert an XML name to a Haskell varid.