summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-06-14 15:27:46 +0000
committerburaq <buraq@epfl.ch>2004-06-14 15:27:46 +0000
commitbb777251ab0c23484ff5cddfcb1b86cf18558868 (patch)
tree859f5d5402b2aec7dec988c99566489587a2feee
parentbae111e87516bc5c37231008dca73e4568813576 (diff)
downloadscala-bb777251ab0c23484ff5cddfcb1b86cf18558868.tar.gz
scala-bb777251ab0c23484ff5cddfcb1b86cf18558868.tar.bz2
scala-bb777251ab0c23484ff5cddfcb1b86cf18558868.zip
more cleanup
-rw-r--r--sources/scala/tools/scalac/ast/parser/MarkupParser.scala4
-rw-r--r--sources/scala/tools/scalac/ast/parser/Scanner.scala39
-rw-r--r--sources/scala/xml/DocType.scala2
-rw-r--r--sources/scala/xml/Parsing.scala76
-rw-r--r--sources/scala/xml/ProcInstr.scala2
-rw-r--r--sources/scala/xml/Utility.scala74
-rw-r--r--sources/scala/xml/dtd/Decl.scala2
-rw-r--r--sources/scala/xml/dtd/Scanner.scala4
8 files changed, 85 insertions, 118 deletions
diff --git a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
index 3f843179c6..6e5a73ee4d 100644
--- a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
+++ b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
@@ -390,7 +390,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
*/
def xAttributes = {
var aMap = ListMap.Empty[Name,Tree];
- while( s.xIsNameStart ) {
+ while( xml.Parsing.isNameStart( s.ch )) {
val key = s.xName;
s.xEQ;
val delim = s.ch;
@@ -425,7 +425,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
def xTag = {
val elemName = s.xName;
s.xSpaceOpt;
- val aMap = if( s.xIsNameStart ) {
+ val aMap = if(xml.Parsing.isNameStart( s.ch )) {
xAttributes;
} else {
ListMap.Empty[Name,Tree];
diff --git a/sources/scala/tools/scalac/ast/parser/Scanner.scala b/sources/scala/tools/scalac/ast/parser/Scanner.scala
index 0a178d3457..35738fe330 100644
--- a/sources/scala/tools/scalac/ast/parser/Scanner.scala
+++ b/sources/scala/tools/scalac/ast/parser/Scanner.scala
@@ -959,51 +959,16 @@ class Scanner(_unit: Unit) extends TokenData {
}
}
- /** NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
- * | CombiningChar | Extender
- *
- * see [4] and Appendix B of XML 1.0 specification
- */
- def xIsNameChar = xIsNameStart || (ch match {
- case '.' | '-' | ':' => true;
- case _ => java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
- case java.lang.Character.COMBINING_SPACING_MARK => true; // Mc
- case java.lang.Character.ENCLOSING_MARK => true; // Me
- case java.lang.Character.NON_SPACING_MARK => true; // Mn
- case java.lang.Character.MODIFIER_LETTER => true; // Lm
- case java.lang.Character.DECIMAL_DIGIT_NUMBER => true; // Nd
- case _ => false;
- }
- });
-
- /** NameStart == Unicode general category in { Ll, Lu, Lo, Lt, Nl }
- *
- * We do not allow a name to start with ':'.
- * see [3] and Appendix B of XML 1.0 specification
- */
- def xIsNameStart =
- java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
- case java.lang.Character.LOWERCASE_LETTER => true;
- case java.lang.Character.UPPERCASE_LETTER => true;
- case java.lang.Character.OTHER_LETTER => true;
- case java.lang.Character.TITLECASE_LETTER => true;
- case java.lang.Character.LETTER_NUMBER => true;
- case _ => ch match {
- case '_' => true
- case _ => false;
- }
- }
-
/** Name ::= (Letter | '_' | ':') (NameChar)*
*
* see [5] of XML 1.0 specification
*/
def xName:Name = {
- if( xIsNameStart ) {
+ if( xml.Parsing.isNameStart( ch ) ) {
do {
putChar( ch );
xNext;
- } while( xIsNameChar );
+ } while( xml.Parsing.isNameChar( ch ) );
val n = Name.fromString( cbuf.toString() );
cbuf.setLength( 0 );
n
diff --git a/sources/scala/xml/DocType.scala b/sources/scala/xml/DocType.scala
index f23a0925f1..9ca0479aa6 100644
--- a/sources/scala/xml/DocType.scala
+++ b/sources/scala/xml/DocType.scala
@@ -19,7 +19,7 @@ package scala.xml;
case class DocType( name:String, extId:Option[ExternalID], intSubset:Seq[dtd.Decl]) extends Node {
- if( !Utility.isName( name ) )
+ if( !Parsing.isName( name ) )
throw new IllegalArgumentException(target+" must be an XML Name");
/** the constant "#DOCTYPE" */
diff --git a/sources/scala/xml/Parsing.scala b/sources/scala/xml/Parsing.scala
index 7a34c3a174..514516dd7a 100644
--- a/sources/scala/xml/Parsing.scala
+++ b/sources/scala/xml/Parsing.scala
@@ -8,6 +8,7 @@
\* */
package scala.xml ;
+/** helper functions for parsing XML fragments */
object Parsing {
/** (#x20 | #x9 | #xD | #xA) */
@@ -21,4 +22,79 @@ object Parsing {
val it = cs.elements;
it.hasNext && it.forall { isSpace };
}
+
+ /** NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
+ * | CombiningChar | Extender
+ *
+ * see [4] and Appendix B of XML 1.0 specification
+ */
+ def isNameChar( ch:Char ) = isNameStart( ch ) || (ch match {
+ case '.' | '-' | ':' => true;
+ case _ => java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
+ case java.lang.Character.COMBINING_SPACING_MARK => true; // Mc
+ case java.lang.Character.ENCLOSING_MARK => true; // Me
+ case java.lang.Character.NON_SPACING_MARK => true; // Mn
+ case java.lang.Character.MODIFIER_LETTER => true; // Lm
+ case java.lang.Character.DECIMAL_DIGIT_NUMBER => true; // Nd
+ case _ => false;
+ }
+ });
+
+ /** NameStart ::= ( Letter | '_' )
+ * where Letter means in one of the Unicode general
+ * categories { Ll, Lu, Lo, Lt, Nl }
+ *
+ * We do not allow a name to start with ':'.
+ * see [3] and Appendix B of XML 1.0 specification
+ */
+ def isNameStart( ch:Char ) =
+ java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
+ case java.lang.Character.LOWERCASE_LETTER => true;
+ case java.lang.Character.UPPERCASE_LETTER => true;
+ case java.lang.Character.OTHER_LETTER => true;
+ case java.lang.Character.TITLECASE_LETTER => true;
+ case java.lang.Character.LETTER_NUMBER => true;
+ case _ => ch match {
+ case '_' => true
+ case _ => false;
+ }
+ }
+
+ /** Name ::= ( Letter | '_' ) (NameChar)*
+ *
+ * see [5] of XML 1.0 specification
+ */
+ def isName( s:String ):boolean = {
+ if( s.length() > 0 ) {
+ val z:Seq[Char] = s;
+ val y = z.elements;
+ if( isNameStart( y.next ) ) {
+ while( y.hasNext && isNameChar( y.next ) ) {};
+ !y.hasNext
+ } else false;
+ } else false;
+ }
+
+ def isPubIDChar( c:Char ) = c match {
+ case '\u0020' | '\u000D' | '\u000A' => true;
+ case _ if
+ ('0' < c && c < '9')||('a' < c && c < 'z')||('A' < c && c < 'Z') => true;
+ case '-' | '\''| '(' | ')' | '+' | ',' | '.' | '/' | ':' | '=' |
+ '?' | ';' | '!' | '*' | '#' | '@' | '$' | '_' | '%' => true
+ case _ => false;
+ }
+
+ def checkSysID( s:String ):boolean = {
+ s.indexOf('"') == -1 || s.indexOf('\'') == -1
+ }
+
+ def checkPubID( s:String ):boolean = {
+ if( s.length() > 0 ) {
+ val z:Seq[Char] = s;
+ val y = z.elements;
+ while( y.hasNext && isPubIDChar( y.next ) ){};
+ !y.hasNext
+ } else true
+ }
+
}
diff --git a/sources/scala/xml/ProcInstr.scala b/sources/scala/xml/ProcInstr.scala
index cda515ee39..7984e22f7f 100644
--- a/sources/scala/xml/ProcInstr.scala
+++ b/sources/scala/xml/ProcInstr.scala
@@ -25,7 +25,7 @@ case class ProcInstr( target:String, text:Option[String] ) extends Node {
throw new IllegalArgumentException(target+" is reserved");
case _ =>
}
- if( !Utility.isName( target ) )
+ if( !Parsing.isName( target ) )
throw new IllegalArgumentException(target+" must be an XML Name");
else text match {
case Some(txt) => if( txt.indexOf("?>" ) != -1 )
diff --git a/sources/scala/xml/Utility.scala b/sources/scala/xml/Utility.scala
index 1bc47d7d3a..e7216fe46f 100644
--- a/sources/scala/xml/Utility.scala
+++ b/sources/scala/xml/Utility.scala
@@ -109,80 +109,6 @@ object Utility {
41 * uriCode % 7 + label.hashCode() + attribs.toList.hashCode() + children.hashCode()
}
- /** NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
- * | CombiningChar | Extender
- *
- * see [4] and Appendix B of XML 1.0 specification
- */
- def isNameChar( ch:Char ) = isNameStart( ch ) || (ch match {
- case '.' | '-' | ':' => true;
- case _ => java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
- case java.lang.Character.COMBINING_SPACING_MARK => true; // Mc
- case java.lang.Character.ENCLOSING_MARK => true; // Me
- case java.lang.Character.NON_SPACING_MARK => true; // Mn
- case java.lang.Character.MODIFIER_LETTER => true; // Lm
- case java.lang.Character.DECIMAL_DIGIT_NUMBER => true; // Nd
- case _ => false;
- }
- });
-
- /** NameStart ::= ( Letter | '_' )
- * where Letter means in one of the Unicode general
- * categories { Ll, Lu, Lo, Lt, Nl }
- *
- * We do not allow a name to start with ':'.
- * see [3] and Appendix B of XML 1.0 specification
- */
- def isNameStart( ch:Char ) =
- java.lang.Character.getType( ch ).asInstanceOf[Byte] match {
- case java.lang.Character.LOWERCASE_LETTER => true;
- case java.lang.Character.UPPERCASE_LETTER => true;
- case java.lang.Character.OTHER_LETTER => true;
- case java.lang.Character.TITLECASE_LETTER => true;
- case java.lang.Character.LETTER_NUMBER => true;
- case _ => ch match {
- case '_' => true
- case _ => false;
- }
- }
-
- /** Name ::= ( Letter | '_' ) (NameChar)*
- *
- * see [5] of XML 1.0 specification
- */
- def isName( s:String ):boolean = {
- if( s.length() > 0 ) {
- val z:Seq[Char] = s;
- val y = z.elements;
- if( isNameStart( y.next ) ) {
- while( y.hasNext && isNameChar( y.next ) ) {};
- !y.hasNext
- } else false;
- } else false;
- }
-
- def isPubIDChar( c:Char ) = c match {
- case '\u0020' | '\u000D' | '\u000A' => true;
- case _ if
- ('0' < c && c < '9')||('a' < c && c < 'z')||('A' < c && c < 'Z') => true;
- case '-' | '\''| '(' | ')' | '+' | ',' | '.' | '/' | ':' | '=' |
- '?' | ';' | '!' | '*' | '#' | '@' | '$' | '_' | '%' => true
- case _ => false;
- }
-
- def checkSysID( s:String ):boolean = {
- s.indexOf('"') == -1 || s.indexOf('\'') == -1
- }
-
- def checkPubID( s:String ):boolean = {
- if( s.length() > 0 ) {
- val z:Seq[Char] = s;
- val y = z.elements;
- while( y.hasNext && isPubIDChar( y.next ) ){};
- !y.hasNext
- } else true
- }
-
def systemLiteralToString( s:String ) = {
val ch = {
if( s.indexOf('"') != -1 ) '\'' else '"'
diff --git a/sources/scala/xml/dtd/Decl.scala b/sources/scala/xml/dtd/Decl.scala
index 8660e13484..83a8c29b29 100644
--- a/sources/scala/xml/dtd/Decl.scala
+++ b/sources/scala/xml/dtd/Decl.scala
@@ -46,7 +46,7 @@ case class NotationDecl( name:String, tpe:String ) extends MarkupDecl;
/** a parsed entity reference */
case class PEReference(ent:String) extends Decl {
- if( !Utility.isName( ent ))
+ if( !Parsing.isName( ent ))
throw new IllegalArgumentException("ent must be an XML Name");
final override def toString() = "%"+ent+";"
diff --git a/sources/scala/xml/dtd/Scanner.scala b/sources/scala/xml/dtd/Scanner.scala
index 1755975b52..aeda38e364 100644
--- a/sources/scala/xml/dtd/Scanner.scala
+++ b/sources/scala/xml/dtd/Scanner.scala
@@ -63,7 +63,7 @@ class Scanner with Tokens {
case '#' => next; accS( "PCDATA" ); TOKEN_PCDATA
case ENDCH => END;
case _ =>
- if( Utility.isNameStart( c ) ) name; // NAME
+ if( Parsing.isNameStart( c ) ) name; // NAME
else {
error("unexpected character:"+c); END
}
@@ -71,7 +71,7 @@ class Scanner with Tokens {
final def name = {
val sb = new StringBuffer();
- do { sb.append( c ); next } while ( Utility.isNameChar( c ) ) ;
+ do { sb.append( c ); next } while ( Parsing.isNameChar( c ) ) ;
value = sb.toString();
NAME
}