Commit 9d9cd5e2 authored by rtoy's avatar rtoy
Browse files

Refactor WRITE-UNIDATA by moving common code that writes ntries into

their own routines.
parent e5bae125
Loading
Loading
Loading
Loading
+58 −109
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
;;; This code was written by Paul Foley and has been placed in the public
;;; domain.
;;; 
(ext:file-comment "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/tools/build-unidata.lisp,v 1.1.2.12 2009/06/09 13:07:50 rtoy Exp $")
(ext:file-comment "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/tools/build-unidata.lisp,v 1.1.2.13 2009/06/10 00:28:22 rtoy Exp $")
;;;
;;; **********************************************************************
;;;
@@ -415,7 +415,47 @@
	   (write32 (n stm)
	     (write16 (ldb (byte 16 16) n) stm)
	     (write16 (ldb (byte 16 0) n) stm))
	   (update-index (val array)
	   (write-ntrie32 (data stm)
	     (write-byte (ntrie32-split data) stm)
	     (write16 (length (ntrie32-hvec data)) stm)
	     (write16 (length (ntrie32-mvec data)) stm)
	     (write16 (length (ntrie32-lvec data)) stm)
	     (write-vector (ntrie32-hvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie32-mvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie32-lvec data) stm :endian-swap :network-order))
	   (write-ntrie16 (data stm)
	     (write-byte (bidi-split data) stm)
	     (write16 (length (bidi-hvec data)) stm)
	     (write16 (length (bidi-mvec data)) stm)
	     (write16 (length (bidi-lvec data)) stm)
	     (write-vector (bidi-hvec data) stm :endian-swap :network-order)
	     (write-vector (bidi-mvec data) stm :endian-swap :network-order)
	     (write-vector (bidi-lvec data) stm :endian-swap :network-order))
	   (write-ntrie8 (data stm)
	     (write-byte (ntrie8-split data) stm)
	     (write16 (length (ntrie8-hvec data)) stm)
	     (write16 (length (ntrie8-mvec data)) stm)
	     (write16 (length (ntrie8-lvec data)) stm)
	     (write-vector (ntrie8-hvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie8-mvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie8-lvec data) stm :endian-swap :network-order))
	   (write-ntrie2 (data stm)
	     (write-byte (ntrie2-split data) stm)
	     (write16 (length (ntrie2-hvec data)) stm)
	     (write16 (length (ntrie2-mvec data)) stm)
	     (write16 (length (ntrie2-lvec data)) stm)
	     (write-vector (ntrie2-hvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie2-mvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie2-lvec data) stm :endian-swap :network-order))
	   (write-ntrie1 (data stm)
	     (write-byte (ntrie1-split data) stm)
	     (write16 (length (ntrie1-hvec data)) stm)
	     (write16 (length (ntrie1-mvec data)) stm)
	     (write16 (length (ntrie1-lvec data)) stm)
	     (write-vector (ntrie1-hvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie1-mvec data) stm :endian-swap :network-order)
	     (write-vector (ntrie1-lvec data) stm :endian-swap :network-order))
	   (updavte-index (val array)
	     (let ((result (vector-push val array)))
	       (unless result
		 (error "Index array too short for the data being written")))))
@@ -457,77 +497,35 @@
	;; Codepoint-to-name mapping
	(let ((data (unidata-name *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie32-split data) stm)
	  (write16 (length (ntrie32-hvec data)) stm)
	  (write16 (length (ntrie32-mvec data)) stm)
	  (write16 (length (ntrie32-lvec data)) stm)
	  (write-vector (ntrie32-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-lvec data) stm :endian-swap :network-order))
	  (write-ntrie32 data stm))
	;; Codepoint-to-category table
	(let ((data (unidata-category *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie8-split data) stm)
	  (write16 (length (ntrie8-hvec data)) stm)
	  (write16 (length (ntrie8-mvec data)) stm)
	  (write16 (length (ntrie8-lvec data)) stm)
	  (write-vector (ntrie8-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie8-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie8-lvec data) stm :endian-swap :network-order))
	  (write-ntrie8 data stm))
	;; Simple case mapping table
	(let ((data (unidata-scase *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (scase-split data) stm)
	  (write16 (length (scase-hvec data)) stm)
	  (write16 (length (scase-mvec data)) stm)
	  (write16 (length (scase-lvec data)) stm)
	  (write-vector (scase-hvec data) stm :endian-swap :network-order)
	  (write-vector (scase-mvec data) stm :endian-swap :network-order)
	  (write-vector (scase-lvec data) stm :endian-swap :network-order)
	  (write-ntrie32 data stm)
	  (write-byte (length (scase-svec data)) stm)
	  (write-vector (scase-svec data) stm :endian-swap :network-order))
	;; Numeric data
	(let ((data (unidata-numeric *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie32-split data) stm)
	  (write16 (length (ntrie32-hvec data)) stm)
	  (write16 (length (ntrie32-mvec data)) stm)
	  (write16 (length (ntrie32-lvec data)) stm)
	  (write-vector (ntrie32-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-lvec data) stm :endian-swap :network-order))
	  (write-ntrie32 data stm))
	;; Decomposition data
	(let ((data (unidata-decomp *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (decomp-split data) stm)
	  (write16 (length (decomp-hvec data)) stm)
	  (write16 (length (decomp-mvec data)) stm)
	  (write16 (length (decomp-lvec data)) stm)
	  (write-vector (decomp-hvec data) stm :endian-swap :network-order)
	  (write-vector (decomp-mvec data) stm :endian-swap :network-order)
	  (write-vector (decomp-lvec data) stm :endian-swap :network-order)
	  (write-ntrie32 data stm)
	  (write16 (length (decomp-tabl data)) stm)
	  (write-vector (decomp-tabl data) stm :endian-swap :network-order))
	;; Combining classes
	(let ((data (unidata-combining *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie8-split data) stm)
	  (write16 (length (ntrie8-hvec data)) stm)
	  (write16 (length (ntrie8-mvec data)) stm)
	  (write16 (length (ntrie8-lvec data)) stm)
	  (write-vector (ntrie8-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie8-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie8-lvec data) stm :endian-swap :network-order))
	  (write-ntrie8 data stm))
	;; Bidi data
	(let ((data (unidata-bidi *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (bidi-split data) stm)
	  (write16 (length (bidi-hvec data)) stm)
	  (write16 (length (bidi-mvec data)) stm)
	  (write16 (length (bidi-lvec data)) stm)
	  (write-vector (bidi-hvec data) stm :endian-swap :network-order)
	  (write-vector (bidi-mvec data) stm :endian-swap :network-order)
	  (write-vector (bidi-lvec data) stm :endian-swap :network-order)
	  (write-ntrie16 data stm)
	  (write-byte (length (bidi-tabl data)) stm)
	  (write-vector (bidi-tabl data) stm :endian-swap :network-order))
	;; Unicode 1.0 names
@@ -548,47 +546,17 @@
	  (write-vector (dictionary-namev data) stm :endian-swap :network-order))
	(let ((data (unidata-name1 *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie32-split data) stm)
	  (write16 (length (ntrie32-hvec data)) stm)
	  (write16 (length (ntrie32-mvec data)) stm)
	  (write16 (length (ntrie32-lvec data)) stm)
	  (write-vector (ntrie32-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-lvec data) stm :endian-swap :network-order))
	  (write-ntrie32 data stm))
	;; Normalization quick-check data
	(update-index (file-position stm) index)
	(let ((data (unidata-qc-nfd *unicode-data*)))
	  (write-byte (ntrie1-split data) stm)
	  (write16 (length (ntrie1-hvec data)) stm)
	  (write16 (length (ntrie1-mvec data)) stm)
	  (write16 (length (ntrie1-lvec data)) stm)
	  (write-vector (ntrie1-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie1-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie1-lvec data) stm :endian-swap :network-order))
	  (write-ntrie1 data stm))
	(let ((data (unidata-qc-nfkd *unicode-data*)))
	  (write-byte (ntrie1-split data) stm)
	  (write16 (length (ntrie1-hvec data)) stm)
	  (write16 (length (ntrie1-mvec data)) stm)
	  (write16 (length (ntrie1-lvec data)) stm)
	  (write-vector (ntrie1-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie1-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie1-lvec data) stm :endian-swap :network-order))
	  (write-ntrie1 data stm))
	(let ((data (unidata-qc-nfc *unicode-data*)))
	  (write-byte (ntrie2-split data) stm)
	  (write16 (length (ntrie2-hvec data)) stm)
	  (write16 (length (ntrie2-mvec data)) stm)
	  (write16 (length (ntrie2-lvec data)) stm)
	  (write-vector (ntrie2-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie2-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie2-lvec data) stm :endian-swap :network-order))
	  (write-ntrie2 data stm))
	(let ((data (unidata-qc-nfkc *unicode-data*)))
	  (write-byte (ntrie2-split data) stm)
	  (write16 (length (ntrie2-hvec data)) stm)
	  (write16 (length (ntrie2-mvec data)) stm)
	  (write16 (length (ntrie2-lvec data)) stm)
	  (write-vector (ntrie2-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie2-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie2-lvec data) stm :endian-swap :network-order))
	  (write-ntrie2 data stm))
	;; Write composition exclusion table
	(let ((data (unidata-comp-exclusions *unicode-data*)))
	  (update-index (file-position stm) index)
@@ -597,13 +565,7 @@
	;; Write full-case lower data
	(flet ((dump-full-case (data)
		 (update-index (file-position stm) index)
		 (write-byte (full-case-split data) stm)
		 (write16 (length (full-case-hvec data)) stm)
		 (write16 (length (full-case-mvec data)) stm)
		 (write16 (length (full-case-lvec data)) stm)
		 (write-vector (full-case-hvec data) stm :endian-swap :network-order)
		 (write-vector (full-case-mvec data) stm :endian-swap :network-order)
		 (write-vector (full-case-lvec data) stm :endian-swap :network-order)
		 (write-ntrie32 data stm)
		 (write16 (length (full-case-tabl data)) stm)
		 (write-vector (full-case-tabl data) stm :endian-swap :network-order)))
	  (dump-full-case (unidata-full-case-lower *unicode-data*))
@@ -612,24 +574,11 @@
	;; Write case folding data
	(let ((data (unidata-case-fold-simple *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (ntrie32-split data) stm)
	  (write16 (length (ntrie32-hvec data)) stm)
	  (write16 (length (ntrie32-mvec data)) stm)
	  (write16 (length (ntrie32-lvec data)) stm)
	  (write-vector (ntrie32-hvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-mvec data) stm :endian-swap :network-order)
	  (write-vector (ntrie32-lvec data) stm :endian-swap :network-order)
	  )
	  (write-ntrie32 data stm))
	;; case-folding full
	(let ((data (unidata-case-fold-full *unicode-data*)))
	  (update-index (file-position stm) index)
	  (write-byte (case-folding-split data) stm)
	  (write16 (length (case-folding-hvec data)) stm)
	  (write16 (length (case-folding-mvec data)) stm)
	  (write16 (length (case-folding-lvec data)) stm)
	  (write-vector (case-folding-hvec data) stm :endian-swap :network-order)
	  (write-vector (case-folding-mvec data) stm :endian-swap :network-order)
	  (write-vector (case-folding-lvec data) stm :endian-swap :network-order)
	  (write-ntrie32 data stm)
	  (write16 (length (case-folding-tabl data)) stm)
	  (write-vector (case-folding-tabl data) stm :endian-swap :network-order))