dockerscript: patch text/scanner to use a shell-like syntax instead of the default go-like syntax
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
This commit is contained in:
parent
d188c734e9
commit
c757cfdcb1
2 changed files with 24 additions and 3 deletions
22
dockerscript/extra.go
Normal file
22
dockerscript/extra.go
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package scanner
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unicode"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// extra functions used to hijack the upstream text/scanner
|
||||||
|
|
||||||
|
func detectIdent(ch rune) bool {
|
||||||
|
if unicode.IsLetter(ch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if unicode.IsDigit(ch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if strings.ContainsRune("_:/+-@%^", ch) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"unicode"
|
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -336,7 +335,7 @@ func (s *Scanner) error(msg string) {
|
||||||
|
|
||||||
func (s *Scanner) scanIdentifier() rune {
|
func (s *Scanner) scanIdentifier() rune {
|
||||||
ch := s.next() // read character after first '_' or letter
|
ch := s.next() // read character after first '_' or letter
|
||||||
for ch == '_' || unicode.IsLetter(ch) || unicode.IsDigit(ch) {
|
for detectIdent(ch) {
|
||||||
ch = s.next()
|
ch = s.next()
|
||||||
}
|
}
|
||||||
return ch
|
return ch
|
||||||
|
@ -563,7 +562,7 @@ redo:
|
||||||
// determine token value
|
// determine token value
|
||||||
tok := ch
|
tok := ch
|
||||||
switch {
|
switch {
|
||||||
case unicode.IsLetter(ch) || ch == '_':
|
case detectIdent(ch):
|
||||||
if s.Mode&ScanIdents != 0 {
|
if s.Mode&ScanIdents != 0 {
|
||||||
tok = Ident
|
tok = Ident
|
||||||
ch = s.scanIdentifier()
|
ch = s.scanIdentifier()
|
||||||
|
|
Loading…
Reference in a new issue