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