This is a base set of modes for XML, documented in ../../doc/gloss-xml1.html and subsequent pages and also (in dues course) here, for more technical information.
These modes for GLOSS-XML can be extended by the usual mechanism. of hooks. Indeed many other sets of modes hook onto these base modes. Being small and simple it should be easier to extend and maintain.
!declare-prefix @prefix[xml] @uri[http://gloss.bham.ac.uk/mv/xml/xml] {
!init-parameter @name[xml:document-type] @value[document]
!init-parameter @name[xml:text-buffer] @value[]
!init-parameter @name[xml:attr-value] @value[]
!init-parameter @name[xml:attr-found] @value[]
!init-parameter @name[xml:inner-structured-content] @value[xml:structured-content]
!init-parameter @name[xml:inner-document-fragment-mode] @value[xml:structured-content]
!init-parameter @name[xml:inner-dtd-mode] @value[xml:dtd-content]
!init-parameter @name[xml:default-prefix] @value[]
!init-parameter @name[xml:pelt-default-prefix] @value[]
!mode @name[xml:main] @accept[<!\[CDATA\[|<?gloss|<!--|] @type[process]
!punc @value[<!\[CDATA\[]
!process-tokens @mode[xml:$\{xml:document-type\}] @use-indentation[false]
!process-tokens @mode[xml:closing-cdata-tag] @use-indentation[false]
!return
!punc @value[<?gloss]
!process-tokens @mode[xml:$\{xml:document-type\}] @use-indentation[false]
!process-tokens @mode[xml:closing-glosspi-tag] @use-indentation[false]
!return
!punc @value[<!--]
!process-tokens @mode[xml:$\{xml:document-type\}] @use-indentation[false]
!process-tokens @mode[xml:closing-comment-tag] @use-indentation[false]
!return
!default
!process-tokens @mode[xml:$\{xml:document-type\}] @use-indentation[false]
!return
!mode @name[xml:closing-cdata-tag] @accept[\]\]>|] @type[process]
!punc @value[\]\]>] !return
!default
!message[ERROR$: a \]\]> was expected here, line $l, column $c[
]]
!return
!mode @name[xml:closing-glosspi-tag] @accept[?>|] @type[process]
!punc @value[?>] !return
!default
!message[ERROR$: a ?> was expected here, line $l, column $c[
]]
!return
!mode @name[xml:closing-comment-tag] @accept[-->|] @type[process]
!punc @value[-->] !return
!default
!message[ERROR$: a --> was expected here, line $l, column $c[
]]
!return
!mode @name[xml:document] @accept[] @type[process]
!default
!document
!if @test[$\{xml:bom\}] @value[include] !attribute @name[bom] [$\{xml:bom\}]
!if @test[$\{xml:decl\}] @value[include] !attribute @name[xmldecl] [$\{xml:decl\}]
!if @test[$\{xml:version\}] !attribute @name[version] [$\{xml:version\}]
!if @test[$\{xml:encoding\}] !attribute @name[encoding] [$\{xml:encoding\}]
!if @test[$\{xml:standalone\}] !attribute @name[standalone] [$\{xml:standalone\}]
!process-tokens @mode[xml:doctype]
!process-tokens @mode[xml:root]
!return
!mode @name[xml:document-fragment] @accept[] @type[process]
!default
!document-fragment
!if @test[$\{xml:bom\}] @value[include] !attribute @name[bom] [$\{xml:bom\}]
!if @test[$\{xml:decl\}] @value[include] !attribute @name[xmldecl] [$\{xml:decl\}]
!if @test[$\{xml:version\}] !attribute @name[version] [$\{xml:version\}]
!if @test[$\{xml:encoding\}] !attribute @name[encoding] [$\{xml:encoding\}]
!process-tokens @mode[$\{xml:inner-document-fragment-mode\}]
!return
!mode @name[xml:dtd] @accept[] @type[process]
!default
!document-fragment
!if @test[$\{xml:bom\}] @value[include] !attribute @name[bom] [$\{xml:bom\}]
!if @test[$\{xml:decl\}] @value[include] !attribute @name[xmldecl] [$\{xml:decl\}]
!if @test[$\{xml:version\}] !attribute @name[version] [$\{xml:version\}]
!if @test[$\{xml:encoding\}] !attribute @name[encoding] [$\{xml:encoding\}]
!process-tokens @mode[$\{xml:inner-dtd-mode\}]
!return
!mode @name[xml:dtd-content] @accept[elt|attr|pelt|pi|cref|eref|!LITERAL|!|\{|\}|\[|\]] @type[process]
!pelt
!xr-element @name[$q]
!process-tokens @mode[xml:dtd-content]
!punc @data[\{]
!execute @mode[xml:brace-group]
!set-parameter @name[xml:inner-structured-content] @value[xml:dtd-content]
!punc @data[\}]
!abort
!include @mode[xml:structured-content]
!mode @name[xml:glosssrc-pi] @accept[] @type[process] @use-indentation[false]
!default
!processing-instruction @target[glosssrc] [doc="$s" line="$l" col="$c"]
!return
!mode @name[xml:structured-content] @accept[elt|attr|pi|cref|eref|!CDATA|!LITERAL|pelt|!|\{|\}|\[|\]] @type[process]
!pelt !execute @mode[xml:pelement]
!elt !execute @mode[xml:element]
!attr !execute @mode[xml:attribute]
!pi @children-adjust[1] !execute @mode[xml:pi]
!cref !execute @mode[xml:reference]
!eref !execute @mode[xml:reference]
!punc @data[!CDATA] !execute @mode[xml:cdata]
!punc @data[!LITERAL] !execute @mode[xml:literal]
!punc @data[!] @children-adjust[1] !execute @mode[xml:comment]
!punc @data[\{] !execute @mode[xml:brace-group]
!punc @data[\}] !abort
!punc @data[\[] !execute @mode[xml:text]
!punc @data[\]] !abort
!mode @name[xml:doctype] @accept[!DOCTYPE|pi|!LITERAL|pelt|!] @children[1] @type[process]
!pi @children-adjust[1] !execute @mode[xml:pi]
!pelt !abort
!punc @data[!LITERAL] @children-adjust[1] !execute @mode[xml:literal]
!punc @data[!] @children-adjust[1] !execute @mode[xml:comment]
!punc @data[!DOCTYPE]
!doctype
!process-tokens @mode[xml:attribute-list]
!process-tokens @mode[xml:dtd-content]
!mode @name[xml:root] @accept[elt|pi|!LITERAL|pelt|!] @children[1] @type[process] @use-indentation[false]
!pi @children-adjust[1] !execute @mode[xml:pi]
!punc @data[!LITERAL] @children-adjust[1] !execute @mode[xml:literal]
!punc @data[!] @children-adjust[1] !execute @mode[xml:comment]
!elt !execute @mode[xml:element]
!pelt !execute @mode[xml:pelement]
!mode @name[xml:element] @accept[elt] @type[execute]
!elt @prefix[]
!process-tokens @mode[xml:glosssrc-pi]
!if @test[$\{xml:default-prefix\}]
!element @name[$\{xml:default-prefix\}$:$n]
!process-tokens @mode[$\{xml:inner-structured-content\}]
!else
!element !process-tokens @mode[$\{xml:inner-structured-content\}]
!elt
!process-tokens @mode[xml:glosssrc-pi]
!element !process-tokens @mode[$\{xml:inner-structured-content\}]
!mode @name[xml:pelement] @accept[pelt] @type[execute]
!pelt @prefix[]
!process-tokens @mode[xml:glosssrc-pi]
!if @test[$\{xml:pelt-default-prefix\}]
!element @name[$\{xml:pelt-default-prefix\}$:$n]
!process-tokens @mode[$\{xml:inner-structured-content\}]
!else
!element !process-tokens @mode[$\{xml:inner-structured-content\}]
!pelt
!element !process-tokens @mode[$\{xml:inner-structured-content\}]
!mode @name[xml:process-attr] @accept[\[|] @children[1] @type[process]
!punc !execute @mode[xml:get-attr]
!mode @name[xml:get-attr] @accept[\[|] @type[execute]
!punc @data[\[]
!set-parameter @name[xml:text-buffer] @value[]
!process-tokens @mode[xml:get-attrchars] @parameters[share]
!export-parameter @name[$\{xml:attr-param\}] @value[$\{xml:text-buffer\}]
!punc @data[]
!message [ERROR$: a \[ was expected here, line $l, column $c[
]]
!set-parameter @name[xml:text-buffer] @value[]
!export-parameter @name[$\{xml:attr-param\}] @value[]
!mode @name[xml:get-attrchars] @accept[\\\\|\\\[|\\\]|\\\{|\\\}|\[|\]|\{|\}|uc|] @use-indentation[false] @type[process]
!punc @data[\\\\] !append-parameter @name[xml:text-buffer] @value[\\]
!punc @data[\\\[] !append-parameter @name[xml:text-buffer] @value[\[]
!punc @data[\\\]] !append-parameter @name[xml:text-buffer] @value[\]]
!punc @data[\\\{] !append-parameter @name[xml:text-buffer] @value[\{]
!punc @data[\\\}] !append-parameter @name[xml:text-buffer] @value[\}]
!uc !append-parameter @name[xml:text-buffer] @value[$v]
!punc @data[\{] !message [ERROR$: a \{ is not allowed here, line $l, column $c[
]]
!punc @data[\}] !message [ERROR$: a \} is not allowed here, line $l, column $c[
]]
!punc @data[\[] !message [ERROR$: a \[ is not allowed here, line $l, column $c[
]]
!punc @data[\]] !return
!punc @data[]
!message [ERROR$: a \] was expected, line $l, column $c[
]]
!abort
!mode @name[xml:process-text] @accept[\[|] @children[1] @type[process]
!punc !execute @mode[xml:text]
!mode @name[xml:text] @accept[\[|] @type[execute]
!punc @data[\[]
!process-tokens @mode[xml:text-content]
!set-parameter @name[xml:text-buffer] @value[]
!process-tokens @mode[xml:check-close-bracket]
!return
!punc @data[]
!message [ERROR$: a \[ was expected here, line $l, column $c[
]]
!mode @name[xml:text-content] @accept[\\\\|\\\[|\\\]|\\\{|\\\}|\[|\]|\{|\}|uc|] @use-indentation[false] @type[process]
!punc @data[\\\\] !append-parameter @name[xml:text-buffer] @value[\\]
!punc @data[\\\[] !append-parameter @name[xml:text-buffer] @value[\[]
!punc @data[\\\]] !append-parameter @name[xml:text-buffer] @value[\]]
!punc @data[\\\{] !append-parameter @name[xml:text-buffer] @value[\{]
!punc @data[\\\}] !append-parameter @name[xml:text-buffer] @value[\}]
!uc !append-parameter @name[xml:text-buffer] @value[$v]
!punc @data[\{] !message [ERROR$: a \{ is not allowed here, line $l, column $c[
]]
!punc @data[\}] !message [ERROR$: a \} is not allowed here, line $l, column $c[
]]
!punc @data[\[]
!text [$\{xml:text-buffer\}]
!set-parameter @name[xml:text-buffer] @value[]
!process-tokens @mode[$\{xml:inner-structured-content\}] @use-indentation[false]
!process-tokens @mode[xml:check-close-bracket]
!punc @data[\]]
!text [$\{xml:text-buffer\}]
!abort
!punc @data[]
!message [ERROR$: a \] was expected, line $l, column $c[
]]
!abort
!mode @name[xml:brace-group] @accept[\{] @type[execute]
!punc
!process-tokens @mode[$\{xml:inner-structured-content\}] @use-indentation[false]
!process-tokens @mode[xml:check-close-brace]
!return
!mode @name[xml:attribute-references] @accept[eref|cref|\]] @use-indentation[false] @type[process]
!eref !execute @mode[xml:reference]
!cref !execute @mode[xml:reference]
!punc @data[\]] !return
!mode @name[xml:attribute-text] @accept[\\\\|\\\[|\\\]|\\\{|\\\}|\[|\]|\{|\}|uc] @use-indentation[false] @type[process]
!punc @data[\\\\] !append-parameter @name[xml:text-buffer] @value[\\]
!punc @data[\\\[] !append-parameter @name[xml:text-buffer] @value[\[]
!punc @data[\\\]] !append-parameter @name[xml:text-buffer] @value[\]]
!punc @data[\\\{] !append-parameter @name[xml:text-buffer] @value[\{]
!punc @data[\\\}] !append-parameter @name[xml:text-buffer] @value[\}]
!uc !append-parameter @name[xml:text-buffer] @value[$v]
!punc @data[\{] !message [ERROR$: a \{ is not allowed here, line $l, column $c[
]]
!punc @data[\}] !message [ERROR$: a \} is not allowed here, line $l, column $c[
]]
!punc @data[\[]
!text [$\{xml:text-buffer\}]
!set-parameter @name[xml:text-buffer] @value[]
!process-tokens @mode[xml:attribute-references] @use-indentation[false]
!punc @data[\]]
!text [$\{xml:text-buffer\}]
!return
!mode @name[xml:attribute-value] @accept[\[|] @type[process]
!punc @data[\[]
!set-parameter @name[xml:text-buffer] @value[]
!process-tokens @mode[xml:attribute-text] @use-indentation[false]
!export-parameter @name[xml:attr-found] @value[yes]
!return
!default
!return
!mode @name[xml:attribute-list] @accept[attr] @type[process]
!attr !execute @mode[xml:attribute]
!mode @name[xml:attribute] @accept[attr] @type[execute]
!attr
!set-parameter @name[xml:attr-found] @value[]
!set-parameter @name[xml:attr-value] @value[]
!attribute @name[$q]
!process-tokens @mode[xml:attribute-value]
!if-not @test[$\{xml:attr-found\}] [$q]
!mode @name[xml:cdata] @accept[!CDATA] @type[execute]
!default
!cdata
!process-tokens @mode[xml:process-text]
!mode @name[xml:literal] @accept[!LITERAL] @type[execute]
!default
!literal
!process-tokens @mode[xml:process-text]
!mode @name[xml:comment] @accept[!] @type[execute]
!default
!comment
!process-tokens @mode[xml:process-text]
!mode @name[xml:reference] @accept[cref|eref] @type[execute]
!cref
!character-reference
!eref
!entity-reference
!mode @name[xml:pi] @accept[pi] @type[execute]
!default
!processing-instruction
!process-tokens @mode[xml:process-text]
!mode @name[xml:check-close-bracket] @accept[\]|] @use-indentation[false] @children[1] @type[process]
!punc @data[\]] !return
!default !message [ERROR$: a \] was expected here, line $l, column $c[
]]
!mode @name[xml:check-close-brace] @accept[\}|] @use-indentation[false] @children[1] @type[process]
!punc @data[\}] !return
!default !message [ERROR$: a \} was expected here, line $l, column $c[
]]
}; !declare-prefix
This file is part of the GLOSS system, Copyright Richard Kaye http://gloss.bham.ac.uk/. Usage permitted under the GPL. No Warranty.
This page is copyright. Web page design and creation by GLOSS.