[Smax-commit] SF.net SVN: smax: [36] trunk/smax
Status: Alpha
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2008-01-27 18:53:01
|
Revision: 36
http://smax.svn.sourceforge.net/smax/?rev=36&view=rev
Author: dbrosius
Date: 2008-01-27 10:52:28 -0800 (Sun, 27 Jan 2008)
Log Message:
-----------
add support for parsing comments
Modified Paths:
--------------
trunk/smax/src/com/mebigfatguy/smax/SmaxParseState.java
trunk/smax/src/com/mebigfatguy/smax/SmaxParser.java
trunk/smax/test/com/mebigfatguy/smax/SmaxParserTest.java
Modified: trunk/smax/src/com/mebigfatguy/smax/SmaxParseState.java
===================================================================
--- trunk/smax/src/com/mebigfatguy/smax/SmaxParseState.java 2008-01-27 18:20:30 UTC (rev 35)
+++ trunk/smax/src/com/mebigfatguy/smax/SmaxParseState.java 2008-01-27 18:52:28 UTC (rev 36)
@@ -33,5 +33,8 @@
ATTRIBUTEVALUE,
PCDATA,
PROCESSINGINSTRUCTION,
- COMMENT
+ COMMENT,
+ BANG,
+ STARTDASH,
+ ENDDASH
}
Modified: trunk/smax/src/com/mebigfatguy/smax/SmaxParser.java
===================================================================
--- trunk/smax/src/com/mebigfatguy/smax/SmaxParser.java 2008-01-27 18:20:30 UTC (rev 35)
+++ trunk/smax/src/com/mebigfatguy/smax/SmaxParser.java 2008-01-27 18:52:28 UTC (rev 36)
@@ -36,6 +36,7 @@
private int row = 1;
private int column = -1;
private char matchingQuote;
+ private int dashCount;
public void setContentHandler(ContentHandler cHandler) {
@@ -107,6 +108,9 @@
if (c == '/') {
state = SmaxParseState.ENDTAGNAME;
sb.setLength(0);
+ } else if (c == '!') {
+ state = SmaxParseState.BANG;
+ sb.setLength(0);
}
else {
state = SmaxParseState.STARTTAGNAME;
@@ -115,6 +119,22 @@
}
break;
+ case BANG:
+ if (c == '-') {
+ state = SmaxParseState.STARTDASH;
+ } else {
+ return new SmaxToken(SmaxTokenType.Error, String.valueOf(c));
+ }
+ break;
+
+ case STARTDASH:
+ if (c == '-') {
+ state = SmaxParseState.COMMENT;
+ } else {
+ return new SmaxToken(SmaxTokenType.Error, String.valueOf(c));
+ }
+ break;
+
case TRAILINGEMPTYSLASH:
if (c == '>') {
return new SmaxToken(SmaxTokenType.EmptyTag, sb.toString());
@@ -221,6 +241,34 @@
}
break;
+ case COMMENT:
+ if (c == '-') {
+ state = SmaxParseState.ENDDASH;
+ dashCount++;
+ } else {
+ sb.append(c);
+ }
+ break;
+
+ case ENDDASH:
+ if (c == '-')
+ dashCount++;
+ else if (c == '>') {
+ if (dashCount >= 2) {
+ state = SmaxParseState.UNKNOWN;
+ return new SmaxToken(SmaxTokenType.Comment, sb.toString());
+ } else {
+ dashCount = 0;
+ sb.append("->");
+ state = SmaxParseState.COMMENT;
+ }
+ } else {
+ dashCount = 0;
+ sb.append("-").append(c);
+ state = SmaxParseState.COMMENT;
+ }
+ break;
+
default:
return new SmaxToken(SmaxTokenType.Error, String.valueOf(c));
//break;
Modified: trunk/smax/test/com/mebigfatguy/smax/SmaxParserTest.java
===================================================================
--- trunk/smax/test/com/mebigfatguy/smax/SmaxParserTest.java 2008-01-27 18:20:30 UTC (rev 35)
+++ trunk/smax/test/com/mebigfatguy/smax/SmaxParserTest.java 2008-01-27 18:52:28 UTC (rev 36)
@@ -90,4 +90,19 @@
Assert.assertEquals(SmaxTokenType.EndTag, t.getTokenType());
Assert.assertEquals("test", t.getTokenValue());
}
+
+ @Test
+ public void testComment() throws Exception {
+ SmaxParser parser = new SmaxParser();
+ Reader r = new BufferedReader(new StringReader("<test><!--This is a test--></test>"));
+ SmaxToken t = parser.getNextToken(r);
+ Assert.assertEquals(SmaxTokenType.StartTag, t.getTokenType());
+ Assert.assertEquals("test", t.getTokenValue());
+ t = parser.getNextToken(r);
+ Assert.assertEquals(SmaxTokenType.Comment, t.getTokenType());
+ Assert.assertEquals("This is a test", t.getTokenValue());
+ t = parser.getNextToken(r);
+ Assert.assertEquals(SmaxTokenType.EndTag, t.getTokenType());
+ Assert.assertEquals("test", t.getTokenValue());
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|