Recently Written · git

cl-yag

Mirror and rewrite of Solène Rapenne's cl-yag SSG of renown

git clone https://github.com/equwal/cl-yag

Log | Files | Refs


generator-aux-pre.lisp (2513 bytes)

1 (in-package #:cl-yag)
2 
3 ;;;; GLOBAL VARIABLES
4 
5 (defvar *config* '())
6 (defvar *generators* '())
7 
8 (defparameter *articles* '())
9 (defparameter *converters* '())
10 (defparameter *days* '("Monday" "Tuesday" "Wednesday" "Thursday"
11                        "Friday" "Saturday" "Sunday"))
12 (defparameter *months* '("January" "February" "March" "April"
13                          "May" "June" "July" "August" "September"
14                          "October" "November" "December"))
15 
16 ;; structure to store links
17 (defstruct article title tag date id tiny author rawdate converter)
18 (defstruct converter name command extension)
19 (defstruct generator key create-site-fn)
20 
21 ;;;; FUNCTIONS
22 
23 (require 'asdf)
24 
25 (defun post(&optional &key title tag date id (tiny nil) (author (getf *config* :webmaster)) (converter nil))
26   (push (make-article :title title
27                       :tag tag
28                       :date (date-parse date)
29                       :rawdate date
30                       :tiny tiny
31                       :author author
32                       :id id
33                       :converter converter)
34         *articles*))
35 
36 (defun converter(&optional &key name command extension)
37   "Add a converter to the list of those available."
38   (setf *converters*
39         (append
40          (list name
41                (make-converter :name name
42                                :command command
43                                :extension extension))
44          *converters*)))
45 
46 (defun get-day-of-week(day month year)
47   "Return the day of the week."
48   (multiple-value-bind
49    (second minute hour date month year day-of-week dst-p tz)
50    (decode-universal-time (encode-universal-time 0 0 0 day month year))
51    (declare (ignore second minute hour date month year dst-p tz))
52    day-of-week))
53 
54 (defun date-parse(date)
55   "Parse a date into components."
56   (if (= 8 (length date))
57       (let* ((year     (parse-integer date :start 0 :end 4))
58              (monthnum (parse-integer date :start 4 :end 6))
59              (daynum   (parse-integer date :start 6 :end 8))
60              (day      (nth (get-day-of-week daynum monthnum year) *days*))
61              (month    (nth (- monthnum 1) *months*)))
62         (list
63          :dayname day
64          :daynumber daynum
65          :monthname month
66          :monthnumber monthnum
67          :year year))
68     nil))
69 
70 ;; we add a generator to the list of available ones
71 (defun register-generator(&key key create-site-fn)
72   (push (make-generator :key key
73                        :create-site-fn create-site-fn)
74         *generators*))