parsing.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 106 行
SCALA
106 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2003-2007, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id: Parsing.scala 10990 2007-05-10 17:00:34Z michelou $package scala.xml/** The object <code>Parsing</code> ... * * @author Burak Emir * @version 1.0 * * @deprecated use either <code>parsing.TokenTests</code> or * <code>Utilty</code> (helper functions for parsing XML fragments). */object Parsing { /** <pre>(#x20 | #x9 | #xD | #xA)</pre> */ final def isSpace(ch: Char): Boolean = ch match { case '\u0009' | '\u000A' | '\u000D' | '\u0020' => true case _ => false } /** <pre>(#x20 | #x9 | #xD | #xA)+</pre> */ final def isSpace(cs: Seq[Char]): Boolean = { val it = cs.elements it.hasNext && it.forall { isSpace } } /** <pre>NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' * | CombiningChar | Extender</pre> * * 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 } }); /** <pre>NameStart ::= ( Letter | '_' )</pre> * 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 == '_' } /** <pre>Name ::= ( Letter | '_' ) (NameChar)*</pre> * * 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}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?