47dcf5fc27 2019-05-01 1: #! /usr/bin/env tclsh
47dcf5fc27 2019-05-01 2:
47dcf5fc27 2019-05-01 3: namespace eval ::minirivet {}
47dcf5fc27 2019-05-01 4:
f09ab16ca1 2019-05-08 5: proc ::minirivet::parseStringToCode {string} {
47dcf5fc27 2019-05-01 6: set fixMap [list]
47dcf5fc27 2019-05-01 7: foreach char [list "\{" "\}" "\\"] {
47dcf5fc27 2019-05-01 8: lappend fixMap $char "\}; puts -nonewline \"\\$char\"; puts -nonewline \{"
47dcf5fc27 2019-05-01 9: }
47dcf5fc27 2019-05-01 10:
47dcf5fc27 2019-05-01 11: set code ""
47dcf5fc27 2019-05-01 12: while {$string ne ""} {
47dcf5fc27 2019-05-01 13: set endIndex [string first "<?" $string]
47dcf5fc27 2019-05-01 14: if {$endIndex == -1} {
47dcf5fc27 2019-05-01 15: set endIndex [expr {[string length $string] + 1}]
47dcf5fc27 2019-05-01 16: }
47dcf5fc27 2019-05-01 17:
47dcf5fc27 2019-05-01 18:
47dcf5fc27 2019-05-01 19: append code "puts -nonewline \{" [string map $fixMap [string range $string 0 $endIndex-1]] "\}; "
47dcf5fc27 2019-05-01 20: set string [string range $string $endIndex end]
47dcf5fc27 2019-05-01 21: set endIndex [string first "?>" $string]
47dcf5fc27 2019-05-01 22: if {$endIndex == -1} {
47dcf5fc27 2019-05-01 23: set endIndex [expr {[string length $string] + 1}]
47dcf5fc27 2019-05-01 24: }
47dcf5fc27 2019-05-01 25:
47dcf5fc27 2019-05-01 26: set work [string range $string 0 2]
47dcf5fc27 2019-05-01 27: if {$work eq "<?="} {
47dcf5fc27 2019-05-01 28: set startIndex 3
47dcf5fc27 2019-05-01 29: append code "puts -nonewline [string trim [string range $string 3 $endIndex-1]]; "
47dcf5fc27 2019-05-01 30: } else {
47dcf5fc27 2019-05-01 31: append code [string range $string 2 $endIndex-1] "\n"
47dcf5fc27 2019-05-01 32: }
47dcf5fc27 2019-05-01 33:
47dcf5fc27 2019-05-01 34: set string [string range $string $endIndex+2 end]
47dcf5fc27 2019-05-01 35:
47dcf5fc27 2019-05-01 36:
47dcf5fc27 2019-05-01 37: }
47dcf5fc27 2019-05-01 38:
f09ab16ca1 2019-05-08 39: return $code
f09ab16ca1 2019-05-08 40: }
f09ab16ca1 2019-05-08 41:
f09ab16ca1 2019-05-08 42: proc ::minirivet::parseString {string} {
f09ab16ca1 2019-05-08 43: set code [parseStringToCode $string]
47dcf5fc27 2019-05-01 44: tailcall namespace eval ::request $code
47dcf5fc27 2019-05-01 45: }
47dcf5fc27 2019-05-01 46:
47dcf5fc27 2019-05-01 47: proc ::minirivet::parse {file} {
47dcf5fc27 2019-05-01 48: set fd [open $file]
47dcf5fc27 2019-05-01 49: set data [read $fd]
47dcf5fc27 2019-05-01 50: close $fd
47dcf5fc27 2019-05-01 51: tailcall parseString $data
47dcf5fc27 2019-05-01 52: }
47dcf5fc27 2019-05-01 53:
47dcf5fc27 2019-05-01 54: package provide minirivet 1