blob: 9f2934a7b54201549454c609c0540512616e6252 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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
}
|