From ff51557326a82be19304b4c43cc9da3a4f15354f Mon Sep 17 00:00:00 2001 From: riton Date: Mon, 31 Mar 2025 20:36:56 +0300 Subject: =?UTF-8?q?dosyalardan,=20statikleri=20kopyala,=20i=C3=A7erikleri?= =?UTF-8?q?=20md=20->=20html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ana.lisp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) 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)))) + -- cgit v1.2.3