diff options
author | riton <riton@riton.home> | 2025-03-31 20:36:56 +0300 |
---|---|---|
committer | riton <riton@riton.home> | 2025-03-31 20:36:56 +0300 |
commit | ff51557326a82be19304b4c43cc9da3a4f15354f (patch) | |
tree | 3632ccad7f8e39b26b3015527cbefbd95c7b00d0 | |
parent | 30f1975be6a0b539088041c4baaa025208fe5034 (diff) |
dosyalardan, statikleri kopyala, içerikleri md -> html
-rw-r--r-- | src/ana.lisp | 51 |
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)))) + |