diff options
author | riton <riton@riton.home> | 2025-03-31 23:19:02 +0300 |
---|---|---|
committer | riton <riton@riton.home> | 2025-03-31 23:19:02 +0300 |
commit | ba8fe59c0f39a87c36e3e0514f31fa6162024484 (patch) | |
tree | 6f76ecadb9c3f64c22ee7c2f98e3ff78c41a5162 /src | |
parent | 14417f67bce2f99d7eb8525a6aa5760dab924f9e (diff) |
sonraki blok bulurken kod bloğunu ayrı değerlendir, baya spagetti...
Diffstat (limited to 'src')
-rw-r--r-- | src/okur.lisp | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/okur.lisp b/src/okur.lisp index 108d648..fe983c5 100644 --- a/src/okur.lisp +++ b/src/okur.lisp @@ -45,19 +45,40 @@ (defmethod blok-reset ((okur 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 "~%~%"))) (defmethod sonraki-blok ((okur okur)) "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)) (with-slots (i uzunluk metin blok-son blok-baş) okur - (let ((önceki-son blok-son) - (yeni-son (search blok-sonu metin :start2 blok-son)) - ;; TODO kod bloğunun içinde yeni blok oluşmadan 2 yeni satır olabilir - ) - (setf blok-son (if (numberp yeni-son) - (+ 2 yeni-son) - uzunluk) - blok-baş önceki-son ;; TODO blok başındaki boşluk ve yeni satırları geç + (let ((yeni-baş (progn (setf i blok-son) + (loop :for ch := (bak okur) + :while (and ch + (or (char= #\Newline ch) + (char= #\Space ch))) + :do (incf i) + :finally (return i)))) + (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ş)))))) (defmethod boşluk-yut ((okur okur)) @@ -201,7 +222,6 @@ (defmethod blok-ayrıştır ((okur okur)) (when (sonraki-blok okur) (with-slots (i metin) okur - (boşluk-yut okur) (case (char metin i) (#\# (ayrıştır okur :h)) (#\- (ayrıştır okur :ul)) |