HRC Language Reference
Table of Contents
1. Introduction
2. Core Syntax
2.1. File Types
2.1.1. Prototypes
2.1.2. Types
2.2. Schemas
2.3. Namespaces
3. Scheme syntax
3.1. Keyword lists
3.2. Regular Expressions
3.3. Blocked context switch
3.4. Scheme boundaries and priority
4. Inter-scheme links
4.1. Inheritance
4.2. Schemes substitutions
A. Regular Expressions syntax
1. Introduction
2. Syntax
3. Metacharacters
4. Extended metacharacter
5. Operators
6. Extended operators
7. Examples
B. HRC Coding Recommendations
C. Format of catalog.xml file
D. Format of HRD color schemes
E. XML Schema for HRC Language
References

HRC Language Reference

HRC Language Reference

HRC Language Reference
12 September 2003
This version:
take5.beta2: 12 September 2003
(Available as HTML, PDF, DocBook)
Previous versions:
take5.beta1: 30 March 2003
take5.alpha3: 1 March 2003
take5.alpha2: 30 January 2003
Author:
Igor Ruskih <cail at nm.ru>
Copyright © 2003 Igor Ruskih (Cail Lomecb)
Abstract
This reference defines syntax and semantic of HRC language, used in Colorer-take5 Library to represent and describe syntax and lexical structure of target programming language. This description is used by library to parse and colourise text in editors or other systems.
Table of Contents
1. Introduction
2. Core Syntax
2.1. File Types
2.2. Schemas
2.3. Namespaces
3. Scheme syntax
3.1. Keyword lists
3.2. Regular Expressions
3.3. Blocked context switch
3.4. Scheme boundaries and priority
4. Inter-scheme links
4.1. Inheritance
4.2. Schemes substitutions
A. Regular Expressions syntax
1. Introduction
2. Syntax
3. Metacharacters
4. Extended metacharacter
5. Operators
6. Extended operators
7. Examples
B. HRC Coding Recommendations
C. Format of catalog.xml file
D. Format of HRD color schemes
E. XML Schema for HRC Language
References
Introduction
1. Introduction
HRC is a script language, describing parse process of text files to produce syntax highlighting. It is based on XML language, and defines its own XML vocabulary and structure. HRC language was developed to achieve most flexible and efficient process of describing programming language structure.
Started nearly in year 1999, it was a simple XML-like structure, describing some common language construction. But later it has grown into the much more complex and powerful language, describing complex relations between different languages, syntax contexts.
Core Syntax
2. Core Syntax
HRC language allows describing and storing syntax rules for numerous languages. All language descriptions are divided into two parts: Informal part, used to describe this language properties, language choose rules (prototype), and Formal part, which defines syntax and semantic of target parsed language (type). Prototypes are used to determine, which type to apply to the currently opened file, they define some internal application-dependent properties and other useful information about language.
Structure.
Each HRC file contains declaration of one or more prototypes or one language type. Root XML content starts with hrc element, which contains all other definitions. Element Name: hrc, type: hrcRoot of the HRC file XML structure.Attribute: version, type: xs:NMTOKENSpecifies version of HRC language. For example, 'take5' for Colorer-take5.Content:Element: annotation, type: annotationDefines formal documentation for HRC language elements.Element: prototype, type: prototypeDefines prototype of single target programming language.Element: type, type: typeLanguage container, used to store all parser specific information. Each HRC language object is defined using XML elements and attributes. You can find definition of HRC XML Syntax in Appendix E, XML Schema for HRC Language. Each element in HRC can be documented with XML Schema-like standard elements: Element Name: annotation, type: annotationDefines formal documentation for HRC language elements.Content:Element: appinfo, type: appinfoElement: documentation, type: documentationElement: contributors, type: contributors Annotation object can be used anywhere in HRC context to document and describe any of the HRC elements.

File Types
2.1. File Types
Each language prototype requires definition of language name and description. These properties are used to determine language in context of other language definitions and in inter-languages linkage.
Prototypes
2.1.1. Prototypes
Element Name: prototype, type: prototype
Defines prototype of single target programming language. This prototype must have name, equals to real type, defined in linked resource.
Attribute: name, type: xs:NCName
Common internal name of this language type. Must be valid XML non-qualified name.
Attribute: description, type: xs:string
User description, used to represent language in target IDE.
Attribute: group, type: xs:Name
Group of languages, this language belongs to.
Attribute: targetNamespace, type: xs:anyURI
Applicable to the XML group of languages. Specifies namespace, this HRC file describing. Allows automatically linking and combining different XML languages in HRC.
Content:
Element: annotation, type: annotation
Defines formal documentation for HRC language elements.
Element: location, type: location
Points to the location of HRC file with this language description. Link is well formed URI address of requested HRC file. This location can be relative to the location of parent type, or absolute (with any URI schema). If URI schema is absent, 'file://' is assumed.
Element: filename, type: filename
Defines Regular Expression, used to identify programming language by its file name.
Element: firstline, type: firstline
Defines Regular Expression, used to identify programming language by its starting content.
Element: parameters, type: parameters
Custom parameters, used to specify additional properties of this language type. These can include different language resources (icons, templates and so on).

Each language must be chosen by library before starting syntax highlighting process. This is made with help of firstline and filename parameters. Each matched instance of one of these parameters adds some additional weight to total language weight. This value is taken by default, or could be changed explicitly with weight attribute of these elements. When total weights of all types are evaluated, first language with maximum weight is selected to assign to opened file.

Element Name: filename, type: filename
Defines Regular Expression, used to identify programming language by its file name. This can include file's extension or some more complex dependencies.
Attribute: weight, type: xs:decimal, default: 2
This attribute defines weight, added to the total language weight, when choosing one from a list of available.
Element Name: firstline, type: firstline
Defines Regular Expression, used to identify programming language by its starting content. First line could be used, or some small part of text. This entry has less default weight against filename one.
Attribute: weight, type: xs:decimal, default: 1
This attribute defines weight, added to the total language weight, when choosing one from a list of available.
If any of these two operators is used more than one time, each its matched instance adds specified weight to the total language weight.

Types
2.1.2. Types
Each prototype defines its linkage with real file type, describing information, specific for the syntax parsing process. This information is stored in basic units, called types.

Element Name: type, type: type
Language container, used to store all parser specific information. These defines are used by parser to analyze and colorize target text data.
Attribute: name, type: xs:NCName
HRC Language type name.
Attribute: access, type: access, default: private
Deprecated???
Content:
Element: annotation, type: annotation
Defines formal documentation for HRC language elements.
Element: import, type: import
Import statement.
Element: region, type: region
Definition of basic syntax region - text range with assigned syntax meaning.
Element: entity, type: entity
HRC Entity definition.
Element: scheme, type: scheme
HRC Scheme is basic unit, which represents some fixed set of lexemes, tokens and syntax regions (lexical context).
Element Name: region, type: region
Definition of basic syntax region - text range with assigned syntax meaning. Later, these regions could be mapped into required color information and displayed on screen.
Attribute: name, type: xs:NCName
HRC Region name.
Attribute: parent, type: QName
Region's parent reference. If region has parent, its properties could be inherited from this one. Also region inheritance creates tree structure of HRC Regions.
Attribute: description, type: xs:string
Optional description, used to represent region's purpose and to show it to user in convient and friendly way.
Element Name: entity, type: entity
HRC Entity definition. Entities are some form of macro-definitions, they lately could be used in regular expressions syntax to make them more simple. Each entity consists of Entity name and Entity content, which would be substituted into regular expression, when parser finds entity reference. Each entity could be referenced with %entityname; syntax.
Attribute: name, type: xs:NCName
HRC Entity name.
Attribute: value, type: xs:string
HRC Entity value, used to substitute entity in RE string.
Schemas
2.2. Schemas
Element Name: scheme, type: scheme
HRC Scheme is basic unit, which represents some fixed set of lexemes, tokens and syntax regions (lexical context). Each time at any position in the text only one schema is active. And its content is applied to the current text position. When starting text parse process, scheme with name, equals to its type name is used.
Attribute: name, type: xs:NCName
HRC Scheme name.
Attribute: access, type: access, default: private
Deprecated???
Content:
Element: annotation, type: annotation
Defines formal documentation for HRC language elements.
Element: regexp, type: regexp
Regular Expression token.
Element: block, type: block
Context switch operator.
Element: keywords, type: keywords
List of tokens with equal properties.
Element: inherit, type: inherit
Scheme inheritance construction.
Namespaces
2.3. Namespaces
xxxxxx
Scheme syntax
3. Scheme syntax
Keyword lists
3.1. Keyword lists
Element Name: keywords, type: keywords
List of tokens with equal properties. Keywords, symbols and so on... These lists are used to make processing of many tokens faster, when it isn't required to use RE to define syntax tokens.
Attribute: ignorecase, default: yes
Match this list of tokens with case sensitive or no.
Attribute: region, type: QName
Region, assigned to this list of tokens. Each token can define its custom region.
Attribute: priority, type: priority, default: low
Priority of any token could be normal (default) and low.
Attribute: worddiv, type: REworddiv
Class of characters, used to search words edges.
Content:
Element: word, type: word
Keyword tokens - use specified word edges.
Element: symb, type: symb
Symbol tokens - ignores specified word edges.
Element Name: word, type: word
Keyword tokens - use specified word edges.
Attribute: name, type: xs:string
Attribute: region, type: QName
A pair of type name and valid XML name.
Element Name: symb, type: symb
Symbol tokens - ignores specified word edges.
Attribute: name, type: xs:string
Attribute: region, type: QName
A pair of type name and valid XML name.
Regular Expressions
3.2. Regular Expressions
Element Name: regexp, type: regexp
Regular Expression token.
Attribute: match, type: REstring
RE syntax
Attribute: priority, type: priority, default: normal
Priority of any token could be normal (default) and low.
Blocked context switch
3.3. Blocked context switch
Element Name: block, type: block
Context switch operator. Used to switch currently used context into the specified one. Context is switched, if RE pattern, placed in 'start' attribute, is matches. Switched context is closed, then parser finds match of the 'end' RE.
Attribute: start, type: REstring
Regular Expression
Attribute: end, type: REstring
Regular Expression
Attribute: scheme, type: QName
A pair of type name and valid XML name.
Attribute: priority, type: priority, default: normal
Priority of any token could be normal (default) and low.
Attribute: content-priority, type: priority, default: normal
Priority of any token could be normal (default) and low.
Attribute: region, type: QName
A pair of type name and valid XML name.
Attribute: region00, type: QName
A pair of type name and valid XML name.
Attribute: region01, type: QName
A pair of type name and valid XML name.
Attribute: region02, type: QName
A pair of type name and valid XML name.
Attribute: region03, type: QName
A pair of type name and valid XML name.
Attribute: region04, type: QName
A pair of type name and valid XML name.
Attribute: region05, type: QName
A pair of type name and valid XML name.
Attribute: region06, type: QName
A pair of type name and valid XML name.
Attribute: region07, type: QName
A pair of type name and valid XML name.
Attribute: region08, type: QName
A pair of type name and valid XML name.
Attribute: region09, type: QName
A pair of type name and valid XML name.
Attribute: region0a, type: QName
A pair of type name and valid XML name.
Attribute: region0b, type: QName
A pair of type name and valid XML name.
Attribute: region0c, type: QName
A pair of type name and valid XML name.
Attribute: region0d, type: QName
A pair of type name and valid XML name.
Attribute: region0e, type: QName
A pair of type name and valid XML name.
Attribute: region0f, type: QName
A pair of type name and valid XML name.
Attribute: region10, type: QName
A pair of type name and valid XML name.
Attribute: region11, type: QName
A pair of type name and valid XML name.
Attribute: region12, type: QName
A pair of type name and valid XML name.
Attribute: region13, type: QName
A pair of type name and valid XML name.
Attribute: region14, type: QName
A pair of type name and valid XML name.
Attribute: region15, type: QName
A pair of type name and valid XML name.
Attribute: region16, type: QName
A pair of type name and valid XML name.
Attribute: region17, type: QName
A pair of type name and valid XML name.
Attribute: region18, type: QName
A pair of type name and valid XML name.
Attribute: region19, type: QName
A pair of type name and valid XML name.
Attribute: region1a, type: QName
A pair of type name and valid XML name.
Attribute: region1b, type: QName
A pair of type name and valid XML name.
Attribute: region1c, type: QName
A pair of type name and valid XML name.
Attribute: region1d, type: QName
A pair of type name and valid XML name.
Attribute: region1e, type: QName
A pair of type name and valid XML name.
Attribute: region1f, type: QName
A pair of type name and valid XML name.
Content:
Element: start, type: blockInner
Alternative style of RE definition.
Element: end, type: blockInner
Alternative style of RE definition.
Element Name: blockInner, type: blockInner
Alternative style of RE definition. Could be used, when RE is very complex and it is easier to use character (or CDATA) sections to define it.
Scheme boundaries and priority
3.4. Scheme boundaries and priority
Inter-scheme links
4. Inter-scheme links
Inheritance
4.1. Inheritance
Element Name: inherit, type: inherit
Scheme inheritance construction. If one scheme is inherited in another, then the latter scheme takes all the definitions from the former, as it was included directly in place of inherit operator. One scheme can't inherit another, if that scheme is already makes inheritance (even indirect) of the first one.
Attribute: scheme, type: QName
Inherited scheme name.
Content:
Element: virtual, type: virtual
Inheritance substitution element.
Element Name: virtual, type: virtual
Inheritance substitution element. While inheriting one scheme in another, it is possible to redefine inner inherited schemes with some others. This could be used to change inherited language behavior.
Attribute: scheme, type: QName
Redefined scheme.
Attribute: subst-scheme, type: QName
Scheme to use instead redefined one.
Schemes substitutions
4.2. Schemes substitutions
Regular Expressions syntax
A. Regular Expressions syntax
Introduction
1. Introduction
All work of the Colorer library and HRC language is based on the regular expressions (RE) usage. They allows you to create universal syntax rules of highlighting in HRC.
Regular expressions consist of the set of characters. Some of these are simple, and some are special metacharacters. All metacharacters (escapes) are divided into three categories: first - zerolength (words boundaries and so on); second - class metacharacters (\w, \s .); and the third class is operators. RE operators could be applied to single character, to block, enwrapped in brackets or into other operators. You can use brackets to group any sequence of characters. Regular expressions in HRC Language are like Perl regexp in their base syntax. There are some differences in extended operators.
Syntax
2. Syntax
All regexps must be in slashes /.../ After the end slash there could be parameters:

•
i
- ignore symbol case
•
x
- ignore direct spaces and crlf (for comfort)
•
s
- suppose, that regexp is single line - it means, than '.' class should include \r\n symbols.
Each symbol in RE is linearly compared with the target string. Everything, that doesn't looks like metacharacters, means simple character.
Metacharacters
3. Metacharacters
Table A.1. Metacharacters

^
Match the beginning of the line
$
Match the end of the line
.
Match any character (except \r\n)
[...]
Match characters in set
[^...]
Match characters not in set. Here all the operators are disabled, but you can use other metacharacters, and range operator: a-z means all chars from first to second (a - z)
\#
Next symbol '#' after slash (except a-z and 1-9)
\b
Start of word
\B
End of word
\xNN
NN
- ASCII char (hex)
\n
0x10 (lf)
\r
0x13 (cr)
\t
0x09 (tab)
\s
tab/space/cr/lf
\S
Non-space
\w
Word symbol (chars, digits, _)
\W
Non-word symbol
\d
Digit
\D
Non-Digit
\u
Uppercase symbol
\l
Lowercase symbol

Extended metacharacter
4. Extended metacharacter
These metacharacters are incompatible with Perl
Table A.2. Extended Metacharacters

\c
means 'non-word before'
\N
Link inside of regexp to one of its brackets. N - needed brackets pair. This operator works only with non-operator symbols in a bracket.

And these could be disabled during compilaton as highlight-dependent
Table A.3. Extended Metacharacters

~
Matches for the start of parent scheme (end of start start).
\m
Change start of regexp
\M
Change end of regexp
\yN
Link to the external regexp (in End to the Start param). N - requeried brackets pair.

Operators
5. Operators
Operators couldn't be used without some preceding character sequence. Each operator must be applied to the appropriate character, metacharacter, or block of their combination (enclosed with brackets).
Table A.4. Operators

( )
Group and remember characters to form one pattern.
|
Match previous or next pattern.
*
Match previous pattern 0 or more times.
+
Match previous pattern 1 or more times.
?
Match previous pattern 0 or 1 times.
{n}
Repeat n times.
{n,}
Repeat n or more times.
{n,m}
Repeat from n to m times.

If you'll add ? after operator, it becomes nongreedy. For example * operator becomes nongreedy if placing *? Greedy operator tries to take as much in string, as it can. Nongreedy takes by minimum.
Extended operators
6. Extended operators
Table A.5. Extended Operators

?#N
Look-behind. N - symbol count.
?~N
Inverted Look-behind.
?=
Look-ahead.
?!
Inverted Look-ahead.

Note, that two last operators exist in Perl - in form of (?=foobar). But colorer uses syntax (foobar)?=
Examples
7. Examples
Example A.1. RE examples
/foobar/
will match "foobar", "foobar barfoo"
/ FOO bar /ix
will match "foobar" "FOOBAR" "foobar and two other foos"
/(foo)?bar/
will match "foobar", "bar"
/^foobar$/
will match _only_ with "foobar"
/([\d\.])+/
will match any number
/(foo|bar)+/
will match "foofoofoobarfoobar", "bar"
/f[obar]+r/
will match "foobar", "for", "far"
HRC Coding Recommendations
B. HRC Coding Recommendations
Пока хочу сказать, что нужно править всю базу на предмет появившихся пространств имен. Так как раньше ничего этого не было, каждая схема именовалась со своим префиксом. И теперь это все надо убирать нафиг. Иными словами, в описании каждого типа файлов схемы нужно переименовывать, убирать префиксы и называть их нормальными именами. То же самое относится к использованию сущностей и определений регионов.
По возможности не надо использовать функции импорта других типов, потому как это уменьшает читабельность. Исключением может быть только тип def, и случаи, когда очень много ссылок на объекты других типов. Намного понятней выглядит scheme='c:StringCore' чем просто scheme='StringCore'.
changes:
Возможно, <import> я вообще уберу.
Format of catalog.xml file
C. Format of catalog.xml file

Catalog of all Colorer Library resources is a convenient way to unify creation and management of all the Colorer features.

This catalog is stored in catalog.xml file, and mapped into the ParserFactory class.

Catalog supports storing of all installed HRC modules, management of error logging and listing of available HRD sets.

Element Name: catalog, type: catalog
Describes all available Colorer Library resources.
Content:
Element: hrc-sets, type: hrc-sets
Lists all installed root locations of HRC codes.
Element: hrd-sets, type: hrd-sets
Lists all available HRD sets.
Element Name: hrc-sets, type: hrc-sets
Lists all installed root locations of HRC codes. These locations are loaded when HRC bases are created.
Attribute: log-location, type: xs:string
Path to the default library log file. If missed, there is no logging.
Content:
Element: location, type: location
Single resource location.
Element Name: hrd-sets, type: hrd-sets
Lists all available HRD sets. Each HRD Entry describes single color scheme, used to represent colored text. Note, that one Entry
Content:
Element: hrd, type: hrd-entry
Describes one HRD properties set.
Element Name: hrd-entry, type: hrd-entry
Describes one HRD properties set.
Attribute: class, type: xs:NMTOKEN
HRD class. Currently available 'console', 'rgb' and 'text' classes.
Attribute: name, type: xs:NMTOKEN
Internal name of this set, used to referring from executable codes.
Attribute: description, type: xs:string
User-friendly description of this HRD set.
Content:
Element: location, type: location
Single resource location.
Element Name: location, type: location
Single resource location. Path can be relative to the catalog location, or absolute URI with or without URI schema specification.
Attribute: link, type: xs:string
<schema targetNamespace="http://colorer.sf.net/2003/catalog" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<element name="catalog" type="catalog"/>

<complexType name="catalog"> <sequence> <element name="hrc-sets" type="hrc-sets"/> <element name="hrd-sets" type="hrd-sets"/> </sequence> </complexType>

<complexType name="hrc-sets"> <sequence> <element name="location" type="location" maxOccurs="unbounded"/> </sequence> <attribute name="log-location" type="xs:string"> </attribute> </complexType>

<complexType name="hrd-sets"> <sequence> <element name="hrd" type="hrd-entry" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType>

<complexType name="hrd-entry"> <sequence> <element name="location" type="location" maxOccurs="unbounded"/> </sequence> <attribute name="class" type="xs:NMTOKEN" use="required"> </attribute> <attribute name="name" type="xs:NMTOKEN" use="required"> </attribute> <attribute name="description" type="xs:string"> </attribute> </complexType>

<complexType name="location"> <attribute name="link" type="xs:string" use="required"/> </complexType> </schema>
Format of HRD color schemes
D. Format of HRD color schemes
HRD storage is used to assign each HRC Region with some editor-specific properties. Commonly, these include color and style information. HRD file consists of the list of the entries, each of them describing one HRC Region.

Element Name: hrd, type: hrd
List of assigns between regions and their external properties. These properties commonly include text decoration parameters, such as color, style, font and so on... Global color layering model can be chosen by the target application, depending on its text presentation style, features and requirements. In general, all transparent colors must inherit color value from its parent schema color. If the current schema is a top-level, default fore- and back-ground colors are used. Default Colors could be stored in HRD, using standard default region 'def:Text', or could be requested by application from the GUI environment.
Content:
Element: assign, type: assign
Single entry, describes region's properties.
Element Name: assign, type: assign
Single entry, describes region's properties. If entry is specified more than one time, then used the latest definition. This allows processing of several HRD files to complete color description of target HRC regions.
Attribute: name
Full qualified region name (a pair [type:name]). Note, that if region has no HRD properties associations, it inherits properties from its parent. If any of its ancestors has no assigned properties, region visualization must be skipped (it becomes fully transparent).
Attribute: fore, type: xs:token
Foreground color. If missed, transparent color assumed.
Attribute: back, type: xs:token
Background color. If missed, transparent color assumed.
Attribute: style, type: xs:token
Style bits (bold, italic, underline).
Attribute: stext, type: xs:string
Text prefix mapping (foreground).
Attribute: etext, type: xs:string
Text prefix mapping (background).
Attribute: sback, type: xs:string
Text Suffix mapping (foreground).
Attribute: eback, type: xs:string
Text Suffix mapping (background).
It is possible to maintain different HRD settings for different languages, or to compile them into one single HRD file. The former allows you to distribute recommended settings with each language, and the latter - to unify modifying and storing changed HRD settings with provided UI.

<schema targetNamespace="http://colorer.sf.net/2003/hrd" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<element name="hrd" type="hrd"/>

<complexType name="hrd"> <sequence minOccurs="0" maxOccurs="unbounded"> <element name="assign" type="assign"/> </sequence> </complexType>

<complexType name="assign"> <attribute name="name" use="required"> <simpleType> <restriction base="xs:string"> <pattern value="\i\c*\:\i\c*"/> </restriction> </simpleType> </attribute> <attribute name="fore" type="xs:token"> </attribute> <attribute name="back" type="xs:token"> </attribute> <attribute name="style" type="xs:token"> </attribute> <attribute name="stext" type="xs:string"> </attribute> <attribute name="etext" type="xs:string"> </attribute> <attribute name="sback" type="xs:string"> </attribute> <attribute name="eback" type="xs:string"> </attribute> </complexType> </schema>
XML Schema for HRC Language
E. XML Schema for HRC Language
This XML Schema instance was automatically generated from original hrc.xsd source, available at http://colorer.sf.net/2003/hrc.xsd. All comments and documentation tags were stripped to achieve more compact format. To use this schema in other, than informational purposes, use up-to-date version, available on the link above.
<schema targetNamespace="http://colorer.sf.net/2003/hrc" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<simpleType name="REstring"> <restriction base="xs:string"> <whiteSpace value="collapse"/> <pattern value="/.*/[ix]*"/> </restriction> </simpleType>

<simpleType name="REworddiv"> <restriction base="xs:string"> <whiteSpace value="collapse"/> <pattern value="\[.*\]|%.*;"/> </restriction> </simpleType>

<simpleType name="REstring-or-null"> <union memberTypes="REstring"> <simpleType> <restriction base="xs:string"> <enumeration value=""/> </restriction> </simpleType> </union> </simpleType>

<simpleType name="QName"> <restriction base="xs:string"/> </simpleType>

<attributeGroup name="regionX"> <attribute name="region" type="QName"/> <attribute name="region0" type="QName"/> <attribute name="region1" type="QName"/> <attribute name="region2" type="QName"/> <attribute name="region3" type="QName"/> <attribute name="region4" type="QName"/> <attribute name="region5" type="QName"/> <attribute name="region6" type="QName"/> <attribute name="region7" type="QName"/> <attribute name="region8" type="QName"/> <attribute name="region9" type="QName"/> <attribute name="regiona" type="QName"/> <attribute name="regionb" type="QName"/> <attribute name="regionc" type="QName"/> <attribute name="regiond" type="QName"/> <attribute name="regione" type="QName"/> <attribute name="regionf" type="QName"/> </attributeGroup>

<element name="hrc" type="hrc"/>

<complexType name="hrc"> <sequence> <element name="annotation" type="annotation" minOccurs="0"/> <element name="prototype" type="prototype" minOccurs="0" maxOccurs="unbounded"/> <element name="type" type="type" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="version" type="xs:NMTOKEN" use="required"> </attribute> </complexType>

<complexType name="annotation"> <choice minOccurs="0" maxOccurs="unbounded"> <element name="appinfo"> <complexType mixed="true"> <sequence minOccurs="0" maxOccurs="unbounded"> <any namespace="##other" processContents="lax"/> </sequence> </complexType> </element> <element name="documentation"> <complexType mixed="true"> <sequence minOccurs="0" maxOccurs="unbounded"> <any namespace="##other" processContents="skip"/> </sequence> </complexType> </element> <element name="contributors"> <complexType mixed="true"> <sequence minOccurs="0" maxOccurs="unbounded"> <any namespace="##other" processContents="lax"/> </sequence> </complexType> </element> </choice> </complexType>

<complexType name="prototype"> <sequence> <element name="annotation" type="annotation" minOccurs="0"/> <element name="location" minOccurs="0"> <complexType> <attribute name="link" type="xs:anyURI" use="required"/> </complexType> </element> <element name="filename" type="filename" minOccurs="0" maxOccurs="unbounded"/> <element name="firstline" type="firstline" minOccurs="0" maxOccurs="unbounded"/> <element name="parameters" minOccurs="0"> <complexType> <sequence minOccurs="0" maxOccurs="unbounded"> <element name="param"> <complexType> <attribute name="name" type="xs:string" use="required"/> <attribute name="value" type="xs:string" use="required"/> </complexType> </element> </sequence> </complexType> </element> </sequence> <attribute name="name" type="xs:NCName" use="required"> </attribute> <attribute name="description" type="xs:string" use="required"> </attribute> <attribute name="group" type="xs:Name"> </attribute> <attribute name="targetNamespace" type="xs:anyURI"> </attribute> </complexType>

<complexType name="filename"> <simpleContent> <extension base="REstring"> <attribute name="weight" type="xs:decimal" default="2"> </attribute> </extension> </simpleContent> </complexType>

<complexType name="firstline"> <simpleContent> <extension base="REstring"> <attribute name="weight" type="xs:decimal" default="1"> </attribute> </extension> </simpleContent> </complexType>

<complexType name="type"> <choice minOccurs="0" maxOccurs="unbounded"> <element name="annotation" type="annotation"/> <element name="import" type="import"/> <element name="region" type="region"/> <element name="entity" type="entity"/> <element name="scheme" type="scheme"/> </choice> <attribute name="name" type="xs:NCName" use="required"> </attribute> <attribute name="access" type="access" default="private"/> </complexType>

<simpleType name="access"> <restriction base="xs:string"> <enumeration value="public"/> <enumeration value="private"/> </restriction> </simpleType>

<complexType name="scheme"> <sequence> <element name="annotation" type="annotation" minOccurs="0"/> <choice minOccurs="0" maxOccurs="unbounded"> <element name="regexp" type="regexp"/> <element name="block" type="block"/> <element name="keywords" type="keywords"/> <element name="inherit" type="inherit"/> </choice> </sequence> <attribute name="name" type="xs:NCName" use="required"> </attribute> <attribute name="access" type="access" default="private"/> </complexType>

<complexType name="import"> <attribute name="type" type="xs:NCName" use="required"/> </complexType>

<complexType name="entity"> <attribute name="name" type="xs:NCName" use="required"> </attribute> <attribute name="value" type="xs:string" use="required"> </attribute> </complexType>

<complexType name="region"> <attribute name="name" type="xs:NCName" use="required"> </attribute> <attribute name="parent" type="QName"> </attribute> <attribute name="description" type="xs:string"> </attribute> </complexType>

<complexType name="regexp"> <simpleContent> <extension base="REstring-or-null"> <attribute name="match" type="REstring"> </attribute> <attribute name="priority" type="priority" default="normal"/> <attributeGroup ref="regionX"/> </extension> </simpleContent> </complexType>

<simpleType name="priority"> <restriction base="xs:string"> <enumeration value="low"/> <enumeration value="normal"/> </restriction> </simpleType>

<complexType name="block"> <sequence minOccurs="0"> <element name="start" type="blockInner"/> <element name="end" type="blockInner"/> </sequence> <attribute name="start" type="REstring"/> <attribute name="end" type="REstring"/> <attribute name="scheme" type="QName" use="required"/> <attribute name="priority" type="priority" default="normal"/> <attribute name="content-priority" type="priority" default="normal"/> <attribute name="region" type="QName"/> <attribute name="region00" type="QName"/> <attribute name="region01" type="QName"/> <attribute name="region02" type="QName"/> <attribute name="region03" type="QName"/> <attribute name="region04" type="QName"/> <attribute name="region05" type="QName"/> <attribute name="region06" type="QName"/> <attribute name="region07" type="QName"/> <attribute name="region08" type="QName"/> <attribute name="region09" type="QName"/> <attribute name="region0a" type="QName"/> <attribute name="region0b" type="QName"/> <attribute name="region0c" type="QName"/> <attribute name="region0d" type="QName"/> <attribute name="region0e" type="QName"/> <attribute name="region0f" type="QName"/> <attribute name="region10" type="QName"/> <attribute name="region11" type="QName"/> <attribute name="region12" type="QName"/> <attribute name="region13" type="QName"/> <attribute name="region14" type="QName"/> <attribute name="region15" type="QName"/> <attribute name="region16" type="QName"/> <attribute name="region17" type="QName"/> <attribute name="region18" type="QName"/> <attribute name="region19" type="QName"/> <attribute name="region1a" type="QName"/> <attribute name="region1b" type="QName"/> <attribute name="region1c" type="QName"/> <attribute name="region1d" type="QName"/> <attribute name="region1e" type="QName"/> <attribute name="region1f" type="QName"/> </complexType>

<complexType name="blockInner"> <simpleContent> <extension base="REstring"> <attributeGroup ref="regionX"/> </extension> </simpleContent> </complexType>

<complexType name="inherit"> <sequence> <element name="virtual" type="virtual" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="scheme" type="QName" use="required"> </attribute> </complexType>

<complexType name="virtual"> <attribute name="scheme" type="QName" use="required"> </attribute> <attribute name="subst-scheme" type="QName" use="required"> </attribute> </complexType>

<complexType name="keywords"> <choice minOccurs="0" maxOccurs="unbounded"> <element name="word" type="word"/> <element name="symb" type="symb"/> </choice> <attribute name="ignorecase" default="yes"> <simpleType> <restriction base="xs:string"> <enumeration value="yes"/> <enumeration value="no"/> </restriction> </simpleType> </attribute> <attribute name="region" type="QName"> </attribute> <attribute name="priority" type="priority" default="low"/> <attribute name="worddiv" type="REworddiv"> </attribute> </complexType>

<complexType name="symb"> <attribute name="name" type="xs:string" use="required"/> <attribute name="region" type="QName"/> </complexType>

<complexType name="word"> <attribute name="name" type="xs:string" use="required"/> <attribute name="region" type="QName"/> </complexType> </schema>
References
[XML 1.0] Tim Bray, Jean Paoli, and C. M. Sperberg-McQueen, Eve Maler, editors. Extensible Markup Language (XML) 1.0 Second Edition. W3C (World Wide Web Consortium), 2000.
[XSLT 1.0] James Clark, editor. XSL Transformations (XSLT) 1.0. W3C (World Wide Web Consortium), 1999.
[W3C XML Schema Structures]

Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, editors. XML Schema Part 1: Structures. W3C (World Wide Web Consortium), 2001.
[W3C XML Schema Datatypes] Paul V. Biron, Ashok Malhotra, editors. XML Schema Part 2: Datatypes. W3C (World Wide Web Consortium), 2001.