]> gitweb.factorcode.org Git - factor.git/blob - basis/xml/char-classes/char-classes.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / xml / char-classes / char-classes.factor
1 ! Copyright (C) 2005, 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sequences unicode.categories.syntax math math.order
4 combinators hints ;
5 IN: xml.char-classes
6
7 CATEGORY: 1.0name-start
8     Ll Lu Lo Lt Nl | {
9         [ HEX: 2BB HEX: 2C1 between? ]
10         [ "\u000559\u0006E5\u0006E6_:" member? ]
11     } 1|| ;
12
13 CATEGORY: 1.0name-char
14     Ll Lu Lo Lt Nl Mc Me Mn Lm Nd |
15     "_-.\u000387:" member? ;
16
17 CATEGORY: 1.1name-start
18     Ll Lu Lo Lm Ln Nl |
19     "_:" member? ;
20
21 CATEGORY: 1.1name-char
22     Ll Lu Lo Lm Ln Nl Mc Mn Nd Pc Cf |
23     "_-.\u0000b7:" member? ;
24
25 : name-start? ( 1.0? char -- ? )
26     swap [ 1.0name-start? ] [ 1.1name-start? ] if ;
27
28 : name-char? ( 1.0? char -- ? )
29     swap [ 1.0name-char? ] [ 1.1name-char? ] if ;
30
31 : text? ( 1.0? char -- ? )
32     ! 1.0:
33     ! #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
34     ! 1.1:
35     ! [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
36     {
37         { [ dup HEX: 20 < ] [ swap [ "\t\r\n" member? ] [ zero? not ] if ] }
38         { [ nip dup HEX: D800 < ] [ drop t ] }
39         { [ dup HEX: E000 < ] [ drop f ] }
40         [ { HEX: FFFE HEX: FFFF } member? not ]
41     } cond ;
42
43 HINTS: text? { object fixnum } ;