stripgloss.modes

1 Synopsis

These modes reads a standard GLOSS input file and

All of this output is returned in a single xml fragment where the data is encoded as: comment, CDATA section, or <?gloss ...?> processing instruction. Set the parameter "{http://gloss.bham.ac.uk/mv/doc/stripgloss}method" to "comment" "cdata" or "pi", or call modes strip:main-comment strip:main-cdata strip:main-pi directly. The default is CDATA.

2 The code

!declare-prefix @prefix[strip] @uri[http://gloss.bham.ac.uk/mv/doc/stripgloss] {

!init-parameter @name[strip:data] @value[]
!init-parameter @name[strip:indentation-for-pre] @value[]
!init-parameter @name[strip:method] @value[cdata]
!init-parameter @name[strip:indentation] @value[]
!init-parameter @name[strip:comment-found] @value[cdata]

!mode @name[strip:main] @accept[] @type[process] @use-indentation[false]
  !default 
    !process-tokens @mode[strip:main-$\{strip:method\}]
    !return

!mode @name[strip:main-pi] @accept[] @type[process] @use-indentation[false]
  !default
    !document-fragment @encoding[UTF-8]
      !processing-instruction @target[gloss]
        !text &#x0A;
        !process-tokens @mode[strip:process]
    !return

!mode @name[strip:main-comment] @accept[] @type[process] @use-indentation[false]
  !default
    !document-fragment @encoding[UTF-8]
      !comment
        !text &#x0A;
        !process-tokens @mode[strip:process]
    !return

!mode @name[strip:main-cdata] @accept[] @type[process] @use-indentation[false]
  !default
    !document-fragment @encoding[UTF-8]
      !cdata
        !text &#x0A;
        !process-tokens @mode[strip:process]
    !return

!mode @name[strip:process] @accept[; |uc|] @use-indentation[false] @type[process]
  !uc @fullname[0x9]  ; tab
    !append-parameter @name[strip:indentation] @value[$v]
  !uc @fullname[0x20] ; space
    !append-parameter @name[strip:indentation] @value[$v]
  !punc @data[; ]     ; semicolon comment
    !set-parameter @name[strip:indentation] @value[]
    !process-tokens @mode[strip:process-comment] @parameters[share]
    !text [$\{strip:data\}]
    !set-parameter @name[strip:data] @value[]
    !set-parameter @name[strip:indentation] @value[]
  !uc @data[;]        ; semicolon comment
    !set-parameter @name[strip:indentation] @value[]
    !process-tokens @mode[strip:process-comment] @parameters[share]
    !text [$\{strip:data\}]
    !set-parameter @name[strip:data] @value[]
    !set-parameter @name[strip:indentation] @value[]
  !uc                 ; anything else
    !set-parameter @name[strip:data] @value[$\{strip:indentation\}]
    !if @test[$v] @value[\\] !append-parameter @name[strip:data] @value[\\]
    !if @test[$v] @value[\{] !append-parameter @name[strip:data] @value[\\]
    !if @test[$v] @value[\}] !append-parameter @name[strip:data] @value[\\]
    !if @test[$v] @value[\[] !append-parameter @name[strip:data] @value[\\]
    !if @test[$v] @value[\]] !append-parameter @name[strip:data] @value[\\]
    !append-parameter @name[strip:data] @value[$v]
    !set-parameter @name[strip:indentation] @value[]
    !process-tokens @mode[strip:process-commands] @parameters[share]
    !text [$\{strip:indentation-for-pre\}pre\[$\{strip:data\}\]]
    !text &#x0A;
    !set-parameter @name[strip:data] @value[$\{strip:indentation\}]
  !default !abort

!mode @name[strip:process-comment] @accept[uc|] @use-indentation[false] @type[process]
  !uc @fullname[0xa] ; linefeed 
    !append-parameter @name[strip:data] @value[$v]
    !process-tokens @mode[strip:skip-cr] @parameters[share]
    !return
  !uc @fullname[0xd] ; carriage-return
    !append-parameter @name[strip:data] @value[$v]
    !process-tokens @mode[strip:skip-lf] @parameters[share]
    !return
  !uc
    !append-parameter @name[strip:data] @value[$v]
  !default !return

!mode @name[strip:skip-cr] @accept[uc|] @use-indentation[false] @type[process]
  !uc @fullname[0xd] !append-parameter @name[strip:data] @value[$v]
  !default !abort

!mode @name[strip:skip-lf] @accept[uc|] @use-indentation[false] @type[process]
  !uc @fullname[0xa] !append-parameter @name[strip:data] @value[$v]
  !default !abort

!mode @name[strip:process-commands] @accept[uc] @use-indentation[false] @type[process]
  !uc @fullname[0xa] ; linefeed
    !append-parameter @name[strip:data] @value[$v]
    !process-tokens @mode[strip:skip-cr] @parameters[share]
    !set-parameter @name[strip:indentation] []
    !set-parameter @name[strip:comment-found] []
    !process-tokens @mode[strip:check-for-comment] @parameters[share]
    !if @test[$\{strip:comment-found\}] !return 
    !set-parameter @name[strip:data] @value[$\{strip:data\}$\{strip:indentation\}]
  !uc @fullname[0xd] ; carriage-return
    !append-parameter @name[strip:data] @value[$v]
    !process-tokens @mode[strip:skip-lf] @parameters[share]
    !set-parameter @name[strip:indentation] []
    !set-parameter @name[strip:comment-found] []
    !process-tokens @mode[strip:check-for-comment] @parameters[share]
    !if @test[$\{strip:comment-found\}] !return
    !set-parameter @name[strip:data] @value[$\{strip:data\}$\{strip:indentation\}]
  !uc @value[\\] !append-parameter @name[strip:data] @value[\\\\]
  !uc @value[\[] !append-parameter @name[strip:data] @value[\\\[]
  !uc @value[\]] !append-parameter @name[strip:data] @value[\\\]]
  !uc @value[\{] !append-parameter @name[strip:data] @value[\\\{]
  !uc @value[\}] !append-parameter @name[strip:data] @value[\\\}]
  !default !append-parameter @name[strip:data] @value[$v]

!mode @name[strip:check-for-comment] @accept[uc|] @use-indentation[false] @type[process]
  !uc @fullname[0x9] !append-parameter @name[strip:indentation] @value[$v]
  !uc @fullname[0x20] !append-parameter @name[strip:indentation] @value[$v]
  !uc @data[;]
    !set-parameter @name[strip:comment-found] @value[yes]
    !abort
  !default !abort
}; !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.