dipnot referansları eklendi
This commit is contained in:
@@ -189,9 +189,42 @@
|
|||||||
(list :href (metin-parçası okur (- son i) i)))
|
(list :href (metin-parçası okur (- son i) i)))
|
||||||
(setf i (+ 1 son)))))))
|
(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))
|
(defmethod paragraf-ayrıştır ((okur okur))
|
||||||
(with-slots (i blok-son metin) okur
|
(with-slots (i blok-son metin) okur
|
||||||
(let ((elementler (list))
|
(let ((elementler (list))
|
||||||
|
(dipnotlar (list))
|
||||||
(baş i))
|
(baş i))
|
||||||
(labels ((pushla-ve-ayrıştır (tag str)
|
(labels ((pushla-ve-ayrıştır (tag str)
|
||||||
(push (metin-parçası okur (- i baş) baş) elementler)
|
(push (metin-parçası okur (- i baş) baş) elementler)
|
||||||
@@ -200,13 +233,20 @@
|
|||||||
(setf baş i)))
|
(setf baş i)))
|
||||||
(loop :while (< i blok-son)
|
(loop :while (< i blok-son)
|
||||||
:do (case (char metin i)
|
:do (case (char metin i)
|
||||||
(#\[ (if (char= #\( (char metin (+ 1 (position #\] metin :start i))))
|
(#\[ (cond ((char= #\^ (char metin (+ 1 i)))
|
||||||
(progn
|
(push (metin-parçası okur (- i baş) baş) elementler)
|
||||||
(push (metin-parçası okur (- i baş) baş) elementler)
|
(incf i 2)
|
||||||
(incf i 1)
|
(let ((dipnot (dipnot-ayrıştır okur)))
|
||||||
(push (link-ayrıştır okur) elementler)
|
(case (tag dipnot)
|
||||||
(setf baş i))
|
(:sup (push dipnot elementler))
|
||||||
(incf i)))
|
(: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))
|
||||||
|
(t (incf i))))
|
||||||
(#\` (pushla-ve-ayrıştır :code "`"))
|
(#\` (pushla-ve-ayrıştır :code "`"))
|
||||||
(#\_ (pushla-ve-ayrıştır :i "_"))
|
(#\_ (pushla-ve-ayrıştır :i "_"))
|
||||||
(#\* (if (char= #\* (char metin (+ i 1)))
|
(#\* (if (char= #\* (char metin (+ i 1)))
|
||||||
@@ -228,7 +268,9 @@
|
|||||||
:finally (loop :while (char= #\Newline (char metin (- i 1)))
|
:finally (loop :while (char= #\Newline (char metin (- i 1)))
|
||||||
:do (decf i))
|
:do (decf i))
|
||||||
(when (/= baş 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))))))
|
(ebeveyn-node! :p (reverse elementler))))))
|
||||||
|
|
||||||
(defmethod blok-ayrıştır ((okur okur))
|
(defmethod blok-ayrıştır ((okur okur))
|
||||||
|
|||||||
Reference in New Issue
Block a user