
Update of /project/cl-l10n/cvsroot/cl-l10n In directory common-lisp.net:/tmp/cvs-serv9854 Modified Files: ChangeLog cl-l10n.asd locale.lisp package.lisp printers.lisp tests.lisp Added Files: parse-number.lisp parsers.lisp Log Message: Changelog 2004-12-08 Date: Wed Dec 8 11:02:23 2004 Author: sross Index: cl-l10n/ChangeLog diff -u cl-l10n/ChangeLog:1.4 cl-l10n/ChangeLog:1.5 --- cl-l10n/ChangeLog:1.4 Tue Dec 7 10:23:29 2004 +++ cl-l10n/ChangeLog Wed Dec 8 11:02:23 2004 @@ -1,6 +1,15 @@ +2004-12-08 Sean Ross <sross@common-lisp.net> + * printers.lisp: Added format which can be shadow imported + to provide 3 new format directive ~u(universal-time), ~m(monetary) + and ~n(numeric), all other directives are unchanged. + * printers.lisp: Use locale-t-fmt if locale-t-fmt-ampm is an + empty string. + * locale.lisp: Added support for ECL. + * parse-number.lisp, parsers.lisp: Added a basic number parser. + 2004-12-07 Sean Ross <sross@common-lisp.net> * utils.lisp: Patch for flonum-to-digits from Raymond Toy - on cmucl-help (06 Dec 2004, Strange error). + on cmucl-help (06 Dec 2004, Subject: Strange error). 2004-12-01 Sean Ross <sross@common-lisp.net> Version 0.1 Release Index: cl-l10n/cl-l10n.asd diff -u cl-l10n/cl-l10n.asd:1.4 cl-l10n/cl-l10n.asd:1.5 --- cl-l10n/cl-l10n.asd:1.4 Tue Dec 7 10:23:29 2004 +++ cl-l10n/cl-l10n.asd Wed Dec 8 11:02:23 2004 @@ -11,16 +11,18 @@ :name "CL-L10N" :author "Sean Ross <sdr@jhb.ucs.co.za>" :maintainer "Sean Ross <sdr@jhb.ucs.co.za>" - :version "0.1.1" + :version "0.1.7" :description "Portable CL Locale Support" :long-description "Portable CL Package to support localization" :licence "MIT" :components ((:file "package") + (:file "parse-number" :depends-on ("package")) (:file "utils" :depends-on ("package")) (:file "locale" :depends-on ("utils")) (:file "printers" :depends-on ("locale")) + (:file "parsers" :depends-on ("printers" "parse-number")) (:file "i18n" :depends-on ("printers")) - (:file "load-locale" :depends-on ("printers"))) + (:file "load-locale" :depends-on ("locale"))) :depends-on (:cl-ppcre)) (defmethod perform :after ((o load-op) (c (eql (find-system :cl-l10n)))) Index: cl-l10n/locale.lisp diff -u cl-l10n/locale.lisp:1.4 cl-l10n/locale.lisp:1.5 --- cl-l10n/locale.lisp:1.4 Wed Dec 1 12:48:40 2004 +++ cl-l10n/locale.lisp Wed Dec 8 11:02:23 2004 @@ -5,6 +5,7 @@ ;; What to do with LC_CTYPE, LC_COLLATE ;; Test on windows. ;; Parsers? +;; locale aliases (in-package :cl-l10n ) @@ -82,7 +83,8 @@ #+sbcl (sb-ext:posix-getenv word) #+lispworks (hcl:getenv word) #+cmu (cdr (assoc (intern word :keyword) ext:*environment-list*)) - #+clisp (ext:getenv word)) + #+clisp (ext:getenv word) + #+ecl (si:getenv word)) ;; Getters Index: cl-l10n/package.lisp diff -u cl-l10n/package.lisp:1.2 cl-l10n/package.lisp:1.3 --- cl-l10n/package.lisp:1.2 Wed Dec 1 12:48:40 2004 +++ cl-l10n/package.lisp Wed Dec 8 11:02:23 2004 @@ -4,10 +4,11 @@ (defpackage #:cl-l10n (:use #:cl #:cl-ppcre) + (:shadow cl:format) (:export #:locale-name #:category-name #:locale #:category #:locale-error #:get-category #:get-cat-val #:locale-value #:load-all-locales #:*locale* #:*locale-path* #:*locales* #:format-number #:print-number #:format-money #:print-money #:format-time #:print-time #:add-resources #:bundle - #:add-resource #:gettext)) + #:add-resource #:gettext #:parse-number)) Index: cl-l10n/printers.lisp diff -u cl-l10n/printers.lisp:1.4 cl-l10n/printers.lisp:1.5 --- cl-l10n/printers.lisp:1.4 Wed Dec 1 12:48:40 2004 +++ cl-l10n/printers.lisp Wed Dec 8 11:02:23 2004 @@ -126,7 +126,9 @@ (cond ((and show-time show-date) (locale-d-t-fmt locale)) ((and (not show-date) (not show-time)) - (locale-t-fmt-ampm locale)) + (if (string= "" (locale-t-fmt-ampm locale)) + (locale-t-fmt locale) + (locale-t-fmt-ampm locale))) (show-time (locale-t-fmt locale)) (show-date (locale-d-fmt locale)))) @@ -356,4 +358,36 @@ (format-time stream ut show-date show-time locale fmt) ut)) + +;; Format + +(defun format (stream fmt-string &rest args) + (apply #'cl:format stream (parse-fmt-string fmt-string) args)) + +(defun parse-fmt-string (string) + (with-output-to-string (fmt-string) + (loop for char across string + with tilde = nil do + (case char + ((#\@ #\v #\, #\:) (princ char fmt-string)) + (#\~ (princ char fmt-string) + (if tilde + (setf tilde nil) + (setf tilde t))) + (t (if tilde + (progn (setf tilde nil) (princ (get-replacement char) fmt-string)) + (princ char fmt-string))))))) + +(defvar *directive-replacements* + '((#\M . "/cl-l10n:format-money/") + (#\U . "/cl-l10n:format-time/") + (#\N . "/cl-l10n:format-number/"))) + +(defun get-replacement (char) + (or (cdr (assoc (char-upcase char) *directive-replacements*)) + char)) + + + + ;; EOF Index: cl-l10n/tests.lisp diff -u cl-l10n/tests.lisp:1.1 cl-l10n/tests.lisp:1.2 --- cl-l10n/tests.lisp:1.1 Wed Dec 1 12:52:35 2004 +++ cl-l10n/tests.lisp Wed Dec 8 11:02:23 2004 @@ -1,6 +1,7 @@ ;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;; See the file LICENCE for licence information. (defpackage :cl-l10n-tests + (:shadowing-import-from :cl-l10n format) (:use :cl :regression-test :cl-l10n)) (in-package :cl-l10n-tests) @@ -132,5 +133,28 @@ (gettext "howareyou" *my-bundle* "af_ZA") "Hoe lyk it") - +;; format +(deftest format.1 + (format nil "~v:@U" "en_ZA" 3091103120) + "Sun 14 Dec 1997 17:45:20 +0200") + +(deftest format.2 + (format nil "~v:n" "en_ZA" 1000) + "1,000") + +(deftest format.3 + (format nil "~v:@m" "sv_SE" 1000) + "1000,00 SEK") + + +;; parse-number +(deftest parse-number.1 + (parse-number (format nil "~vn" "af_ZA" -1001231.5) "af_ZA") + -1001231.5) + +(deftest parse-number.2 + (parse-number (format nil "~v@:n" "en_ZA" -1001231.5) "en_ZA") + -1001231.5) + + ;; EOF