summaryrefslogtreecommitdiff
path: root/libgo/go/html/token.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/html/token.go')
-rw-r--r--libgo/go/html/token.go87
1 files changed, 44 insertions, 43 deletions
diff --git a/libgo/go/html/token.go b/libgo/go/html/token.go
index 0d4de254308..d6388385051 100644
--- a/libgo/go/html/token.go
+++ b/libgo/go/html/token.go
@@ -15,30 +15,30 @@ import (
type TokenType int
const (
- // Error means that an error occurred during tokenization.
- Error TokenType = iota
- // Text means a text node.
- Text
- // A StartTag looks like <a>.
- StartTag
- // An EndTag looks like </a>.
- EndTag
- // A SelfClosingTag tag looks like <br/>.
- SelfClosingTag
+ // ErrorToken means that an error occurred during tokenization.
+ ErrorToken TokenType = iota
+ // TextToken means a text node.
+ TextToken
+ // A StartTagToken looks like <a>.
+ StartTagToken
+ // An EndTagToken looks like </a>.
+ EndTagToken
+ // A SelfClosingTagToken tag looks like <br/>.
+ SelfClosingTagToken
)
// String returns a string representation of the TokenType.
func (t TokenType) String() string {
switch t {
- case Error:
+ case ErrorToken:
return "Error"
- case Text:
+ case TextToken:
return "Text"
- case StartTag:
+ case StartTagToken:
return "StartTag"
- case EndTag:
+ case EndTagToken:
return "EndTag"
- case SelfClosingTag:
+ case SelfClosingTagToken:
return "SelfClosingTag"
}
return "Invalid(" + strconv.Itoa(int(t)) + ")"
@@ -81,15 +81,15 @@ func (t Token) tagString() string {
// String returns a string representation of the Token.
func (t Token) String() string {
switch t.Type {
- case Error:
+ case ErrorToken:
return ""
- case Text:
+ case TextToken:
return EscapeString(t.Data)
- case StartTag:
+ case StartTagToken:
return "<" + t.tagString() + ">"
- case EndTag:
+ case EndTagToken:
return "</" + t.tagString() + ">"
- case SelfClosingTag:
+ case SelfClosingTagToken:
return "<" + t.tagString() + "/>"
}
return "Invalid(" + strconv.Itoa(int(t.Type)) + ")"
@@ -109,10 +109,10 @@ type Tokenizer struct {
buf []byte
}
-// Error returns the error associated with the most recent Error token. This is
-// typically os.EOF, meaning the end of tokenization.
+// Error returns the error associated with the most recent ErrorToken token.
+// This is typically os.EOF, meaning the end of tokenization.
func (z *Tokenizer) Error() os.Error {
- if z.tt != Error {
+ if z.tt != ErrorToken {
return nil
}
return z.err
@@ -180,40 +180,40 @@ func (z *Tokenizer) readTo(x uint8) os.Error {
func (z *Tokenizer) nextTag() (tt TokenType, err os.Error) {
c, err := z.readByte()
if err != nil {
- return Error, err
+ return ErrorToken, err
}
switch {
case c == '/':
- tt = EndTag
+ tt = EndTagToken
// Lower-cased characters are more common in tag names, so we check for them first.
case 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z':
- tt = StartTag
+ tt = StartTagToken
case c == '!':
- return Error, os.NewError("html: TODO(nigeltao): implement comments")
+ return ErrorToken, os.NewError("html: TODO(nigeltao): implement comments")
case c == '?':
- return Error, os.NewError("html: TODO(nigeltao): implement XML processing instructions")
+ return ErrorToken, os.NewError("html: TODO(nigeltao): implement XML processing instructions")
default:
- return Error, os.NewError("html: TODO(nigeltao): handle malformed tags")
+ return ErrorToken, os.NewError("html: TODO(nigeltao): handle malformed tags")
}
for {
c, err := z.readByte()
if err != nil {
- return Text, err
+ return TextToken, err
}
switch c {
case '"':
err = z.readTo('"')
if err != nil {
- return Text, err
+ return TextToken, err
}
case '\'':
err = z.readTo('\'')
if err != nil {
- return Text, err
+ return TextToken, err
}
case '>':
- if z.buf[z.p1-2] == '/' && tt == StartTag {
- return SelfClosingTag, nil
+ if z.buf[z.p1-2] == '/' && tt == StartTagToken {
+ return SelfClosingTagToken, nil
}
return tt, nil
}
@@ -224,13 +224,13 @@ func (z *Tokenizer) nextTag() (tt TokenType, err os.Error) {
// Next scans the next token and returns its type.
func (z *Tokenizer) Next() TokenType {
if z.err != nil {
- z.tt = Error
+ z.tt = ErrorToken
return z.tt
}
z.p0 = z.p1
c, err := z.readByte()
if err != nil {
- z.tt, z.err = Error, err
+ z.tt, z.err = ErrorToken, err
return z.tt
}
if c == '<' {
@@ -240,15 +240,15 @@ func (z *Tokenizer) Next() TokenType {
for {
c, err := z.readByte()
if err != nil {
- z.tt, z.err = Error, err
+ z.tt, z.err = ErrorToken, err
if err == os.EOF {
- z.tt = Text
+ z.tt = TextToken
}
return z.tt
}
if c == '<' {
z.p1--
- z.tt = Text
+ z.tt = TextToken
return z.tt
}
}
@@ -277,7 +277,7 @@ func (z *Tokenizer) trim(i int) int {
return k
}
-// lower finds the largest alphabetic [a-zA-Z]* word at the start of z.buf[i:]
+// lower finds the largest alphabetic [0-9A-Za-z]* word at the start of z.buf[i:]
// and returns that word lower-cased, as well as the trimmed cursor location
// after that word.
func (z *Tokenizer) lower(i int) ([]byte, int) {
@@ -285,8 +285,9 @@ func (z *Tokenizer) lower(i int) ([]byte, int) {
loop:
for ; i < z.p1; i++ {
c := z.buf[i]
- // TODO(nigeltao): Check what '0' <= c && c <= '9' should do.
switch {
+ case '0' <= c && c <= '9':
+ // No-op.
case 'A' <= c && c <= 'Z':
z.buf[i] = c + 'a' - 'A'
case 'a' <= c && c <= 'z':
@@ -371,9 +372,9 @@ loop:
func (z *Tokenizer) Token() Token {
t := Token{Type: z.tt}
switch z.tt {
- case Text:
+ case TextToken:
t.Data = string(z.Text())
- case StartTag, EndTag, SelfClosingTag:
+ case StartTagToken, EndTagToken, SelfClosingTagToken:
var attr []Attribute
name, remaining := z.TagName()
for remaining {