mime::parselexeme (private)
mime::parselexeme token
Defined in packages/acs-tcl/tcl/tcllib-doc-procs.tcl
Consume the next lexeme from an internal MIME address-parser token, updating its input, buffer and last-lexeme state. This version-dependent helper is not a public API.
- Parameters:
- token (required)
- Internal address-parser token.
- Returns:
- Lexeme type recognized by the parser.
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: # FRINK: nocheck variable $token upvar 0 $token state set state(input) [string trimleft $state(input)] set state(buffer) {} if {$state(input) eq {}} { set state(buffer) end-of-input return [set state(lastC) LX_END] } set c [string index $state(input) 0] set state(input) [string range $state(input) 1 end] if {$c eq "("} { set noteP 0 set quoteP 0 while 1 { append state(buffer) $c #TODO: some of these paths are not covered by tests switch -- $c/$quoteP { (/0 { incr noteP } \\/0 { set quoteP 1 } )/0 { if {[incr noteP -1] < 1} { if {[info exists state(comment)]} { append state(comment) { } } append state(comment) $state(buffer) return [parselexeme $token] } } default { set quoteP 0 } } if {[set c [string index $state(input) 0]] eq {}} { set state(buffer) "end-of-input during comment" return [set state(lastC) LX_ERR] } set state(input) [string range $state(input) 1 end] } } if {$c eq "\""} { set firstP 1 set quoteP 0 while 1 { append state(buffer) $c switch -- $c/$quoteP { "\\/0" { set quoteP 1 } "\"/0" { if {!$firstP} { return [set state(lastC) LX_QSTRING] } set firstP 0 } default { set quoteP 0 } } if {[set c [string index $state(input) 0]] eq {}} { set state(buffer) "end-of-input during quoted-string" return [set state(lastC) LX_ERR] } set state(input) [string range $state(input) 1 end] } } if {$c eq {[}} { set quoteP 0 while 1 { append state(buffer) $c switch -- $c/$quoteP { \\/0 { set quoteP 1 } ]/0 { return [set state(lastC) LX_DLITERAL] } default { set quoteP 0 } } if {[set c [string index $state(input) 0]] eq {}} { set state(buffer) "end-of-input during domain-literal" return [set state(lastC) LX_ERR] } set state(input) [string range $state(input) 1 end] } } if {[set x [lsearch -exact $state(tokenL) $c]] >= 0} { append state(buffer) $c return [set state(lastC) [lindex $state(lexemeL) $x]] } while {1} { append state(buffer) $c switch -- [set c [string index $state(input) 0]] { {} - " " - "\t" - "\n" { break } default { if {[lsearch -exact $state(tokenL) $c] >= 0} { break } } } set state(input) [string range $state(input) 1 end] } return [set state(lastC) LX_ATOM]XQL Not present: Generic, PostgreSQL, Oracle