(in-package :lojban) (defclass jbovalsi () ( (children :initarg :children :reader children) (grammar-label :initarg :grammar-label) (text :initarg :text))) (defclass text (jbovalsi) ()) (defclass cmavo (jbovalsi) ()) (defclass |BRIVLA| (jbovalsi) ()) (defclass |CMENE| (jbovalsi) ()) (defclass tanru (jbovalsi) ()) ; tanru-unit3 (defclass selbri (jbovalsi) ()) (defclass sumti (jbovalsi) ()) (defclass sentence (jbovalsi) ()) (defclass lojban-grammar-leaves (jbovalsi) ()) (defclass brivla-group (lojban-grammar-leaves) ()) (defclass |gismu| (brivla-group) ()) (defclass |fuhivla| (brivla-group) ()) (defclass |lujvo| (brivla-group) ()) (defclass |cmene| (lojban-grammar-leaves) ()) (defclass |non-lojban-word| (lojban-grammar-leaves) ()) (defclass cmavo-group (lojban-grammar-leaves) ()) (defvar *cmavo-group-symbols* '(|A| |BAI| |BAhE| |BE| |BEI| |BEhO| |BIhE| |BIhI| |BO| |BOI| |BU| |BY| |CAhA| |CAI| |CEI| |CEhE| |CO| |COI| |CU| |CUhE| |DAhO| |DOI| |DOhU| |FA| |FAhA| |FAhO| |FEhE| |FEhU| |FIhO| |FOI| |FUhA| |FUhE| |FUhO| |GA| |GAhO| |GEhU| |GI| |GIhA| |GOI| |GOhA| |GUhA| |I| |JA| |JAI| |JOhI| |JOI| |KE| |KEhE| |KEI| |KI| |KOhA| |KU| |KUhE| |KUhO| |LA| |LAU| |LAhE| |LE| |LEhU| |LI| |LIhU| |LOhO| |LOhU| |LU| |LUhU| |MAhO| |MAI| |ME| |MEhU| |MOhE| |MOhI| |MOI| |NA| |NAI| |NAhE| |NAhU| |NIhE| |NIhO| |NOI| |NU| |NUhA| |NUhI| |NUhU| |PA| |PEhE| |PEhO| |PU| |RAhO| |ROI| |SA| |SE| |SEI| |SEhU| |SI| |SOI| |SU| |TAhE| |TEhU| |TEI| |TO| |TOI| |TUhE| |TUhU| |UI| |VA| |VAU| |VEI| |VEhO| |VUhU| |VEhA| |VIhA| |VUhO| |XI| |ZAhO| |ZEhA| |ZEI| |ZI| |ZIhE| |ZO| |ZOI| |ZOhU|)) (defvar *grammar-leaf-nodes* (append '(|gismu| |cmene| |fuhivla| |lujvo| |non-lojban-word|) *cmavo-group-symbols*)) ;(setf *grammar-leaf-nodes* (append '(|gismu| |cmene| |fuhivla| |lujvo| |non-lojban-word|) *cmavo-group-symbols*)) ;(setf *grammar-leaf-nodes* nil) ;(setq foo ;(mapc (lambda (x) (insert (format "(defclass %S (cmavo-group) ())\n" x))) foo) (defclass |A| (cmavo-group) ()) (defclass |BAI| (cmavo-group) ()) (defclass |BAhE| (cmavo-group) ()) (defclass |BE| (cmavo-group) ()) (defclass |BEI| (cmavo-group) ()) (defclass |BEhO| (cmavo-group) ()) (defclass |BIhE| (cmavo-group) ()) (defclass |BIhI| (cmavo-group) ()) (defclass |BO| (cmavo-group) ()) (defclass |BOI| (cmavo-group) ()) (defclass |BU| (cmavo-group) ()) (defclass |BY| (cmavo-group) ()) (defclass |CAhA| (cmavo-group) ()) (defclass |CAI| (cmavo-group) ()) (defclass |CEI| (cmavo-group) ()) (defclass |CEhE| (cmavo-group) ()) (defclass |CO| (cmavo-group) ()) (defclass |COI| (cmavo-group) ()) (defclass |CU| (cmavo-group) ()) (defclass |CUhE| (cmavo-group) ()) (defclass |DAhO| (cmavo-group) ()) (defclass |DOI| (cmavo-group) ()) (defclass |DOhU| (cmavo-group) ()) (defclass |FA| (cmavo-group) ()) (defclass |FAhA| (cmavo-group) ()) (defclass |FAhO| (cmavo-group) ()) (defclass |FEhE| (cmavo-group) ()) (defclass |FEhU| (cmavo-group) ()) (defclass |FIhO| (cmavo-group) ()) (defclass |FOI| (cmavo-group) ()) (defclass |FUhA| (cmavo-group) ()) (defclass |FUhE| (cmavo-group) ()) (defclass |FUhO| (cmavo-group) ()) (defclass |GA| (cmavo-group) ()) (defclass |GAhO| (cmavo-group) ()) (defclass |GEhU| (cmavo-group) ()) (defclass |GI| (cmavo-group) ()) (defclass |GIhA| (cmavo-group) ()) (defclass |GOI| (cmavo-group) ()) (defclass |GOhA| (cmavo-group) ()) (defclass |GUhA| (cmavo-group) ()) (defclass |I| (cmavo-group) ()) (defclass |JA| (cmavo-group) ()) (defclass |JAI| (cmavo-group) ()) (defclass |JOhI| (cmavo-group) ()) (defclass |JOI| (cmavo-group) ()) (defclass |KE| (cmavo-group) ()) (defclass |KEhE| (cmavo-group) ()) (defclass |KEI| (cmavo-group) ()) (defclass |KI| (cmavo-group) ()) (defclass |KOhA| (cmavo-group) ()) (defclass |KU| (cmavo-group) ()) (defclass |KUhE| (cmavo-group) ()) (defclass |KUhO| (cmavo-group) ()) (defclass |LA| (cmavo-group) ()) (defclass |LAU| (cmavo-group) ()) (defclass |LAhE| (cmavo-group) ()) (defclass |LE| (cmavo-group) ()) (defclass |LEhU| (cmavo-group) ()) (defclass |LI| (cmavo-group) ()) (defclass |LIhU| (cmavo-group) ()) (defclass |LOhO| (cmavo-group) ()) (defclass |LOhU| (cmavo-group) ()) (defclass |LU| (cmavo-group) ()) (defclass |LUhU| (cmavo-group) ()) (defclass |MAhO| (cmavo-group) ()) (defclass |MAI| (cmavo-group) ()) (defclass |ME| (cmavo-group) ()) (defclass |MEhU| (cmavo-group) ()) (defclass |MOhE| (cmavo-group) ()) (defclass |MOhI| (cmavo-group) ()) (defclass |MOI| (cmavo-group) ()) (defclass |NA| (cmavo-group) ()) (defclass |NAI| (cmavo-group) ()) (defclass |NAhE| (cmavo-group) ()) (defclass |NAhU| (cmavo-group) ()) (defclass |NIhE| (cmavo-group) ()) (defclass |NIhO| (cmavo-group) ()) (defclass |NOI| (cmavo-group) ()) (defclass |NU| (cmavo-group) ()) (defclass |NUhA| (cmavo-group) ()) (defclass |NUhI| (cmavo-group) ()) (defclass |NUhU| (cmavo-group) ()) (defclass |PA| (cmavo-group) ()) (defclass |PEhE| (cmavo-group) ()) (defclass |PEhO| (cmavo-group) ()) (defclass |PU| (cmavo-group) ()) (defclass |RAhO| (cmavo-group) ()) (defclass |ROI| (cmavo-group) ()) (defclass |SA| (cmavo-group) ()) (defclass |SE| (cmavo-group) ()) (defclass |SEI| (cmavo-group) ()) (defclass |SEhU| (cmavo-group) ()) (defclass |SI| (cmavo-group) ()) (defclass |SOI| (cmavo-group) ()) (defclass |SU| (cmavo-group) ()) (defclass |TAhE| (cmavo-group) ()) (defclass |TEhU| (cmavo-group) ()) (defclass |TEI| (cmavo-group) ()) (defclass |TO| (cmavo-group) ()) (defclass |TOI| (cmavo-group) ()) (defclass |TUhE| (cmavo-group) ()) (defclass |TUhU| (cmavo-group) ()) (defclass |UI| (cmavo-group) ()) (defclass |VA| (cmavo-group) ()) (defclass |VAU| (cmavo-group) ()) (defclass |VEI| (cmavo-group) ()) (defclass |VEhO| (cmavo-group) ()) (defclass |VUhU| (cmavo-group) ()) (defclass |VEhA| (cmavo-group) ()) (defclass |VIhA| (cmavo-group) ()) (defclass |VUhO| (cmavo-group) ()) (defclass |XI| (cmavo-group) ()) (defclass |ZAhO| (cmavo-group) ()) (defclass |ZEhA| (cmavo-group) ()) (defclass |ZEI| (cmavo-group) ()) (defclass |ZI| (cmavo-group) ()) (defclass |ZIhE| (cmavo-group) ()) (defclass |ZO| (cmavo-group) ()) (defclass |ZOI| (cmavo-group) ()) (defclass |ZOhU| (cmavo-group) ()) ; gismu lookup (defvar *gismu-file* "/usr/share/lojban/gismu.txt") (defvar *cmavo-file* "/usr/share/lojban/cmavo.txt") (defvar *gismu-map* nil) (defvar *cmavo-map* nil) (defun initialize-gismu () (if (null *gismu-map*) (progn (setf *gismu-map* (make-hash-table)) (with-open-file (file *gismu-file* :direction :input) (do ((line (read-line file) (read-line file nil nil))) ((null line)) (let ((gismu (subseq line 1 6)) (rafsi1 (subseq line 7 11)) (rafsi2 (subseq line 11 15)) (rafsi3 (subseq line 15 19)) (gloss (subseq line 20 37))) ; (format t "~a ~s ~s ~s~%" gismu rafsi1 rafsi2 rafsi3) (setf (gethash (intern (string-trim " " (string-downcase gismu))) *gismu-map*) (list (string-trim " " gismu) rafsi1 rafsi2 rafsi3 (string-trim " " gloss))) )))))) (defun initialize-cmavo () (if (null *cmavo-map*) (progn (setf *cmavo-map* (make-hash-table)) (with-open-file (file *cmavo-file* :direction :input) (do ((line (read-line file) (read-line file nil nil))) ((null line)) (let ((cmavo (subseq line 1 10)) (class (subseq line 11 19)) (gloss (subseq line 20 61))) ; (descrip (subseq line 62 167)) ; (format t "~s ~s ~s~%" cmavo class gloss) (setf (gethash (intern (string-trim " " (string-downcase cmavo))) *cmavo-map*) (list (string-trim " " cmavo) class (string-trim " " gloss))) )))))) (defun lookup-gismu (gismu) (initialize-gismu) (let ((lookup (gethash (intern (string-downcase gismu)) *gismu-map*))) (if (null lookup) (concatenate 'string "<>! " gismu) (nth 4 lookup)))) ; cmavo lookup (defun lookup-cmavo (cmavo) (initialize-cmavo) (let ((lookup (gethash (intern (string-trim " " (string-downcase cmavo))) *cmavo-map*))) (if (null lookup) (concatenate 'string "<>! " cmavo) (nth 2 lookup))))