sonraki blok bulurken kod bloğunu ayrı değerlendir, baya spagetti...

This commit is contained in:
riton
2025-03-31 23:19:02 +03:00
parent 14417f67bc
commit ba8fe59c0f

View File

@@ -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 (( (search parça metin :start2 baş)))
(when (numberp )
(+ (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))