diff options
author | buraq <buraq@epfl.ch> | 2004-06-14 15:27:46 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2004-06-14 15:27:46 +0000 |
commit | bb777251ab0c23484ff5cddfcb1b86cf18558868 (patch) | |
tree | 859f5d5402b2aec7dec988c99566489587a2feee | |
parent | bae111e87516bc5c37231008dca73e4568813576 (diff) | |
download | scala-bb777251ab0c23484ff5cddfcb1b86cf18558868.tar.gz scala-bb777251ab0c23484ff5cddfcb1b86cf18558868.tar.bz2 scala-bb777251ab0c23484ff5cddfcb1b86cf18558868.zip |
more cleanup
-rw-r--r-- | sources/scala/tools/scalac/ast/parser/MarkupParser.scala | 4 | ||||
-rw-r--r-- | sources/scala/tools/scalac/ast/parser/Scanner.scala | 39 | ||||
-rw-r--r-- | sources/scala/xml/DocType.scala | 2 | ||||
-rw-r--r-- | sources/scala/xml/Parsing.scala | 76 | ||||
-rw-r--r-- | sources/scala/xml/ProcInstr.scala | 2 | ||||
-rw-r--r-- | sources/scala/xml/Utility.scala | 74 | ||||
-rw-r--r-- | sources/scala/xml/dtd/Decl.scala | 2 | ||||
-rw-r--r-- | sources/scala/xml/dtd/Scanner.scala | 4 |
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 } |