#!/usr/bin/env gosh (use sxml.ssax) (use sxml.serializer) (use sxml.sxpath) (use sxml.tools) (use gauche.process) (define rooms-level-1 '(("H1-U.1" . "Lärmraum") ("H1-U.2" . "Lounge") ("H1-U.3" . "Garderobe") ("H1-U.4" . "Hauptwasseranschluss\nHauptstromkasten") ("H1-U.5" . "Toiletten") ("H1-U.6" . "Heizung") ("H1-U.7" . "Lagerbereich 1") ("H1-U.8" . "Lagerbereich 2\nRaum1") ("H1-U.9" . "Lagerbereich 2\nRaum2") ("H2-U.1" . "Strom") ("H2-U.2" . "Batterieraum") ("H2-U.3" . "Heizung") ("H2-U.4" . "Tiefgarage"))) (define rooms-level+0 '(("H1-0.1" . "Info-Point") ("H1-0.2" . "Lager/Teambereich") ("H1-0.3" . "Ausstellung\nHinführung") ("H1-0.4" . "Akkreditierung") ("H1-0.5" . "Glühweinstand") ("H2-0.1" . "Info-Wand"))) (define rooms-level+1 '(("H1-1.1" . "Lager") ("H1-1.2" . "Werkstatt") ("H1-1.3" . "VOC") ("H2-1.1" . "Toiletten") ("H2-1.2" . "Toiletten") ("H2-1.3" . "Austellungsraum 1") ("H2-1.4" . "VOC#2") ("H2-1.5" . "Teambereich") ("H2-1.6" . "Vortragsraum 1\nAhlam") ("H2-1.7" . "Nachbereitung\nFlexraum") ("H2-1.8" . "Sanitäterraum"))) (define rooms-level+2 '(("H1-2.1" . "Ruheraum\nAufenthalt") ("H1-2.2" . "Bibliothek\nSiebdruck\nKleidertausch") ("H1-2.3" . "Awareness") ("H1-2.4" . "Flexraum\nAwareness") ("H1-2.5" . "Toiletten") ("H1-2.6" . "Toiletten") ("H2-2.1" . "Toiletten") ("H2-2.2" . "Toiletten") ("H2-2.3" . "Lager") ("H2-2.4" . "Ausstellungsraum 2\nfür Kunst und Backup\nUrbane Praxis") ("H2-2.5" . "Workshopraum 1") ("H2-2.6" . "Nachbereitung\nFlexraum") ("H2-2.7" . "Ausstellungsraum 3"))) (define rooms-level+3 '(("H1-3.1" . "Austellungsraum 5") ("H1-3.2" . "Lager") ("H1-3.3" . "Lager") ("H1-3.4" . "nicht benutzbar") ("H1-3.5" . "Toiletten") ("H1-3.6" . "Toiletten") ("H2-3.1" . "Toiletten") ("H2-3.2" . "Toiletten") ("H2-3.3" . "Ausstellungsraum 4") ("H2-3.4" . "Workshopraum 2") ("H2-3.5" . "Workshopraum\nFlex") ("H2-3.6" . "Workshopraum 3") ("H2-3.7" . "Nachbereitung\nFlexraum") ("H2-3.8" . "Sponsoring Raum"))) (define rooms-level+4 '(("H1-4.1" . "Flexraum 1") ("H1-4.2" . "Flexraum 2") ("H1-4.3" . "Flexraum 3") ("H1-4.4" . "Flexraum 4") ("H1-4.5" . "Toiletten") ("H1-4.6" . "Toiletten") ("H2-4.1" . "Toiletten") ("H2-4.2" . "Toiletten") ("H2-4.3" . "Essenslager") ("H2-4.4" . "Workshopraum 4") ("H2-4.5" . "Kantine\nKüche") ("H2-4.6" . "Workshopraum\nFlex") ("H2-4.7" . "Essensbereich") ("H2-4.8" . "Stände\nMindzone\nTombola"))) (define rooms-level+5 '(("H1-5.1" . "Flexraum 5") ("H1-5.2" . "Vortragsraum 2\nBhavani") ("H1-5.3" . "Toiletten") ("H1-5.4" . "Toiletten") ("H2-5.1" . "Timeout Raum") ("H2-5.2" . "Timeout Raum\n(Küche)") ("H2-5.3" . "Timeout Raum\n(Küche)"))) (define (mk-path id) (sxpath `(// (* (@ id (equal? ,id)))))) (define (mk-element id text) (display (format "changing element with id ~a\n" id)) `((http://www.w3.org/2000/svg:text (@ (xml:space "preserve") (transform "scale(0.26458333)") (style "font-size:50px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:white;fill-opacity:1;stroke:white;stroke-linejoin:round;fill-rule:nonzero;stroke-linecap:round;stroke-opacity:1;stroke-width:0.6em") (id "anchor")) (http://www.w3.org/2000/svg:tspan (@ (y 30)) ,(string-append id ":\n" text))) (http://www.w3.org/2000/svg:text (@ (xml:space "preserve") (transform "scale(0.26458333)") (style "font-style:normal;font-weight:normal;font-size:50px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1") (id "anchor")) (http://www.w3.org/2000/svg:tspan (@ (y 30)) ,(string-append id ":\n" text))))) (define (adjust-file infile outfile alist) (display (format "building file ~a...\n" outfile)) (let* ([svg (call-with-input-file infile (lambda (port) (ssax:xml->sxml port '())))] [set-text (lambda (roomid text) (map (lambda (elem) (sxml:change-content! elem (mk-element roomid text))) ((mk-path roomid) svg)))]) (map (lambda (a) (set-text (car a) (cdr a))) alist) (call-with-output-file outfile (lambda (port) (srl:sxml->xml svg port))) )) (do-process '(mkdir -p svg)) (do-process '(mkdir -p out)) (define levels `(("Level-1" . ,rooms-level-1) ("Level+0" . ,rooms-level+0) ("Level+1" . ,rooms-level+1) ("Level+2" . ,rooms-level+2) ("Level+3" . ,rooms-level+3) ("Level+4" . ,rooms-level+4) ("Level+5" . ,rooms-level+5) )) (map (lambda (level) (adjust-file (string-append (car level) ".svg") (string-append "svg/" (car level) ".svg") (cdr level)) (do-process `(inkscape ,(string-append "svg/" (car level) ".svg") ,(string-append "--export-pdf=out/" (car level) ".pdf")))) levels) (do-process (append '(pdfunite) (map (lambda (level) (string-append "out/" (car level) ".pdf")) levels) '("out/combined.pdf")))