From e1a5fc652c57d478529182cb905a05de6cf421e5 Mon Sep 17 00:00:00 2001 From: dlichteblau Date: Tue, 27 Dec 2005 00:21:36 +0000 Subject: [PATCH] utf8-dom --- package.lisp | 6 ++++++ utf8.lisp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 utf8.lisp diff --git a/package.lisp b/package.lisp index cfb822d..e2c70e2 100644 --- a/package.lisp +++ b/package.lisp @@ -61,6 +61,12 @@ #:set-to-full-speed #:xstream-name)) +(defpackage :utf8-runes + (:use :cl) + (:export *utf8-runes-readtable* + #:rune #:rod #:simple-rod #:rod-string #:rod= #:make-rod + #:string-rod)) + (defpackage :runes-encoding (:use :cl :runes) (:export diff --git a/utf8.lisp b/utf8.lisp new file mode 100644 index 0000000..938b67e --- /dev/null +++ b/utf8.lisp @@ -0,0 +1,44 @@ +;;; copyright (c) 2005 David Lichteblau +;;; License: Lisp-LGPL (See file COPYING for details). +;;; +;;; Rune emulation for the UTF-8-compatible DOM implementation. +;;; Used only with 8 bit characters on non-unicode Lisps. + +(in-package :utf8-runes) + +(deftype rune () 'character) +(deftype rod () '(vector rune)) +(deftype simple-rod () '(simple-array rune)) + +#+(or) +(definline rune (rod index) + (char rod index)) + +#+(or) +(defun (setf rune) (newval rod index) + (setf (char rod index) newval)) + +(defun rod= (r s) + (string= r s)) + +(defun rod-string (rod &optional default) + (declare (ignore default)) + rod) + +(defun string-rod (string) + string) + +(defun make-rod (size) + (make-string size :element-type 'rune)) + +(defun rune-reader (stream subchar arg) + (runes::rune-char (runes::rune-reader stream subchar arg))) + +(defun rod-reader (stream subchar arg) + (runes::rod-string (runes::rod-reader stream subchar arg))) + +(setf cxml-system::*utf8-runes-readtable* + (let ((rt (copy-readtable))) + (set-dispatch-macro-character #\# #\/ 'rune-reader rt) + (set-dispatch-macro-character #\# #\" 'rod-reader rt) + rt))