anchor.diff:     ))
   
   (defun word-info-json (word-info)
  -  (with-slots (type text kana seq conjugations score components alternative primary start end)
  +  (with-slots (type text true-text kana seq conjugations score components alternative primary start end)
         word-info
       (jsown:new-js
         ("type" (symbol-name type))
         ("text" text)
  +      ("truetext" true-text)
         ("kana" kana)
         ("seq" seq)
         ("conjugations" (if (eql conjugations :root) "ROOT" conjugations))
  
positive.code:           when (> i 1) do (terpri s)
            do (format s "~a. ~a ~@[《~a》 ~]~a" i rpos rinf gloss))))
  
  (defun split-pos (pos-str)
    (split-sequence #\, pos-str :start 1 :end (1- (length pos-str))))
  
  (defun get-senses-json (seq &key pos-list)
    (loop for (pos gloss props) in (get-senses seq)
       for emptypos = (equal pos "[]")
       for rpos = pos then (if emptypos rpos pos)
       for lpos = (split-pos pos) then (if emptypos lpos (split-pos pos))
       for inf = (cdr (assoc "s_inf" props :test 'equal))
       for rinf = (when inf (format nil "《~{~a~^; ~}》" inf))
       when (or (not pos-list) (intersection lpos pos-list :test 'equal))
       collect (let ((js (jsown:new-js ("pos" rpos) ("gloss" gloss))))
                 (if rinf (jsown:extend-js js ("info" rinf)))
                 js)))
  
negative.code: (defclass word-info ()
    ((type :initarg :type :accessor word-info-type)
     (text :initarg :text :accessor word-info-text)
     (true-text :initarg :true-text :initform nil :accessor word-info-true-text)
     (kana :initarg :kana :accessor word-info-kana)
     (seq :initarg :seq :initform nil :accessor word-info-seq)
     (conjugations :initarg :conjugations :initform nil :accessor word-info-conjugations)
  