summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorriton <riton@riton.home>2025-03-31 23:19:02 +0300
committerriton <riton@riton.home>2025-03-31 23:19:02 +0300
commitba8fe59c0f39a87c36e3e0514f31fa6162024484 (patch)
tree6f76ecadb9c3f64c22ee7c2f98e3ff78c41a5162 /src
parent14417f67bce2f99d7eb8525a6aa5760dab924f9e (diff)
sonraki blok bulurken kod bloğunu ayrı değerlendir, baya spagetti...
Diffstat (limited to 'src')
-rw-r--r--src/okur.lisp38
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))