dipnot referansları eklendi
This commit is contained in:
@@ -189,9 +189,42 @@
|
||||
(list :href (metin-parçası okur (- son i) i)))
|
||||
(setf i (+ 1 son)))))))
|
||||
|
||||
(defparameter *dipnot-limit* 36)
|
||||
(defparameter *dipnotlar*
|
||||
(make-array *dipnot-limit* :element-type 'bit :initial-element 0))
|
||||
|
||||
(defun dipnot-var? (n)
|
||||
(= 1 (aref *dipnotlar* n)))
|
||||
|
||||
(defun dipnot-ata (n)
|
||||
(setf (aref *dipnotlar* n) #b1))
|
||||
|
||||
(defmethod dipnot-ayrıştır ((okur okur))
|
||||
(declare (optimize (debug 3) (safety 3)))
|
||||
(with-slots (i metin blok-son) okur
|
||||
(let* ((son (position #\] metin
|
||||
:start i
|
||||
:end blok-son))
|
||||
(n (parse-integer metin :start i :end son)))
|
||||
(prog1 (if (dipnot-var? n)
|
||||
(ebeveyn-node! :li
|
||||
(list (let ((baş (+ 1 son)))
|
||||
(assert (char= (char metin baş) #\:))
|
||||
(setf son (or (position #\Newline metin :start baş :end blok-son) blok-son))
|
||||
(metin-parçası okur (- son baş 1) (+ baş 1)))
|
||||
(çocuk-node! :a " ↩" (list :href (format nil "#dipnot-ref-~d" n))))
|
||||
(list :id (format nil "dipnot-~d" n)))
|
||||
(progn (dipnot-ata n)
|
||||
(ebeveyn-node! :sup
|
||||
(list (çocuk-node! :a (metin-parçası okur (- son i) i)
|
||||
(list :href (format nil "#dipnot-~d" n)
|
||||
:id (format nil "dipnot-ref-~d" n)))))))
|
||||
(setf i (min blok-son (+ son 1)))))))
|
||||
|
||||
(defmethod paragraf-ayrıştır ((okur okur))
|
||||
(with-slots (i blok-son metin) okur
|
||||
(let ((elementler (list))
|
||||
(dipnotlar (list))
|
||||
(baş i))
|
||||
(labels ((pushla-ve-ayrıştır (tag str)
|
||||
(push (metin-parçası okur (- i baş) baş) elementler)
|
||||
@@ -200,13 +233,20 @@
|
||||
(setf baş i)))
|
||||
(loop :while (< i blok-son)
|
||||
:do (case (char metin i)
|
||||
(#\[ (if (char= #\( (char metin (+ 1 (position #\] metin :start i))))
|
||||
(progn
|
||||
(#\[ (cond ((char= #\^ (char metin (+ 1 i)))
|
||||
(push (metin-parçası okur (- i baş) baş) elementler)
|
||||
(incf i 2)
|
||||
(let ((dipnot (dipnot-ayrıştır okur)))
|
||||
(case (tag dipnot)
|
||||
(:sup (push dipnot elementler))
|
||||
(:li (push dipnot dipnotlar))))
|
||||
(setf baş i))
|
||||
((char= #\( (char metin (+ 1 (position #\] metin :start i))))
|
||||
(push (metin-parçası okur (- i baş) baş) elementler)
|
||||
(incf i 1)
|
||||
(push (link-ayrıştır okur) elementler)
|
||||
(setf baş i))
|
||||
(incf i)))
|
||||
(t (incf i))))
|
||||
(#\` (pushla-ve-ayrıştır :code "`"))
|
||||
(#\_ (pushla-ve-ayrıştır :i "_"))
|
||||
(#\* (if (char= #\* (char metin (+ i 1)))
|
||||
@@ -228,7 +268,9 @@
|
||||
:finally (loop :while (char= #\Newline (char metin (- i 1)))
|
||||
:do (decf i))
|
||||
(when (/= baş i)
|
||||
(push (metin-parçası okur (- i baş) baş) elementler)))
|
||||
(push (metin-parçası okur (- i baş) baş) elementler))
|
||||
(when (not (null dipnotlar))
|
||||
(push (ebeveyn-node! :ol (reverse dipnotlar)) elementler)))
|
||||
(ebeveyn-node! :p (reverse elementler))))))
|
||||
|
||||
(defmethod blok-ayrıştır ((okur okur))
|
||||
|
||||
Reference in New Issue
Block a user