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*))