- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 28 Mar 2008 08:01:52 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/parser/analyzer
In directory hutz:/tmp/cvs-serv15792
Modified Files:
CssParser.jj
Log Message:
better canonicalization of identifiers. Useful in the presented style sheet.
Index: CssParser.jj
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.jj,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- CssParser.jj 27 Mar 2008 13:18:52 -0000 1.36
+++ CssParser.jj 28 Mar 2008 08:01:49 -0000 1.37
@@ -10,8 +10,8 @@
options {
IGNORE_CASE = true;
STATIC = false;
-/* DEBUG_TOKEN_MANAGER = true;
- DEBUG_PARSER = true; */
+ /* DEBUG_TOKEN_MANAGER = true;
+ DEBUG_PARSER = true; */
}
PARSER_BEGIN(CssParser)
@@ -81,6 +81,10 @@
*/
public abstract class CssParser {
+ private static char hexdigits[] = { '0', '1', '2', '3',
+ '4', '5', '6', '7',
+ '8', '9', 'a', 'b',
+ 'c', 'd', 'e', 'f' };
// the current atRule
protected AtRule atRule;
protected String mediaDeclaration = "off";
@@ -1147,10 +1151,11 @@
context_set.addElement(contextual);
}
}
-
+
( <COMMA> ( <S> )*
contextual=selector()
- { if (contextual != null) {
+ {
+ if (contextual != null) {
context_set.addElement(contextual);
}
}
@@ -1160,15 +1165,18 @@
<RBRACE> ( <S> )*
{
markRule = true;
-
+
/* if (value_set == null) {
ac.getFrame().addWarning("no-declaration");
} else {*/
if (value_set != null) {
boolean first = true;
- for (Enumeration e = context_set.elements(); e.hasMoreElements();) {
+ CssSelectors sel = null;
+ Enumeration<CssSelectors> e = context_set.elements();
+ while (e.hasMoreElements()) {
+ sel = e.nextElement();
if (first) {
- handleRule((CssSelectors) e.nextElement(), value_set);
+ handleRule(sel, value_set);
first = false;
} else {
// we need to duplicate properties in that case
@@ -1179,7 +1187,7 @@
for (int i=0; i<vsize; i++) {
v.addElement(value_set.elementAt(i).duplicate());
}
- handleRule((CssSelectors) e.nextElement(), v);
+ handleRule(sel, v);
}
}
setSelectorList(context_set);
@@ -2062,8 +2070,10 @@
JAVACODE
String convertStringIndex(String s, int start, int len) {
- StringBuffer buf = new StringBuffer(len);
+ StringBuilder buf = new StringBuilder(len);
int index = start;
+ int t;
+ int maxCount = 0;
while (index < len) {
char c = s.charAt(index);
@@ -2077,26 +2087,51 @@
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
int numValue = Character.digit(c, 16);
int count = 1;
- int p = 16;
-
- int maxCount = (ac.getCssVersion().equals("css1") ? 4 : 6);
+ if (maxCount == 0) {
+ maxCount = (ac.getCssVersion().equals("css1") ?
+ 4 : 6);
+ }
while (index + 1 < len) {
c = s.charAt(index+1);
-
- if (Character.digit(c, 16) != -1 && count++ < maxCount) {
- numValue = (numValue * 16) + Character.digit(c, 16);
- p *= 16;
+ t = Character.digit(c, 16);
+ if (t != -1 && count++ < maxCount) {
+ numValue = (numValue<<4) | t;
index++;
} else {
- if (c == ' ' || c == '\t' ) {
+ if (c == ' ' || c == '\t' ||
+ c == '\n' || c == '\f' ) {
// skip the latest white space
index++;
+ } else if ( c == '\r' ) {
+ index++;
+ // special case for \r\n
+ if (index+1 < len) {
+ if (s.charAt(index + 1) == '\n') {
+ index++;
+ }
+ }
}
break;
}
}
-
- buf.append((char) numValue);
+ if (numValue < 255 && numValue>31) {
+ if (! ( (numValue>96 && numValue<123) // [a-z]
+ || (numValue>64 && numValue<91) // [A-Z]
+ || (numValue>47 && numValue<58) // [0-9]
+ || (numValue == 95) // _
+ || (numValue == 45) )) { // -
+ buf.append('\\');
+ }
+ buf.append((char) numValue);
+ break;
+ }
+ char b[] = new char[maxCount];
+ t = maxCount;
+ while (t > 0) {
+ b[--t] = hexdigits[numValue & 0xF];
+ numValue >>>= 4;
+ }
+ buf.append('\\').append(b);
break;
case '\n':
case '\f':
@@ -2108,8 +2143,21 @@
}
}
break;
- default:
+ case '-' : case '_' : case 'g' : case 'G' :
+ case 'h' : case 'H' : case 'i' : case 'I' :
+ case 'j' : case 'J' : case 'k' : case 'K' :
+ case 'l' : case 'L' : case 'm' : case 'M' :
+ case 'n' : case 'N' : case 'o' : case 'O' :
+ case 'p' : case 'P' : case 'q' : case 'Q' :
+ case 'r' : case 'R' : case 's' : case 'S' :
+ case 't' : case 'T' : case 'u' : case 'U' :
+ case 'v' : case 'V' : case 'w' : case 'W' :
+ case 'x' : case 'X' : case 'y' : case 'Y' :
+ case 'z' : case 'Z' :
buf.append(c);
+ break;
+ default:
+ buf.append('\\').append(c);
}
} else {
throw new ParseException("invalid string");
@@ -2119,7 +2167,6 @@
}
index++;
}
-
return buf.toString();
}
Received on Friday, 28 March 2008 08:02:33 UTC