sonraki blok bulurken kod bloğunu ayrı değerlendir, baya spagetti...
This commit is contained in:
@@ -45,19 +45,40 @@
|
|||||||
(defmethod blok-reset ((okur okur))
|
(defmethod blok-reset ((okur okur))
|
||||||
(setf (i okur) (blok-baş okur)))
|
(setf (i okur) (blok-baş okur)))
|
||||||
|
|
||||||
|
(defmethod bak ((okur okur))
|
||||||
|
(and (not (son? okur (i okur)))
|
||||||
|
(char (metin okur) (i okur))))
|
||||||
|
|
||||||
|
(defmethod ye ((okur okur))
|
||||||
|
(with-slots (metin i) okur
|
||||||
|
(and (son? okur i)
|
||||||
|
(prog1 (char metin i)
|
||||||
|
(incf i)))))
|
||||||
|
|
||||||
|
(defun son-ara (parça metin baş)
|
||||||
|
(let ((eş (search parça metin :start2 baş)))
|
||||||
|
(when (numberp eş)
|
||||||
|
(+ eş (length parça)))))
|
||||||
|
|
||||||
(let ((blok-sonu (format nil "~%~%")))
|
(let ((blok-sonu (format nil "~%~%")))
|
||||||
(defmethod sonraki-blok ((okur okur))
|
(defmethod sonraki-blok ((okur okur))
|
||||||
"blok-baş ve blok-son indexlerinin atamasını yapar. Başka blok kalmadıysa nil döndürür."
|
"blok-baş ve blok-son indexlerinin atamasını yapar. Başka blok kalmadıysa nil döndürür."
|
||||||
(unless (son? okur (blok-son okur))
|
(unless (son? okur (blok-son okur))
|
||||||
(with-slots (i uzunluk metin blok-son blok-baş) okur
|
(with-slots (i uzunluk metin blok-son blok-baş) okur
|
||||||
(let ((önceki-son blok-son)
|
(let ((yeni-baş (progn (setf i blok-son)
|
||||||
(yeni-son (search blok-sonu metin :start2 blok-son))
|
(loop :for ch := (bak okur)
|
||||||
;; TODO kod bloğunun içinde yeni blok oluşmadan 2 yeni satır olabilir
|
:while (and ch
|
||||||
)
|
(or (char= #\Newline ch)
|
||||||
(setf blok-son (if (numberp yeni-son)
|
(char= #\Space ch)))
|
||||||
(+ 2 yeni-son)
|
:do (incf i)
|
||||||
uzunluk)
|
:finally (return i))))
|
||||||
blok-baş önceki-son ;; TODO blok başındaki boşluk ve yeni satırları geç
|
(yeni-son (or (if (string= "```" metin :start2 i :end2 (+ i 3))
|
||||||
|
(progn (setf i (son-ara "```" metin (+ i 3)))
|
||||||
|
(son-ara blok-sonu metin i))
|
||||||
|
(son-ara blok-sonu metin i))
|
||||||
|
uzunluk)))
|
||||||
|
(setf blok-son yeni-son
|
||||||
|
blok-baş yeni-baş
|
||||||
i blok-baş))))))
|
i blok-baş))))))
|
||||||
|
|
||||||
(defmethod boşluk-yut ((okur okur))
|
(defmethod boşluk-yut ((okur okur))
|
||||||
@@ -201,7 +222,6 @@
|
|||||||
(defmethod blok-ayrıştır ((okur okur))
|
(defmethod blok-ayrıştır ((okur okur))
|
||||||
(when (sonraki-blok okur)
|
(when (sonraki-blok okur)
|
||||||
(with-slots (i metin) okur
|
(with-slots (i metin) okur
|
||||||
(boşluk-yut okur)
|
|
||||||
(case (char metin i)
|
(case (char metin i)
|
||||||
(#\# (ayrıştır okur :h))
|
(#\# (ayrıştır okur :h))
|
||||||
(#\- (ayrıştır okur :ul))
|
(#\- (ayrıştır okur :ul))
|
||||||
|
|||||||
Reference in New Issue
Block a user