Added string-downcase and string-upcase. String-downcase does not

handle greek-final-sigma properly.
This commit is contained in:
Abdulaziz Ghuloum 2008-08-09 07:12:22 -07:00
parent e24356eb4a
commit 7bacb4a0a5
5 changed files with 230 additions and 17 deletions

View File

@ -10,9 +10,9 @@
set-port-position! make-eqv-hashtable
hashtable-hash-function make-hashtable
hashtable-equivalence-function equal-hash
string-downcase string-normalize-nfc string-normalize-nfd
string-normalize-nfc string-normalize-nfd
string-normalize-nfkc string-normalize-nfkd string-titlecase
string-upcase)
)
(import (except (ikarus)
bitwise-reverse-bit-field
@ -24,9 +24,9 @@
set-port-position! make-eqv-hashtable
hashtable-hash-function make-hashtable
hashtable-equivalence-function equal-hash
string-downcase string-normalize-nfc string-normalize-nfd
string-normalize-nfc string-normalize-nfd
string-normalize-nfkc string-normalize-nfkd string-titlecase
string-upcase))
))
(define-syntax not-yet
(syntax-rules ()
@ -52,7 +52,7 @@
(not-yet
;;; should be implemented
string-downcase string-titlecase string-upcase
string-titlecase
bitwise-rotate-bit-field bitwise-reverse-bit-field
fxreverse-bit-field
;;; not top priority at the moment

View File

@ -25,7 +25,8 @@
char-ci>? char-ci>=? string-ci=? string-ci<? string-ci<=?
string-ci>? string-ci>=? string-foldcase char-general-category
char-alphabetic? char-numeric? char-whitespace?
char-upper-case? char-lower-case? char-title-case? )
char-upper-case? char-lower-case? char-title-case?
string-upcase string-downcase)
(import
(ikarus system $fx)
@ -40,7 +41,8 @@
string-ci=? string-ci<? string-ci<=? string-ci>?
string-ci>=? string-foldcase char-general-category
char-alphabetic? char-numeric? char-whitespace?
char-upper-case? char-lower-case? char-title-case? ))
char-upper-case? char-lower-case? char-title-case?
string-upcase string-downcase))
(include "unicode/unicode-char-cases.ss")
(include "unicode/unicode-charinfo.ss")
@ -229,7 +231,7 @@
(char-ci-loop x x* char>=? 'char-ci>=?)
(die 'char-ci>=? "not a char" x))]))
(define ($string-foldcase str)
(define ($string-change-case str adjustment-vector)
(define (extend-length str ac)
(define (chars ac n)
(cond
@ -270,7 +272,7 @@
[else
(let* ([cn ($char->fixnum ($string-ref str i))])
(let ([n/ls
(vector-ref string-foldcase-adjustment-vector
(vector-ref adjustment-vector
(binary-search cn charcase-search-vector))])
(cond
[(fixnum? n/ls)
@ -280,11 +282,24 @@
(f str dst (fxadd1 i) n
(cons (cons i n/ls) ac))])))]))))
(define ($string-foldcase str)
($string-change-case str string-foldcase-adjustment-vector))
(define (string-foldcase str)
(if (string? str)
($string-foldcase str)
(die 'string-foldcase "not a string" str)))
(define (string-upcase x)
(if (string? x)
($string-change-case x string-upcase-adjustment-vector)
(die 'string-upcase "not a string" x)))
(define (string-downcase x)
(if (string? x)
($string-change-case x string-downcase-adjustment-vector)
(die 'string-downcase "not a string" x)))
;;; FIXME: case-insensitive comparison procedures are slow.
(define string-ci-cmp

View File

@ -1 +1 @@
1577
1578

View File

@ -39,7 +39,7 @@
(define (hex->num x)
(read (open-input-string (format "#x~a" x))))
(read (open-string-input-port (format "#x~a" x))))
(define data-case
(lambda (fields)
@ -51,7 +51,7 @@
(define (f x)
(if (string=? x "") 0 (- (hex->num x) n)))
;#(UC LC TC FC string-FC)
(cons n (vector (f uc) (f lc) (f tc) #f 0))))))
(cons n (vector (f uc) (f lc) (f tc) #f 0 (f uc) (f lc) (f tc)))))))
(define (remove-dups ls)
(let f ([ls ls] [last #f])
@ -133,6 +133,37 @@
(convert-full-fold-fields (cdr ls)))))]
[else (convert-full-fold-fields (cdr ls))])))]))
(define-struct spcase (lc tc uc))
(define (convert-special-casing ls)
(cond
[(null? ls) '()]
[else
(let ([fields (car ls)])
(cond
[(or (<= (length fields) 4)
(= 0 (string-length (remove-spaces (list-ref fields 4)))))
(let ([n (hex->num (remove-spaces (car fields)))])
(define (field-data str)
(let ([c* (map hex->num
(map remove-spaces
(split (remove-spaces str))))])
(if (= (length c*) 1)
(- (car c*) n)
(improperize (map integer->char c*)))))
(cons
(cons n
(make-spcase
(field-data (list-ref fields 1))
(field-data (list-ref fields 2))
(field-data (list-ref fields 3))))
(convert-special-casing (cdr ls))))]
[else (convert-special-casing (cdr ls))]))]))
(define (with-output-to-file* file thunk)
(when (file-exists? file) (delete-file file))
(with-output-to-file file thunk))
(let ([ls
;;; get initial table
(compute-foldcase
@ -146,18 +177,31 @@
[(assq n ls) =>
(lambda (p)
(vector-set! (cdr p) 4 chars))]
[else (error #f "~s is not there" n)])))
[else (error #f "not there" n)])))
(convert-full-fold-fields
(get-unicode-data "UNIDATA/CaseFolding.txt")))
(for-each
(lambda (x)
(let ([n (car x)] [cases (cdr x)])
(cond
[(assq n ls) =>
(lambda (p)
(let ([v (cdr p)])
(vector-set! (cdr p) 5 (spcase-uc cases))
(vector-set! (cdr p) 6 (spcase-lc cases))
(vector-set! (cdr p) 7 (spcase-tc cases))))]
[else (error #f "not here" n)])))
(convert-special-casing
(get-unicode-data "UNIDATA/SpecialCasing.txt")))
;;; done
(let ([ls (remove-dups ls)])
(define (p name idx)
(pretty-print
`(define ,name
',(list->vector (map (lambda (x) (vector-ref (cdr x) idx)) ls)))))
(parameterize ([print-unicode #f])
(parameterize ([print-unicode #f] [pretty-width 80])
(let ([v0 (list->vector (map car ls))])
(with-output-to-file "unicode-char-cases.ss"
(with-output-to-file* "unicode-char-cases.ss"
(lambda ()
(display license)
(printf ";;; DO NOT EDIT\n;;; automatically generated\n")
@ -168,8 +212,10 @@
(p 'char-titlecase-adjustment-vector 2)
(p 'char-foldcase-adjustment-vector 3)
(p 'string-foldcase-adjustment-vector 4)
)
'replace)))))
(p 'string-upcase-adjustment-vector 5)
(p 'string-downcase-adjustment-vector 6)
(p 'string-titlecase-adjustment-vector 7)
))))))
(printf "Happy Happy Joy Joy\n")

View File

@ -299,3 +299,155 @@
(#\f . #\i) (#\f . #\l) (#\f #\f . #\i) (#\f #\f . #\l) (#\s . #\t)
(#\x574 . #\x576) (#\x574 . #\x565) (#\x574 . #\x56B) (#\x57E . #\x576)
(#\x574 . #\x56D) 0 32 0 0 0 40 0 0))
(define string-upcase-adjustment-vector
'#(0 0 0 -32 0 743 0 0 0 0 (#\S . #\S) -32 0 -32 121 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -232 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 (#\x2BC . #\N) 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1
0 -1 -300 195 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 0 0 0 -1 0 0 97 0 0 0 -1 163 0
0 0 130 0 0 -1 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0
56 0 0 -1 -2 0 -1 -2 0 -1 -2 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -79 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 (#\J . #\x30C) 0 -1 -2 0 -1 0 0
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -210 -206 0 -205 0 -202
0 -203 0 -205 0 -207 0 -209 -211 0 10743 0 -211 0 -213 0 -214 0 10727 0
-218 0 -218 0 -218 -69 -217 -71 0 -219 0 84 0 130 0 0 0 0 0 0
(#\x399 #\x308 . #\x301) 0 -38 -37 (#\x3A5 #\x308 . #\x301) -32 -31 -32 -64
-63 -62 -57 0 -47 -54 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 -86 -80 7 0 0 -96 0 0 -1 0 0 -1 0 0 0 0 -32 -80 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 -15 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -48 (#\x535 . #\x552) 0 0 0 3814
0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 (#\H . #\x331) (#\T . #\x308) (#\W . #\x30A) (#\Y . #\x30A)
(#\A . #\x2BE) -59 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 8 0 8 0 8 0 8 0 8 0 (#\x3A5 . #\x313) 8
(#\x3A5 #\x313 . #\x300) 8 (#\x3A5 #\x313 . #\x301) 8
(#\x3A5 #\x313 . #\x342) 8 0 8 0 74 86 100 128 112 126 (#\x1F08 . #\x399)
(#\x1F09 . #\x399) (#\x1F0A . #\x399) (#\x1F0B . #\x399) (#\x1F0C . #\x399)
(#\x1F0D . #\x399) (#\x1F0E . #\x399) (#\x1F0F . #\x399) (#\x1F08 . #\x399)
(#\x1F09 . #\x399) (#\x1F0A . #\x399) (#\x1F0B . #\x399) (#\x1F0C . #\x399)
(#\x1F0D . #\x399) (#\x1F0E . #\x399) (#\x1F0F . #\x399) (#\x1F28 . #\x399)
(#\x1F29 . #\x399) (#\x1F2A . #\x399) (#\x1F2B . #\x399) (#\x1F2C . #\x399)
(#\x1F2D . #\x399) (#\x1F2E . #\x399) (#\x1F2F . #\x399) (#\x1F28 . #\x399)
(#\x1F29 . #\x399) (#\x1F2A . #\x399) (#\x1F2B . #\x399) (#\x1F2C . #\x399)
(#\x1F2D . #\x399) (#\x1F2E . #\x399) (#\x1F2F . #\x399) (#\x1F68 . #\x399)
(#\x1F69 . #\x399) (#\x1F6A . #\x399) (#\x1F6B . #\x399) (#\x1F6C . #\x399)
(#\x1F6D . #\x399) (#\x1F6E . #\x399) (#\x1F6F . #\x399) (#\x1F68 . #\x399)
(#\x1F69 . #\x399) (#\x1F6A . #\x399) (#\x1F6B . #\x399) (#\x1F6C . #\x399)
(#\x1F6D . #\x399) (#\x1F6E . #\x399) (#\x1F6F . #\x399) 8
(#\x1FBA . #\x399) (#\x391 . #\x399) (#\x386 . #\x399) (#\x391 . #\x342)
(#\x391 #\x342 . #\x399) 0 0 (#\x391 . #\x399) 0 -7205 0 (#\x1FCA . #\x399)
(#\x397 . #\x399) (#\x389 . #\x399) (#\x397 . #\x342)
(#\x397 #\x342 . #\x399) 0 (#\x397 . #\x399) 0 8 (#\x399 #\x308 . #\x300)
(#\x399 #\x308 . #\x301) (#\x399 . #\x342) (#\x399 #\x308 . #\x342) 0 0 0 8
(#\x3A5 #\x308 . #\x300) (#\x3A5 #\x308 . #\x301) (#\x3A1 . #\x313) 7
(#\x3A5 . #\x342) (#\x3A5 #\x308 . #\x342) 0 0 0 0 (#\x1FFA . #\x399)
(#\x3A9 . #\x399) (#\x38F . #\x399) (#\x3A9 . #\x342)
(#\x3A9 #\x342 . #\x399) 0 0 (#\x3A9 . #\x399) 0 0 0 0 0 0 0 0 -28 0 0 -16
0 0 -1 0 0 -26 0 0 -48 0 -1 0 0 0 -10795 -10792 0 -1 0 -1 0 -1 0 0 -1 0 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -7264 0 (#\F . #\F) (#\F . #\I) (#\F . #\L)
(#\F #\F . #\I) (#\F #\F . #\L) (#\S . #\T) (#\x544 . #\x546)
(#\x544 . #\x535) (#\x544 . #\x53B) (#\x54E . #\x546) (#\x544 . #\x53D) 0 0
0 -32 0 0 -40 0))
(define string-downcase-adjustment-vector
'#(0 32 0 0 0 0 0 32 0 32 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 (#\i . #\x307) 0 1 0
1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 -121 1 0 1 0 1
0 0 0 210 1 0 1 0 206 1 0 205 1 0 0 79 202 203 1 0 205 207 0 211 209 1 0 0
0 211 213 0 214 1 0 1 0 1 0 218 1 0 218 0 1 0 218 1 0 217 1 0 1 0 219 1 0 0
1 0 0 0 0 2 1 0 2 1 0 2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 0 2 1 0 1 0 -97 -56 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 -130 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 0 10795 1 0 -163 10792 0 1 0 -195 69 71 1 0 1 0 1 0 1 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 38 0 37 64 63 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 -60 0 0 1 0 -7 1 0 0 -130 80 32 0 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 15 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 48 0 0 0 0 7264 0 0 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 0 -8 0 -8 0 -8 0 -8 0 -8 0 0 0 0 0 0 0 0 -8 0 -8 0 0 0
0 0 0 0 0 0 0 0 0 0 0 -8 -8 -8 -8 -8 -8 -8 -8 0 0 0 0 0 0 0 0 -8 -8 -8 -8
-8 -8 -8 -8 0 0 0 0 0 0 0 0 -8 -8 -8 -8 -8 -8 -8 -8 0 0 0 0 0 0 -8 -74 -9 0
0 0 0 0 0 0 0 -86 -9 0 0 0 0 0 0 -8 -100 0 0 0 0 0 0 0 0 -8 -112 -7 0 0 0 0
0 0 -128 -126 -9 0 -7517 0 -8383 -8262 0 28 0 0 0 16 0 0 1 0 0 26 0 0 48 0
1 0 -10743 -3814 -10727 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 40 0 0))
(define string-titlecase-adjustment-vector
'#(0 0 0 -32 0 743 0 0 0 0 (#\S . #\s) -32 0 -32 121 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -232 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 (#\x2BC . #\N) 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1
0 -1 -300 195 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 0 0 0 -1 0 0 97 0 0 0 -1 163 0
0 0 130 0 0 -1 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0
56 0 1 0 -1 1 0 -1 1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -79 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 (#\J . #\x30C) 1 0 -1 0 -1 0 0 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0
-1 0 0 0 0 -1 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -210 -206 0 -205 0 -202 0
-203 0 -205 0 -207 0 -209 -211 0 10743 0 -211 0 -213 0 -214 0 10727 0 -218
0 -218 0 -218 -69 -217 -71 0 -219 0 84 0 130 0 0 0 0 0 0
(#\x399 #\x308 . #\x301) 0 -38 -37 (#\x3A5 #\x308 . #\x301) -32 -31 -32 -64
-63 -62 -57 0 -47 -54 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 -86 -80 7 0 0 -96 0 0 -1 0 0 -1 0 0 0 0 -32 -80 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 -15 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -48 (#\x535 . #\x582) 0 0 0 3814
0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 (#\H . #\x331) (#\T . #\x308) (#\W . #\x30A) (#\Y . #\x30A)
(#\A . #\x2BE) -59 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
-1 0 -1 0 -1 0 -1 8 0 8 0 8 0 8 0 8 0 (#\x3A5 . #\x313) 8
(#\x3A5 #\x313 . #\x300) 8 (#\x3A5 #\x313 . #\x301) 8
(#\x3A5 #\x313 . #\x342) 8 0 8 0 74 86 100 128 112 126 8 8 8 8 8 8 8 8 0 0
0 0 0 0 0 0 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0
8 (#\x1FBA . #\x345) 9 (#\x386 . #\x345) (#\x391 . #\x342)
(#\x391 #\x342 . #\x345) 0 0 0 0 -7205 0 (#\x1FCA . #\x345) 9
(#\x389 . #\x345) (#\x397 . #\x342) (#\x397 #\x342 . #\x345) 0 0 0 8
(#\x399 #\x308 . #\x300) (#\x399 #\x308 . #\x301) (#\x399 . #\x342)
(#\x399 #\x308 . #\x342) 0 0 0 8 (#\x3A5 #\x308 . #\x300)
(#\x3A5 #\x308 . #\x301) (#\x3A1 . #\x313) 7 (#\x3A5 . #\x342)
(#\x3A5 #\x308 . #\x342) 0 0 0 0 (#\x1FFA . #\x345) 9 (#\x38F . #\x345)
(#\x3A9 . #\x342) (#\x3A9 #\x342 . #\x345) 0 0 0 0 0 0 0 0 0 0 0 -28 0 0
-16 0 0 -1 0 0 -26 0 0 -48 0 -1 0 0 0 -10795 -10792 0 -1 0 -1 0 -1 0 0 -1 0
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1
0 -1 0 -1 0 -1 0 -1 0 -1 0 -7264 0 (#\F . #\f) (#\F . #\i) (#\F . #\l)
(#\F #\f . #\i) (#\F #\f . #\l) (#\S . #\t) (#\x544 . #\x576)
(#\x544 . #\x565) (#\x544 . #\x56B) (#\x54E . #\x576) (#\x544 . #\x56D) 0 0
0 -32 0 0 -40 0))