summaryrefslogtreecommitdiff
path: root/src/library/scala/xml/Parsing.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/xml/Parsing.scala')
-rw-r--r--src/library/scala/xml/Parsing.scala105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/library/scala/xml/Parsing.scala b/src/library/scala/xml/Parsing.scala
new file mode 100644
index 0000000000..9f2934a7b5
--- /dev/null
+++ b/src/library/scala/xml/Parsing.scala
@@ -0,0 +1,105 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003-2007, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id$
+
+
+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
+
+}