summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorriton <riton@riton.home>2025-03-31 20:36:56 +0300
committerriton <riton@riton.home>2025-03-31 20:36:56 +0300
commitff51557326a82be19304b4c43cc9da3a4f15354f (patch)
tree3632ccad7f8e39b26b3015527cbefbd95c7b00d0
parent30f1975be6a0b539088041c4baaa025208fe5034 (diff)
dosyalardan, statikleri kopyala, içerikleri md -> html
-rw-r--r--src/ana.lisp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ana.lisp b/src/ana.lisp
index 4b74169..1a226bc 100644
--- a/src/ana.lisp
+++ b/src/ana.lisp
@@ -20,6 +20,7 @@
(node->html (şablon-yap node) stream))
(defun markdown->html (kaynak hedef)
+ (format t "~s -> ~s~%" kaynak hedef)
(let ((okur (okur! kaynak)))
(let ((root (markdown-ayrıştır okur))
(*print-case* :downcase))
@@ -28,9 +29,59 @@
:if-exists :supersede)
(şablonlu-yazdır root dış)))))
+(defun md-dosyası? (yol)
+ (or (string= "md" (pathname-type yol))
+ (string= "markdown" (pathname-type yol))))
+
+(defun tip-değiştir (yol yeni-tip)
+ (make-pathname :type yeni-tip :defaults yol))
+
+(defun mod-zamanı (dosya)
+ (sb-posix:stat-mtime (sb-posix:stat dosya)))
+
+(defun dosya-var? (dosya)
+ (uiop:file-exists-p dosya))
+
+(defun dönüştürmeli? (kaynak hedef)
+ "Kaynak dosyadan hedef dosya oluşturulmalı mı ?
+Markdown dosyası değişmediyse yeniden oluşturma."
+ (or (not (dosya-var? hedef))
+ (> (mod-zamanı kaynak)
+ (mod-zamanı hedef))))
+
+(defun yol-çeviri (yol kaynak-kök hedef-kök)
+ (merge-pathnames (uiop:enough-pathname yol kaynak-kök)
+ hedef-kök))
+
+(defun dosya-kopyala (kaynak hedef)
+ (uiop:copy-file kaynak hedef)
+ (format t "~s -> ~s~%" kaynak hedef))
+
+(defun dizin-kopyala (kaynak hedef)
+ (ensure-directories-exist hedef)
+ (mapc (lambda (yol)
+ (dosya-kopyala yol (yol-çeviri yol kaynak hedef)))
+ (uiop:directory-files kaynak))
+ (loop :for d :in (uiop:subdirectories kaynak)
+ :do (dizin-kopyala d (yol-çeviri d kaynak hedef))))
+
+(declaim (ftype (function (pathname pathname pathname)) tamamen-üret))
+(defun tamamen-üret (statik içerik hedef) ;; isim skill issue
+ (assert (and (uiop:directory-exists-p statik)
+ (uiop:directory-exists-p içerik)))
+ (ensure-directories-exist hedef)
+ (dizin-kopyala statik hedef)
+ (loop :for dosya :in (uiop:directory-files içerik)
+ :do (when (md-dosyası? dosya)
+ (let ((html-dosyası (tip-değiştir (yol-çeviri dosya içerik hedef)
+ "html")))
+ (when (dönüştürmeli? dosya html-dosyası)
+ (markdown->html dosya html-dosyası))))))
+
(defun ana ()
(let ((args sb-ext:*posix-argv*))
(assert (= 3 (length args)))
(let ((kaynak (nth 1 args))
(hedef (nth 2 args)))
(markdown->html kaynak hedef))))
+