xquery/XQuery__XQueryScanner.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 02 Jul 2018 08:46:01 +0200
changeset 305 bad21c4f64bf
parent 296 ea3dbc023c80
permissions -rw-r--r--
Tagged Smalltalk/X 8.0.0

"{ Package: 'stx:goodies/xmlsuite/xquery' }"

"{ NameSpace: XQuery }"

Perseus::Scanner subclass:#XQueryScanner
	instanceVariableNames:'lastValidState invalidTokenIds'
	classVariableNames:''
	poolDictionaries:''
	category:'XQuery-Core'
!


!XQueryScanner class methodsFor:'generated-comments'!

scannerDefinitionComment

	"<whitespace> :  [\f\n\r\t\v]+;
<comment> : \(\:.*\:\);
<char> : [a-zA-Z];
<digit> : [0-9];
<char_ref> : ((&\#[0-9]+\;) | (&\#x[0-9a-fA-F]+\;));

<ncnamechar> : (<char> | <digit> | \. | \- | \_);
<ncname> : (<char> | \_) (<ncnamechar>)*;
<qname> : (<ncname> \:)? <ncname>;

<digits> : [0-9]+;
<integer_literal> : <digits>;
<decimal_literal> : (\.<digits>) | (<digits>\.[0-9]*);
<double_literal> : ((\.<digits>) | (<digits>(\.[0-9]*)?)) [eE] [\+\-]? <digits>;

<predefined_entity_ref> : &(lt | gt | amp | quot | apos)\;;
<escape_quot> : """";
<escape_apos> : '';

<string_literal> : ("" (<predefined_entity_ref> | <char_ref> | <escape_quot> | [^""&])* "") | (' (<predefined_entity_ref> | <char_ref> | <escape_apos> | [^'&])* ');

<element_content_char> : <char> | <digit> | [ ];
<element_content_char2> : <char> - [{}<&] | <digit>;
<qout_attr_content_char> : <char> - [""{}<&];
<apos_attr_content_char> : <char> - ['{}<&];
"
! !

!XQueryScanner class methodsFor:'generated-initialization'!

initializeKeywordMap
    keywordMap := Dictionary new.
    #( #(131 'after' 89)
     #(131 'ancestor' 123)
     #(131 'and' 14)
     #(131 'as' 27)
     #(131 'ascending' 50)
     #(131 'at' 57)
     #(131 'attribute' 99)
     #(131 'before' 92)
     #(131 'by' 56)
     #(131 'cast' 30)
     #(131 'castable' 28)
     #(131 'child' 98)
     #(131 'comment' comment)
     #(131 'connect' 88)
     #(131 'copy' 94)
     #(131 'create' 85)
     #(131 'declare' 45)
     #(131 'default' 40)
     #(131 'delete' 66)
     #(131 'descendant' 100)
     #(131 'descending' 49)
     #(131 'disconnect' 81)
     #(131 'div' 1)
     #(131 'do' 71)
     #(131 'document' 73)
     #(131 'drop' 83)
     #(131 'element' 39)
     #(131 'else' 12)
     #(131 'empty' 52)
     #(131 'eq' 21)
     #(131 'every' 31)
     #(131 'except' 15)
     #(131 'first' 79)
     #(131 'following' 119)
     #(131 'for' 47)
     #(131 'from' 84)
     #(131 'function' 34)
     #(131 'ge' 108)
     #(131 'greatest' 51)
     #(131 'gt' 105)
     #(131 'idiv' 4)
     #(131 'if' 10)
     #(131 'import' 42)
     #(131 'in' 58)
     #(131 'insert' 69)
     #(131 'instance' 26)
     #(131 'intersect' 16)
     #(131 'into' 80)
     #(131 'is' 107)
     #(131 'item' 23)
     #(131 'last' 90)
     #(131 'le' 106)
     #(131 'least' 54)
     #(131 'let' 60)
     #(131 'lt' 95)
     #(131 'mod' 3)
     #(131 'modify' 93)
     #(131 'module' 41)
     #(131 'namespace' 43)
     #(131 'ne' 63)
     #(131 'node' 77)
     #(131 'of' 25)
     #(131 'on' 82)
     #(131 'or' 11)
     #(131 'order' 61)
     #(131 'ordered' 115)
     #(131 'parent' 121)
     #(131 'preceding' 126)
     #(131 'rename' 65)
     #(131 'replace' 68)
     #(131 'return' 48)
     #(131 'satisfies' 32)
     #(131 'self' 102)
     #(131 'some' 53)
     #(131 'stable' 55)
     #(131 'statement' 64)
     #(131 'text' 76)
     #(131 'then' 9)
     #(131 'to' 13)
     #(131 'transform' 91)
     #(131 'trigger' 86)
     #(131 'triggerdef' 87)
     #(131 'union' 6)
     #(131 'unordered' 112)
     #(131 'value' 67)
     #(131 'where' 62)
     #(131 'with' 70)
     #(132 'after' 89)
     #(132 'ancestor' 123)
     #(132 'and' 14)
     #(132 'as' 27)
     #(132 'ascending' 50)
     #(132 'at' 57)
     #(132 'attribute' 99)
     #(132 'before' 92)
     #(132 'by' 56)
     #(132 'cast' 30)
     #(132 'castable' 28)
     #(132 'child' 98)
     #(132 'comment' comment)
     #(132 'connect' 88)
     #(132 'copy' 94)
     #(132 'create' 85)
     #(132 'declare' 45)
     #(132 'default' 40)
     #(132 'delete' 66)
     #(132 'descendant' 100)
     #(132 'descending' 49)
     #(132 'disconnect' 81)
     #(132 'div' 1)
     #(132 'do' 71)
     #(132 'document' 73)
     #(132 'drop' 83)
     #(132 'element' 39)
     #(132 'else' 12)
     #(132 'empty' 52)
     #(132 'eq' 21)
     #(132 'every' 31)
     #(132 'except' 15)
     #(132 'first' 79)
     #(132 'following' 119)
     #(132 'for' 47)
     #(132 'from' 84)
     #(132 'function' 34)
     #(132 'ge' 108)
     #(132 'greatest' 51)
     #(132 'gt' 105)
     #(132 'idiv' 4)
     #(132 'if' 10)
     #(132 'import' 42)
     #(132 'in' 58)
     #(132 'insert' 69)
     #(132 'instance' 26)
     #(132 'intersect' 16)
     #(132 'into' 80)
     #(132 'is' 107)
     #(132 'item' 23)
     #(132 'last' 90)
     #(132 'le' 106)
     #(132 'least' 54)
     #(132 'let' 60)
     #(132 'lt' 95)
     #(132 'mod' 3)
     #(132 'modify' 93)
     #(132 'module' 41)
     #(132 'namespace' 43)
     #(132 'ne' 63)
     #(132 'node' 77)
     #(132 'of' 25)
     #(132 'on' 82)
     #(132 'or' 11)
     #(132 'order' 61)
     #(132 'ordered' 115)
     #(132 'parent' 121)
     #(132 'preceding' 126)
     #(132 'rename' 65)
     #(132 'replace' 68)
     #(132 'return' 48)
     #(132 'satisfies' 32)
     #(132 'self' 102)
     #(132 'some' 53)
     #(132 'stable' 55)
     #(132 'statement' 64)
     #(132 'text' 76)
     #(132 'then' 9)
     #(132 'to' 13)
     #(132 'transform' 91)
     #(132 'trigger' 86)
     #(132 'triggerdef' 87)
     #(132 'union' 6)
     #(132 'unordered' 112)
     #(132 'value' 67)
     #(132 'where' 62)
     #(132 'with' 70) ) do:
                [:each | 
                (keywordMap at:each first ifAbsentPut:[Dictionary new]) at:(each at:2)
                    put:each last].
    ^keywordMap
! !

!XQueryScanner methodsFor:'accessing'!

invalidTokenIds
    invalidTokenIds isNil ifTrue: [
        invalidTokenIds := OrderedCollection new.
    ].

    ^ invalidTokenIds.

    "Created: / 13-07-2009 / 22:39:37 / Jan Kurs <kursj1@fel.cvut.cz>"
!

lastValidState
    lastValidState isNil ifTrue: [
        lastValidState := XQueryScannerState new.
    ].
    ^ lastValidState.

    "Created: / 13-07-2009 / 23:03:23 / Jan Kurs <kursj1@fel.cvut.cz>"
!

source

    ^stream isExternalStream
        ifTrue:[self sourceFromExternalStream]
        ifFalse:[self sourceFromInternalStream]

    "Created: / 12-04-2007 / 11:52:21 / janfrog"
!

sourceFromExternalStream

    ^self shouldImplement "not yet implemented"

    "Created: / 12-04-2007 / 11:53:47 / janfrog"
!

sourceFromInternalStream

    ^stream collection asString.

    "Created: / 12-04-2007 / 11:54:00 / janfrog"
!

stream
    ^stream

    "Created: / 24-10-2007 / 15:55:43 / janfrog"
! !

!XQueryScanner methodsFor:'generated-scanner'!

scan1
    
    [self step.
    currentCharacter ~~ $:] whileTrue.
    ^self scan20
!

scan10
    self step.
    (currentCharacter == $t) ifTrue:[^self scan9].
    ^self reportLastMatch
!

scan11
    
    [self step.
    (currentCharacter <= $% or:[currentCharacter >= $(])] whileTrue.
    (currentCharacter == $&) 
        ifTrue:
            [self step.
            (currentCharacter == $g or:[currentCharacter == $l]) 
                ifTrue:[^self scan10].
            (currentCharacter == $#) 
                ifTrue:
                    [self step.
                    (currentCharacter isNationalDigit) 
                        ifTrue:
                            [
                            [self step.
                            (currentCharacter isNationalDigit)] whileTrue.
                            (currentCharacter == $;) ifTrue:[^self scan11].
                            ^self reportLastMatch].
                    (currentCharacter == $x) 
                        ifTrue:
                            [self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$A and:$F) 
                                        or:[(currentCharacter between:$a and:$f)]]) 
                                ifTrue:
                                    [
                                    [self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$A and:$F) 
                                                or:[(currentCharacter between:$a and:$f)]])] whileTrue.
                                    (currentCharacter == $;) ifTrue:[^self scan11].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $a) 
                ifTrue:
                    [self step.
                    (currentCharacter == $m) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $p) ifTrue:[^self scan9].
                            ^self reportLastMatch].
                    (currentCharacter == $p) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) 
                                ifTrue:
                                    [self step.
                                    (currentCharacter == $s) ifTrue:[^self scan9].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $q) 
                ifTrue:
                    [self step.
                    (currentCharacter == $u) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) ifTrue:[^self scan10].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $') 
        ifTrue:
            [self recordMatch:#( 137 ).
            self step.
            (currentCharacter == $') ifTrue:[^self scan11].
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan12
    
    [self recordMatch:#( 131 132 ).
    self step.
    (currentCharacter isLetterOrDigit 
        or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]])] whileTrue.
    (currentCharacter == $:) ifTrue:[^self scan2].
    ^self reportLastMatch
!

scan13
    self recordMatch:#( 131 132 138 ).
    self step.
    (currentCharacter isNationalDigit or:
            [(currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$d) or:
                                            [(currentCharacter between:$f and:$n) 
                                                or:[(currentCharacter between:$p and:$z)]]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $e) 
        ifTrue:
            [self recordMatch:#( 131 132 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$r) 
                                                or:[(currentCharacter between:$t and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $s) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    ((currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$0 and:$9) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$b) 
                                                        or:[(currentCharacter between:$d and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $c) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$d) 
                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $e) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    ((currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$0 and:$9) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$m) 
                                                                        or:[(currentCharacter between:$o and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $n) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            ((currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$0 and:$9) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$c) 
                                                                                or:[(currentCharacter between:$e and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $d) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    (currentCharacter isNationalDigit or:
                                                            [(currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$A and:$Z) 
                                                                        or:[currentCharacter == $_ or:[(currentCharacter between:$b and:$z)]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $a) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            ((currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $n) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$s) 
                                                                                                        or:[(currentCharacter between:$u and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $t) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isLetterOrDigit 
                                                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                                    ifTrue:[^self scan12].
                                                                            (currentCharacter == $-) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    (currentCharacter isNationalDigit or:
                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$n) 
                                                                                                                        or:[(currentCharacter between:$p and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $o) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$q) 
                                                                                                                                or:[(currentCharacter between:$s and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $r) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    (currentCharacter isLetterOrDigit 
                                                                                                        or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                                                            ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $-) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$r) 
                                                                                                                                                or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $s) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                    self step.
                                                                                                                    (currentCharacter isNationalDigit or:
                                                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                    [(currentCharacter between:$a and:$d) 
                                                                                                                                                        or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                                                                        ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    (currentCharacter == $e) 
                                                                                                                        ifTrue:
                                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                                            self step.
                                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                                            [(currentCharacter between:$a and:$k) 
                                                                                                                                                                or:[(currentCharacter between:$m and:$z)]]]]]) 
                                                                                                                                ifTrue:[^self scan12].
                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                            (currentCharacter == $l) 
                                                                                                                                ifTrue:
                                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                                    self step.
                                                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                                    [(currentCharacter between:$a and:$e) 
                                                                                                                                                                        or:[(currentCharacter between:$g and:$z)]]]]]) 
                                                                                                                                        ifTrue:[^self scan12].
                                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                    (currentCharacter == $f) 
                                                                                                                                        ifTrue:
                                                                                                                                            [self recordMatch:#( 101 131 132 ).
                                                                                                                                            self step.
                                                                                                                                            (currentCharacter isLetterOrDigit 
                                                                                                                                                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                                                    ifTrue:[^self scan12].
                                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                            ^self reportLastMatch].
                                                                                                                                    ^self reportLastMatch].
                                                                                                                            ^self reportLastMatch].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $o) 
        ifTrue:
            [self recordMatch:#( 131 132 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$b) 
                                                or:[(currentCharacter between:$d and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $c) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    (currentCharacter isNationalDigit or:
                            [(currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$t) 
                                                        or:[(currentCharacter between:$v and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $u) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            ((currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$0 and:$9) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$l) 
                                                                or:[(currentCharacter between:$n and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $m) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$d) 
                                                                        or:[(currentCharacter between:$f and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $e) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            ((currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$0 and:$9) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$m) 
                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $n) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    ((currentCharacter between:$- and:$.) or:
                                                            [(currentCharacter between:$0 and:$9) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$s) 
                                                                                        or:[(currentCharacter between:$u and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $t) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            (currentCharacter isLetterOrDigit 
                                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                    ifTrue:[^self scan12].
                                                            (currentCharacter == $-) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$m) 
                                                                                                        or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $n) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isNationalDigit or:
                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                    [currentCharacter == $_ or:
                                                                                                            [(currentCharacter between:$a and:$n) 
                                                                                                                or:[(currentCharacter between:$p and:$z)]]]]]) 
                                                                                ifTrue:[^self scan12].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            (currentCharacter == $o) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$c) 
                                                                                                                        or:[(currentCharacter between:$e and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $d) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            (currentCharacter isNationalDigit or:
                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$d) 
                                                                                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $e) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 72 131 132 ).
                                                                                                    self step.
                                                                                                    (currentCharacter isLetterOrDigit 
                                                                                                        or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                            ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan14
    self recordMatch:#( 131 132 138 ).
    self step.
    ((currentCharacter between:$- and:$.) or:
            [(currentCharacter between:$0 and:$9) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$q) 
                                        or:[(currentCharacter between:$s and:$z)]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $r) ifTrue:[^self scan15].
    ^self reportLastMatch
!

scan15
    self recordMatch:#( 131 132 ).
    self step.
    (currentCharacter isNationalDigit or:
            [(currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$d) or:
                                            [(currentCharacter between:$f and:$n) 
                                                or:[(currentCharacter between:$p and:$z)]]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $e) 
        ifTrue:
            [self recordMatch:#( 131 132 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$b) 
                                                or:[(currentCharacter between:$d and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $c) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    (currentCharacter isNationalDigit or:
                            [(currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$d) 
                                                        or:[(currentCharacter between:$f and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $e) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            ((currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$0 and:$9) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$c) 
                                                                or:[(currentCharacter between:$e and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $d) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$h) 
                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $i) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            ((currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$0 and:$9) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$m) 
                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $n) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    ((currentCharacter between:$- and:$.) or:
                                                            [(currentCharacter between:$0 and:$9) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$f) 
                                                                                        or:[(currentCharacter between:$h and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $g) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            (currentCharacter isLetterOrDigit 
                                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                    ifTrue:[^self scan12].
                                                            (currentCharacter == $-) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$r) 
                                                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $s) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isNationalDigit or:
                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                    [currentCharacter == $_ or:
                                                                                                            [(currentCharacter between:$a and:$h) 
                                                                                                                or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                                ifTrue:[^self scan12].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            (currentCharacter == $i) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ 
                                                                                                                or:[currentCharacter == $a or:[(currentCharacter between:$c and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $b) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$k) 
                                                                                                                                or:[(currentCharacter between:$m and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $l) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    (currentCharacter isNationalDigit or:
                                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                    [(currentCharacter between:$a and:$h) 
                                                                                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                                                        ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    (currentCharacter == $i) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $n) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                    self step.
                                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                    [(currentCharacter between:$a and:$f) 
                                                                                                                                                        or:[(currentCharacter between:$h and:$z)]]]]]) 
                                                                                                                        ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    (currentCharacter == $g) 
                                                                                                                        ifTrue:
                                                                                                                            [self recordMatch:#( 127 131 132 ).
                                                                                                                            self step.
                                                                                                                            (currentCharacter isLetterOrDigit 
                                                                                                                                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                                    ifTrue:[^self scan12].
                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                            ^self reportLastMatch].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $o) ifTrue:[^self scan16].
    ^self reportLastMatch
!

scan16
    self recordMatch:#( 131 132 ).
    self step.
    ((currentCharacter between:$- and:$.) or:
            [(currentCharacter between:$0 and:$9) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$b) 
                                        or:[(currentCharacter between:$d and:$z)]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $c) ifTrue:[^self scan17].
    ^self reportLastMatch
!

scan17
    self recordMatch:#( 131 132 ).
    self step.
    (currentCharacter isNationalDigit or:
            [(currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$d) 
                                        or:[(currentCharacter between:$f and:$z)]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $e) ifTrue:[^self scan18].
    ^self reportLastMatch
!

scan18
    self recordMatch:#( 131 132 ).
    self step.
    ((currentCharacter between:$- and:$.) or:
            [(currentCharacter between:$0 and:$9) or:
                    [(currentCharacter between:$A and:$Z) or:
                            [currentCharacter == $_ or:
                                    [(currentCharacter between:$a and:$r) 
                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
        ifTrue:[^self scan12].
    (currentCharacter == $:) ifTrue:[^self scan2].
    (currentCharacter == $s) 
        ifTrue:
            [self recordMatch:#( 131 132 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$r) 
                                                or:[(currentCharacter between:$t and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $s) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    (currentCharacter isNationalDigit or:
                            [(currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$h) 
                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $i) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            ((currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$0 and:$9) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$m) 
                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $n) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    ((currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$0 and:$9) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$f) 
                                                                        or:[(currentCharacter between:$h and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $g) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            (currentCharacter isLetterOrDigit 
                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                    ifTrue:[^self scan12].
                                            (currentCharacter == $-) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    (currentCharacter isNationalDigit or:
                                                            [(currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$h) 
                                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $i) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            ((currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $n) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$r) 
                                                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $s) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                    [currentCharacter == $_ or:
                                                                                                            [(currentCharacter between:$a and:$s) 
                                                                                                                or:[(currentCharacter between:$u and:$z)]]]]]) 
                                                                                ifTrue:[^self scan12].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            (currentCharacter == $t) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$q) 
                                                                                                                        or:[(currentCharacter between:$s and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $r) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            (currentCharacter isNationalDigit or:
                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$t) 
                                                                                                                                or:[(currentCharacter between:$v and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $u) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                    [(currentCharacter between:$a and:$b) 
                                                                                                                                        or:[(currentCharacter between:$d and:$z)]]]]]) 
                                                                                                        ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    (currentCharacter == $c) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$s) 
                                                                                                                                                or:[(currentCharacter between:$u and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $t) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                    self step.
                                                                                                                    (currentCharacter isNationalDigit or:
                                                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                    [(currentCharacter between:$a and:$h) 
                                                                                                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                                                                        ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    (currentCharacter == $i) 
                                                                                                                        ifTrue:
                                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                                            self step.
                                                                                                                            (currentCharacter isNationalDigit or:
                                                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                                            [(currentCharacter between:$a and:$n) 
                                                                                                                                                                or:[(currentCharacter between:$p and:$z)]]]]]) 
                                                                                                                                ifTrue:[^self scan12].
                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                            (currentCharacter == $o) 
                                                                                                                                ifTrue:
                                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                                    self step.
                                                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                                    [(currentCharacter between:$a and:$m) 
                                                                                                                                                                        or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                                                                                        ifTrue:[^self scan12].
                                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                    (currentCharacter == $n) 
                                                                                                                                        ifTrue:
                                                                                                                                            [self recordMatch:#( 78 131 132 ).
                                                                                                                                            self step.
                                                                                                                                            (currentCharacter isLetterOrDigit 
                                                                                                                                                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                                                    ifTrue:[^self scan12].
                                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                            ^self reportLastMatch].
                                                                                                                                    ^self reportLastMatch].
                                                                                                                            ^self reportLastMatch].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan19
    
    [self recordMatch:#( 134 ).
    self step.
    (currentCharacter isNationalDigit)] whileTrue.
    (currentCharacter == $E or:[currentCharacter == $e]) ifTrue:[^self scan3].
    ^self reportLastMatch
!

scan2
    self step.
    (currentCharacter isLetter or:[currentCharacter == $_]) 
        ifTrue:
            [
            [self recordMatch:#( 132 ).
            self step.
            (currentCharacter isLetterOrDigit 
                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]])] whileTrue.
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan20
    
    [self step.
    (currentCharacter <= $( 
        or:[(currentCharacter between:$* and:$9) or:[currentCharacter >= $;]]) 
            ifTrue:[^self scan1].
    (currentCharacter == $)) 
        ifTrue:
            [self recordMatch:#comment.
            self step.
            (currentCharacter ~~ $:) ifTrue:[^self scan1].
            (currentCharacter == $:) ifTrue:[^self scan20].
            ^self reportLastMatch].
    (currentCharacter == $:)] whileTrue.
    ^self reportLastMatch
!

scan21
    [
        self step.
        (currentCharacter <= $( 
            or:[ (currentCharacter between:$* and:$9) or:[ currentCharacter >= $; ] ]) 
                ifTrue:[ ^ self scan2 ].
        (currentCharacter == $)) ifTrue:[
            self recordMatch:#comment.
            self step.
            (currentCharacter ~~ $:) ifTrue:[
                ^ self scan2
            ].
            (currentCharacter == $:) ifTrue:[
                ^ self scan21
            ].
            ^ self reportLastMatch
        ].
        (currentCharacter == $:)
    ] whileTrue.
    ^ self reportLastMatch
!

scan22
    [
        self step.
        (currentCharacter <= $( 
            or:[ (currentCharacter between:$* and:$9) or:[ currentCharacter >= $; ] ]) 
                ifTrue:[ ^ self scan3 ].
        (currentCharacter == $)) ifTrue:[
            self recordMatch:#comment.
            self step.
            (currentCharacter ~~ $:) ifTrue:[
                ^ self scan3
            ].
            (currentCharacter == $:) ifTrue:[
                ^ self scan22
            ].
            ^ self reportLastMatch
        ].
        (currentCharacter == $:)
    ] whileTrue.
    ^ self reportLastMatch
!

scan23
    [
        self step.
        (currentCharacter <= $( 
            or:[ (currentCharacter between:$* and:$9) or:[ currentCharacter >= $; ] ]) 
                ifTrue:[ ^ self scan1 ].
        (currentCharacter == $)) ifTrue:[
            self recordMatch:#comment.
            self step.
            (currentCharacter ~~ $:) ifTrue:[
                ^ self scan1
            ].
            (currentCharacter == $:) ifTrue:[
                ^ self scan23
            ].
            ^ self reportLastMatch
        ].
        (currentCharacter == $:)
    ] whileTrue.
    ^ self reportLastMatch
!

scan3
    self step.
    (currentCharacter isNationalDigit) 
        ifTrue:
            [
            [self recordMatch:#( 135 ).
            self step.
            (currentCharacter isNationalDigit)] whileTrue.
            ^self reportLastMatch].
    (currentCharacter == $+ or:[currentCharacter == $-]) 
        ifTrue:
            [self step.
            (currentCharacter isNationalDigit) 
                ifTrue:
                    [
                    [self recordMatch:#( 135 ).
                    self step.
                    (currentCharacter isNationalDigit)] whileTrue.
                    ^self reportLastMatch].
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan4
    self step.
    (currentCharacter == $t) ifTrue:[^self scan5].
    ^self reportLastMatch
!

scan5
    self step.
    (currentCharacter == $;) ifTrue:[^self recordAndReportMatch:#( 136 ).].
    ^self reportLastMatch
!

scan6
    
    [self step.
    (currentCharacter <= $!! 
        or:[(currentCharacter between:$# and:$%) or:[currentCharacter >= $']])] whileTrue.
    (currentCharacter == $") 
        ifTrue:
            [self recordMatch:#( 137 ).
            self step.
            (currentCharacter == $") ifTrue:[^self scan6].
            ^self reportLastMatch].
    (currentCharacter == $&) 
        ifTrue:
            [self step.
            (currentCharacter == $g or:[currentCharacter == $l]) ifTrue:[^self scan7].
            (currentCharacter == $#) 
                ifTrue:
                    [self step.
                    (currentCharacter isNationalDigit) 
                        ifTrue:
                            [
                            [self step.
                            (currentCharacter isNationalDigit)] whileTrue.
                            (currentCharacter == $;) ifTrue:[^self scan6].
                            ^self reportLastMatch].
                    (currentCharacter == $x) 
                        ifTrue:
                            [self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$A and:$F) 
                                        or:[(currentCharacter between:$a and:$f)]]) 
                                ifTrue:
                                    [
                                    [self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$A and:$F) 
                                                or:[(currentCharacter between:$a and:$f)]])] whileTrue.
                                    (currentCharacter == $;) ifTrue:[^self scan6].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $a) 
                ifTrue:
                    [self step.
                    (currentCharacter == $m) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $p) ifTrue:[^self scan8].
                            ^self reportLastMatch].
                    (currentCharacter == $p) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) 
                                ifTrue:
                                    [self step.
                                    (currentCharacter == $s) ifTrue:[^self scan8].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $q) 
                ifTrue:
                    [self step.
                    (currentCharacter == $u) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) ifTrue:[^self scan7].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    ^self reportLastMatch
!

scan7
    self step.
    (currentCharacter == $t) ifTrue:[^self scan8].
    ^self reportLastMatch
!

scan8
    self step.
    (currentCharacter == $;) ifTrue:[^self scan6].
    ^self reportLastMatch
!

scan9
    self step.
    (currentCharacter == $;) ifTrue:[^self scan11].
    ^self reportLastMatch
!

scanForToken
    self step.
    ((currentCharacter between:$A and:$Z) or:
            [currentCharacter == $c or:
                    [(currentCharacter between:$g and:$o) 
                        or:[(currentCharacter between:$q and:$z)]]]) 
        ifTrue:
            [self recordMatch:#( 131 132 138 ).
            self step.
            (currentCharacter isLetterOrDigit 
                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                    ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            ^self reportLastMatch].
    (currentCharacter isNationalDigit) 
        ifTrue:
            [self recordMatch:#( 133 138 ).
            self step.
            (currentCharacter isNationalDigit) 
                ifTrue:
                    [
                    [self recordMatch:#( 133 ).
                    self step.
                    (currentCharacter isNationalDigit)] whileTrue.
                    (currentCharacter == $E or:[currentCharacter == $e]) ifTrue:[^self scan3].
                    (currentCharacter == $.) ifTrue:[^self scan19].
                    ^self reportLastMatch].
            (currentCharacter == $E or:[currentCharacter == $e]) ifTrue:[^self scan3].
            (currentCharacter == $.) ifTrue:[^self scan19].
            ^self reportLastMatch].
    (currentCharacter between:(Character tab) and:(Character codePoint:16rD)) 
        ifTrue:
            [
            [self recordMatch:#whitespace.
            self step.
            (currentCharacter between:(Character tab) and:(Character codePoint:16rD))] whileTrue.
            ^self reportLastMatch].
    (currentCharacter == (Character space)) 
        ifTrue:[^self recordAndReportMatch:#( 138 ).].
    (currentCharacter == $!!) 
        ifTrue:
            [self step.
            (currentCharacter == $=) ifTrue:[^self recordAndReportMatch:#( 18 ).].
            ^self reportLastMatch].
    (currentCharacter == $") ifTrue:[^self scan6].
    (currentCharacter == $$) ifTrue:[^self recordAndReportMatch:#( 37 ).].
    (currentCharacter == $&) 
        ifTrue:
            [self step.
            (currentCharacter == $g or:[currentCharacter == $l]) ifTrue:[^self scan4].
            (currentCharacter == $#) 
                ifTrue:
                    [self step.
                    (currentCharacter isNationalDigit) 
                        ifTrue:
                            [
                            [self step.
                            (currentCharacter isNationalDigit)] whileTrue.
                            (currentCharacter == $;) ifTrue:[^self recordAndReportMatch:#( 130 ).].
                            ^self reportLastMatch].
                    (currentCharacter == $x) 
                        ifTrue:
                            [self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$A and:$F) 
                                        or:[(currentCharacter between:$a and:$f)]]) 
                                ifTrue:
                                    [
                                    [self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$A and:$F) 
                                                or:[(currentCharacter between:$a and:$f)]])] whileTrue.
                                    (currentCharacter == $;) ifTrue:[^self recordAndReportMatch:#( 130 ).].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $a) 
                ifTrue:
                    [self step.
                    (currentCharacter == $m) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $p) ifTrue:[^self scan5].
                            ^self reportLastMatch].
                    (currentCharacter == $p) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) 
                                ifTrue:
                                    [self step.
                                    (currentCharacter == $s) ifTrue:[^self scan5].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            (currentCharacter == $q) 
                ifTrue:
                    [self step.
                    (currentCharacter == $u) 
                        ifTrue:
                            [self step.
                            (currentCharacter == $o) ifTrue:[^self scan4].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $') ifTrue:[^self scan11].
    (currentCharacter == $() 
        ifTrue:
            [self recordMatch:#( 36 ).
            self step.
            (currentCharacter == $:) ifTrue:[^self scan1].
            ^self reportLastMatch].
    (currentCharacter == $)) ifTrue:[^self recordAndReportMatch:#( 35 ).].
    (currentCharacter == $*) ifTrue:[^self recordAndReportMatch:#( 2 ).].
    (currentCharacter == $+) ifTrue:[^self recordAndReportMatch:#( 8 ).].
    (currentCharacter == $,) ifTrue:[^self recordAndReportMatch:#( 38 ).].
    (currentCharacter == $-) ifTrue:[^self recordAndReportMatch:#( 7 ).].
    (currentCharacter == $.) 
        ifTrue:
            [self recordMatch:#( 116 ).
            self step.
            (currentCharacter isNationalDigit) ifTrue:[^self scan19].
            (currentCharacter == $.) ifTrue:[^self recordAndReportMatch:#( 124 ).].
            ^self reportLastMatch].
    (currentCharacter == $/) 
        ifTrue:
            [self recordMatch:#( 104 ).
            self step.
            (currentCharacter == $/) ifTrue:[^self recordAndReportMatch:#( 103 ).].
            (currentCharacter == $>) ifTrue:[^self recordAndReportMatch:#( 96 ).].
            ^self reportLastMatch].
    (currentCharacter == $:) 
        ifTrue:
            [self recordMatch:#( 120 ).
            self step.
            (currentCharacter == $:) ifTrue:[^self recordAndReportMatch:#( 97 ).].
            (currentCharacter == $=) ifTrue:[^self recordAndReportMatch:#( 59 ).].
            ^self reportLastMatch].
    (currentCharacter == $;) ifTrue:[^self recordAndReportMatch:#( 44 ).].
    (currentCharacter == $<) 
        ifTrue:
            [self recordMatch:#( 17 ).
            self step.
            (currentCharacter == $/) ifTrue:[^self recordAndReportMatch:#( 74 ).].
            (currentCharacter == $<) ifTrue:[^self recordAndReportMatch:#( 110 ).].
            (currentCharacter == $=) ifTrue:[^self recordAndReportMatch:#( 20 ).].
            ^self reportLastMatch].
    (currentCharacter == $=) ifTrue:[^self recordAndReportMatch:#( 46 ).].
    (currentCharacter == $>) 
        ifTrue:
            [self recordMatch:#( 19 ).
            self step.
            (currentCharacter == $=) ifTrue:[^self recordAndReportMatch:#( 22 ).].
            (currentCharacter == $>) ifTrue:[^self recordAndReportMatch:#( 109 ).].
            ^self reportLastMatch].
    (currentCharacter == $?) ifTrue:[^self recordAndReportMatch:#( 29 ).].
    (currentCharacter == $@) ifTrue:[^self recordAndReportMatch:#( 122 ).].
    (currentCharacter == $[) ifTrue:[^self recordAndReportMatch:#( 114 ).].
    (currentCharacter == $]) ifTrue:[^self recordAndReportMatch:#( 113 ).].
    (currentCharacter == $_) ifTrue:[^self scan12].
    (currentCharacter == $a) 
        ifTrue:
            [self recordMatch:#( 131 132 138 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$m) 
                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $n) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    ((currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$0 and:$9) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$b) 
                                                        or:[(currentCharacter between:$d and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $c) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$d) 
                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $e) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    ((currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$0 and:$9) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$r) 
                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $s) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            ((currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$0 and:$9) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$s) 
                                                                                or:[(currentCharacter between:$u and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $t) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    (currentCharacter isNationalDigit or:
                                                            [(currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$n) 
                                                                                        or:[(currentCharacter between:$p and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $o) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            ((currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$q) 
                                                                                                or:[(currentCharacter between:$s and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $r) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    (currentCharacter isLetterOrDigit 
                                                                        or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                            ifTrue:[^self scan12].
                                                                    (currentCharacter == $-) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isNationalDigit or:
                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                    [currentCharacter == $_ or:
                                                                                                            [(currentCharacter between:$a and:$n) 
                                                                                                                or:[(currentCharacter between:$p and:$z)]]]]]) 
                                                                                ifTrue:[^self scan12].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            (currentCharacter == $o) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$q) 
                                                                                                                        or:[(currentCharacter between:$s and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $r) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            (currentCharacter isLetterOrDigit 
                                                                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                                                    ifTrue:[^self scan12].
                                                                                            (currentCharacter == $-) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                    [(currentCharacter between:$a and:$r) 
                                                                                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                                                                        ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    (currentCharacter == $s) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            (currentCharacter isNationalDigit or:
                                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$d) 
                                                                                                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $e) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                    self step.
                                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                    [(currentCharacter between:$a and:$k) 
                                                                                                                                                        or:[(currentCharacter between:$m and:$z)]]]]]) 
                                                                                                                        ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    (currentCharacter == $l) 
                                                                                                                        ifTrue:
                                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                                            self step.
                                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                                            [(currentCharacter between:$a and:$e) 
                                                                                                                                                                or:[(currentCharacter between:$g and:$z)]]]]]) 
                                                                                                                                ifTrue:[^self scan12].
                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                            (currentCharacter == $f) 
                                                                                                                                ifTrue:
                                                                                                                                    [self recordMatch:#( 125 131 132 ).
                                                                                                                                    self step.
                                                                                                                                    (currentCharacter isLetterOrDigit 
                                                                                                                                        or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                                            ifTrue:[^self scan12].
                                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                    ^self reportLastMatch].
                                                                                                                            ^self reportLastMatch].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    ^self reportLastMatch].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            ^self reportLastMatch].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $b) 
        ifTrue:
            [self recordMatch:#( 131 132 138 ).
            self step.
            (currentCharacter isNationalDigit or:
                    [(currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$A and:$Z) 
                                or:[currentCharacter == $_ or:[(currentCharacter between:$b and:$z)]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $a) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    ((currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$0 and:$9) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$r) 
                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $s) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            (currentCharacter isNationalDigit or:
                                    [(currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$d) 
                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $e) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    (currentCharacter isLetterOrDigit 
                                        or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                            ifTrue:[^self scan12].
                                    (currentCharacter == $-) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            (currentCharacter isNationalDigit or:
                                                    [(currentCharacter between:$- and:$.) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$t) 
                                                                                or:[(currentCharacter between:$v and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $u) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    ((currentCharacter between:$- and:$.) or:
                                                            [(currentCharacter between:$0 and:$9) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$q) 
                                                                                        or:[(currentCharacter between:$s and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $r) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            (currentCharacter isNationalDigit or:
                                                                    [(currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$h) 
                                                                                                or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $i) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 33 131 132 ).
                                                                    self step.
                                                                    (currentCharacter isLetterOrDigit 
                                                                        or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                            ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $d) ifTrue:[^self scan13].
    (currentCharacter == $e) 
        ifTrue:
            [self recordMatch:#( 131 132 138 ).
            self step.
            ((currentCharacter between:$- and:$.) or:
                    [(currentCharacter between:$0 and:$9) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$l) 
                                                or:[(currentCharacter between:$n and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $m) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    ((currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$0 and:$9) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$o) 
                                                        or:[(currentCharacter between:$q and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $p) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            ((currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$0 and:$9) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$s) 
                                                                or:[(currentCharacter between:$u and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $t) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    ((currentCharacter between:$- and:$.) or:
                                            [(currentCharacter between:$0 and:$9) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ 
                                                                or:[(currentCharacter between:$a and:$x) or:[currentCharacter == $z]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $y) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            (currentCharacter isLetterOrDigit 
                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                    ifTrue:[^self scan12].
                                            (currentCharacter == $-) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    ((currentCharacter between:$- and:$.) or:
                                                            [(currentCharacter between:$0 and:$9) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$r) 
                                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $s) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            (currentCharacter isNationalDigit or:
                                                                    [(currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$d) 
                                                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $e) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$p) 
                                                                                                        or:[(currentCharacter between:$r and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $q) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isNationalDigit or:
                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                    [currentCharacter == $_ or:
                                                                                                            [(currentCharacter between:$a and:$t) 
                                                                                                                or:[(currentCharacter between:$v and:$z)]]]]]) 
                                                                                ifTrue:[^self scan12].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            (currentCharacter == $u) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    (currentCharacter isNationalDigit or:
                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$d) 
                                                                                                                        or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $e) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $n) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                    [(currentCharacter between:$a and:$b) 
                                                                                                                                        or:[(currentCharacter between:$d and:$z)]]]]]) 
                                                                                                        ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    (currentCharacter == $c) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            (currentCharacter isNationalDigit or:
                                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$d) 
                                                                                                                                                or:[(currentCharacter between:$f and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $e) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 24 131 132 ).
                                                                                                                    self step.
                                                                                                                    (currentCharacter isLetterOrDigit 
                                                                                                                        or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                            ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $f) 
        ifTrue:
            [self recordMatch:#( 131 132 138 ).
            self step.
            (currentCharacter isNationalDigit or:
                    [(currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$A and:$Z) or:
                                    [currentCharacter == $_ or:
                                            [(currentCharacter between:$a and:$n) 
                                                or:[(currentCharacter between:$p and:$z)]]]]]) 
                ifTrue:[^self scan12].
            (currentCharacter == $:) ifTrue:[^self scan2].
            (currentCharacter == $o) 
                ifTrue:
                    [self recordMatch:#( 131 132 ).
                    self step.
                    ((currentCharacter between:$- and:$.) or:
                            [(currentCharacter between:$0 and:$9) or:
                                    [(currentCharacter between:$A and:$Z) or:
                                            [currentCharacter == $_ or:
                                                    [(currentCharacter between:$a and:$k) 
                                                        or:[(currentCharacter between:$m and:$z)]]]]]) 
                        ifTrue:[^self scan12].
                    (currentCharacter == $:) ifTrue:[^self scan2].
                    (currentCharacter == $l) 
                        ifTrue:
                            [self recordMatch:#( 131 132 ).
                            self step.
                            ((currentCharacter between:$- and:$.) or:
                                    [(currentCharacter between:$0 and:$9) or:
                                            [(currentCharacter between:$A and:$Z) or:
                                                    [currentCharacter == $_ or:
                                                            [(currentCharacter between:$a and:$k) 
                                                                or:[(currentCharacter between:$m and:$z)]]]]]) 
                                ifTrue:[^self scan12].
                            (currentCharacter == $:) ifTrue:[^self scan2].
                            (currentCharacter == $l) 
                                ifTrue:
                                    [self recordMatch:#( 131 132 ).
                                    self step.
                                    (currentCharacter isNationalDigit or:
                                            [(currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$A and:$Z) or:
                                                            [currentCharacter == $_ or:
                                                                    [(currentCharacter between:$a and:$n) 
                                                                        or:[(currentCharacter between:$p and:$z)]]]]]) 
                                        ifTrue:[^self scan12].
                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                    (currentCharacter == $o) 
                                        ifTrue:
                                            [self recordMatch:#( 131 132 ).
                                            self step.
                                            ((currentCharacter between:$- and:$.) or:
                                                    [(currentCharacter between:$0 and:$9) or:
                                                            [(currentCharacter between:$A and:$Z) or:
                                                                    [currentCharacter == $_ or:
                                                                            [(currentCharacter between:$a and:$v) 
                                                                                or:[(currentCharacter between:$x and:$z)]]]]]) 
                                                ifTrue:[^self scan12].
                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                            (currentCharacter == $w) 
                                                ifTrue:
                                                    [self recordMatch:#( 131 132 ).
                                                    self step.
                                                    (currentCharacter isNationalDigit or:
                                                            [(currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                            [currentCharacter == $_ or:
                                                                                    [(currentCharacter between:$a and:$h) 
                                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                        ifTrue:[^self scan12].
                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                    (currentCharacter == $i) 
                                                        ifTrue:
                                                            [self recordMatch:#( 131 132 ).
                                                            self step.
                                                            ((currentCharacter between:$- and:$.) or:
                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                    [currentCharacter == $_ or:
                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                ifTrue:[^self scan12].
                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                            (currentCharacter == $n) 
                                                                ifTrue:
                                                                    [self recordMatch:#( 131 132 ).
                                                                    self step.
                                                                    ((currentCharacter between:$- and:$.) or:
                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                            [currentCharacter == $_ or:
                                                                                                    [(currentCharacter between:$a and:$f) 
                                                                                                        or:[(currentCharacter between:$h and:$z)]]]]]) 
                                                                        ifTrue:[^self scan12].
                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                    (currentCharacter == $g) 
                                                                        ifTrue:
                                                                            [self recordMatch:#( 131 132 ).
                                                                            self step.
                                                                            (currentCharacter isLetterOrDigit 
                                                                                or:[currentCharacter == $. or:[currentCharacter == $_]]) 
                                                                                    ifTrue:[^self scan12].
                                                                            (currentCharacter == $-) 
                                                                                ifTrue:
                                                                                    [self recordMatch:#( 131 132 ).
                                                                                    self step.
                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                            [currentCharacter == $_ or:
                                                                                                                    [(currentCharacter between:$a and:$r) 
                                                                                                                        or:[(currentCharacter between:$t and:$z)]]]]]) 
                                                                                        ifTrue:[^self scan12].
                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                    (currentCharacter == $s) 
                                                                                        ifTrue:
                                                                                            [self recordMatch:#( 131 132 ).
                                                                                            self step.
                                                                                            (currentCharacter isNationalDigit or:
                                                                                                    [(currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                    [currentCharacter == $_ or:
                                                                                                                            [(currentCharacter between:$a and:$h) 
                                                                                                                                or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                                                ifTrue:[^self scan12].
                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                            (currentCharacter == $i) 
                                                                                                ifTrue:
                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                    self step.
                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                            [currentCharacter == $_ 
                                                                                                                                or:[currentCharacter == $a or:[(currentCharacter between:$c and:$z)]]]]]) 
                                                                                                        ifTrue:[^self scan12].
                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                    (currentCharacter == $b) 
                                                                                                        ifTrue:
                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                            self step.
                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                            [(currentCharacter between:$a and:$k) 
                                                                                                                                                or:[(currentCharacter between:$m and:$z)]]]]]) 
                                                                                                                ifTrue:[^self scan12].
                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                            (currentCharacter == $l) 
                                                                                                                ifTrue:
                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                    self step.
                                                                                                                    (currentCharacter isNationalDigit or:
                                                                                                                            [(currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                    [(currentCharacter between:$a and:$h) 
                                                                                                                                                        or:[(currentCharacter between:$j and:$z)]]]]]) 
                                                                                                                        ifTrue:[^self scan12].
                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                    (currentCharacter == $i) 
                                                                                                                        ifTrue:
                                                                                                                            [self recordMatch:#( 131 132 ).
                                                                                                                            self step.
                                                                                                                            ((currentCharacter between:$- and:$.) or:
                                                                                                                                    [(currentCharacter between:$0 and:$9) or:
                                                                                                                                            [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                    [currentCharacter == $_ or:
                                                                                                                                                            [(currentCharacter between:$a and:$m) 
                                                                                                                                                                or:[(currentCharacter between:$o and:$z)]]]]]) 
                                                                                                                                ifTrue:[^self scan12].
                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                            (currentCharacter == $n) 
                                                                                                                                ifTrue:
                                                                                                                                    [self recordMatch:#( 131 132 ).
                                                                                                                                    self step.
                                                                                                                                    ((currentCharacter between:$- and:$.) or:
                                                                                                                                            [(currentCharacter between:$0 and:$9) or:
                                                                                                                                                    [(currentCharacter between:$A and:$Z) or:
                                                                                                                                                            [currentCharacter == $_ or:
                                                                                                                                                                    [(currentCharacter between:$a and:$f) 
                                                                                                                                                                        or:[(currentCharacter between:$h and:$z)]]]]]) 
                                                                                                                                        ifTrue:[^self scan12].
                                                                                                                                    (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                    (currentCharacter == $g) 
                                                                                                                                        ifTrue:
                                                                                                                                            [self recordMatch:#( 111 131 132 ).
                                                                                                                                            self step.
                                                                                                                                            (currentCharacter isLetterOrDigit 
                                                                                                                                                or:[(currentCharacter between:$- and:$.) or:[currentCharacter == $_]]) 
                                                                                                                                                    ifTrue:[^self scan12].
                                                                                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                                                                                            ^self reportLastMatch].
                                                                                                                                    ^self reportLastMatch].
                                                                                                                            ^self reportLastMatch].
                                                                                                                    ^self reportLastMatch].
                                                                                                            ^self reportLastMatch].
                                                                                                    ^self reportLastMatch].
                                                                                            ^self reportLastMatch].
                                                                                    ^self reportLastMatch].
                                                                            (currentCharacter == $:) ifTrue:[^self scan2].
                                                                            ^self reportLastMatch].
                                                                    ^self reportLastMatch].
                                                            ^self reportLastMatch].
                                                    ^self reportLastMatch].
                                            ^self reportLastMatch].
                                    ^self reportLastMatch].
                            ^self reportLastMatch].
                    ^self reportLastMatch].
            ^self reportLastMatch].
    (currentCharacter == $p) ifTrue:[^self scan14].
    (currentCharacter == ${) ifTrue:[^self recordAndReportMatch:#( 118 ).].
    (currentCharacter == $|) ifTrue:[^self recordAndReportMatch:#( 5 ).].
    (currentCharacter == $}) ifTrue:[^self recordAndReportMatch:#( 117 ).].
    ^self reportLastMatch
! !

!XQueryScanner methodsFor:'generated-tokens'!

emptySymbolTokenId
	^290
!

errorTokenId
	^291
! !

!XQueryScanner methodsFor:'private - hacks'!

checkForKeyword: aString
    "Reserved keywords hack - if the string is keyword, return the keyword ID and token IDs
        as well - if the keyword raises error another tokens could be valid. This works only 
        with error recovery hack"
"/    | match |
"/    match := OrderedCollection withAll: matchActions.
"/    super checkForKeyword: aString.
"/    (match includesAll: matchActions) ifFalse:
"/    [
"/        matchActions do:
"/        [ :item |
"/            (match includes: item) ifFalse: [ match addFirst: item ]
"/        ].
"/        matchActions := match.
"/    ]
    super checkForKeyword: aString.

    "Created: / 27-10-2009 / 12:49:12 / Jan Kurs <kursj1@fel.cvut.cz>"
    "Modified: / 30-11-2009 / 16:24:41 / Jan Kurs <kursj1@fel.cvut.cz>"
!

recordMatch: aCollection 
    | reducedIds |
    aCollection isSymbol ifTrue:
    [
        super recordMatch: aCollection
    ] ifFalse: [
        reducedIds := self removeInvalidTokenIds: aCollection.
        reducedIds ifNotEmpty: [
            super recordMatch: reducedIds.
        ].
    ].

    "Created: / 13-07-2009 / 22:35:31 / Jan Kurs <kursj1@fel.cvut.cz>"
    "Modified: / 28-10-2009 / 14:24:02 / Jan Kurs <kursj1@fel.cvut.cz>"
! !

!XQueryScanner methodsFor:'xquery-invalid-token-recovery'!

addInvalidToken: token
    self invalidTokenIds addAll: token id.

    "Created: / 13-07-2009 / 22:38:31 / Jan Kurs <kursj1@fel.cvut.cz>"
    "Modified: / 28-10-2009 / 13:53:53 / Jan Kurs <kursj1@fel.cvut.cz>"
!

isInvalidTokenCollection: aCollection
    ^ self invalidTokenIds includes: aCollection.

    "Created: / 13-07-2009 / 22:36:49 / Jan Kurs <kursj1@fel.cvut.cz>"
!

recoverFromError
    start := self lastValidState start.
    stream position: self lastValidState streamPosition.

    "Created: / 13-07-2009 / 22:34:24 / Jan Kurs <kursj1@fel.cvut.cz>"
!

removeInvalidTokenIds: aCollection
    " select only that ids which does not raises error. "
    ^ aCollection select:
    [ :item |
        (self invalidTokenIds includes: item) not.
    ].

    "Created: / 28-10-2009 / 13:57:39 / Jan Kurs <kursj1@fel.cvut.cz>"
!

saveCurrentState
    self lastValidState start: start copy.
    self lastValidState streamPosition: stream position.

    self invalidTokenIds removeAll.

    "Created: / 13-07-2009 / 22:31:22 / Jan Kurs <kursj1@fel.cvut.cz>"
! !

!XQueryScanner class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !