Plaster
New
List
Login
text
apl
aspx
asterisk
brainfuck
c
c++hdr
c++src
cassandra
ceylon
clojure
clojurescript
cmake
cobol
coffeescript
common-lisp
crystal
csharp
css
cypher-query
cython
d
dart
diff
django
dockerfile
dylan
ebnf
ecl
ecmascript
edn
eiffel
ejs
elm
erb
erlang
ez80
factor
fcl
feature
forth
fortran
fragment
gfm
go
gql
groovy
gss
haml
handlebars-template
haskell
haxe
hive
html
http
httpd-php
httpd-php-open
hxml
ini
java
javascript
json
jsp
jsx
julia
kotlin
latex
less
literate-haskell
lua
mariadb
markdown
mbox
mirc
mscgen
msgenny
mssql
mumps
mysql
n-triples
nesc
nginx-conf
nsis
objectivec
octave
oz
pascal
perl
pgp
pgp-keys
pgp-signature
pgsql
php
pig
plsql
properties
protobuf
puppet
python
q
rpm-changes
rpm-spec
rsrc
ruby
rustsrc
sas
sass
scala
scheme
scss
sieve
slim
smarty
solr
soy
sparql-query
spreadsheet
sql
squirrel
stex
styl
swift
systemverilog
tcl
textile
tiddlywiki
tiki
tlv
tornado
ttcn-asn
ttcn-cfg
turtle
twig
typescript
typescript-jsx
vb
vbscript
velocity
verilog
vertex
vhdl
vue
webidl
xml
xml-dtd
xquery
xu
yaml
z80
default
Visibility:
public
unlisted
private
#!/bin/env -S sbcl --script (require "asdf") (defparameter *template-file* #p"templates/gemlog.gmi") (defparameter *directory* (merge-pathnames #p"gemlog/") ) (defparameter *output-file* (merge-pathnames #p"index.gmi" *directory*)) ; TODO: rewrite with loop ; Thanks to this site: https://chkno.net/join.html ; Really loved the implementation of those two functions ! (defun intersperse (thing list) "Put thing between each of the elements in list. (intersperse '|,| '(1 2 3)) => (1 |,| 2 |,| 3)" (rest (mapcan (lambda (x) (list thing x)) list))) (defun intersperse-string (delimiter list) "A convient bare-string output wrapper for intersperse" (apply #'concatenate 'string (intersperse delimiter list))) (defun pathname-to-title (path) (let* ((tokens (uiop:split-string (string-trim " " (pathname-name path)) :separator "-")) (date (uiop:reduce/strcat (intersperse "-" tokens) :start 0 :end 5)) (title (string-capitalize (uiop:reduce/strcat (intersperse " " (nthcdr 3 tokens)))))) (uiop:strcat date " - " title))) (with-open-file (out *output-file* :direction :output :if-exists :supersede) (with-open-file (template *template-file* :if-does-not-exist nil) (when template (loop for line = (read-line template nil) while line do (format out "~a~%" line)))) (let ((files (directory (make-pathname :name :wild :type :wild :defaults *directory*)))) (when files (mapcar #'(lambda (f) (format out "~a~%" (pathname-to-title f))) (remove-if #'(lambda (f) (equal *output-file* f)) files)))))