0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 ;; Copyright 200
0010: 37 2d 32 30 31 30 2c 20 4d 61 74 74 68 65 77 20 7-2010, Matthew
0020: 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 0a 3b 3b 20 20 Welland..;;.;;
0030: 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 This program is
0040: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 75 made available u
0050: 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47 50 4c nder the GNU GPL
0060: 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f 72 0a version 2.0 or.
0070: 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53 65 65 ;; greater. See
0080: 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e the accompanyin
0090: 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47 20 66 g file COPYING f
00a0: 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b 0a 3b or details..;;.;
00b0: 3b 20 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 ; This program
00c0: 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 57 is distributed W
00d0: 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 ITHOUT ANY WARRA
00e0: 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 NTY; without eve
00f0: 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70 6c 69 65 n the.;; implie
0100: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 20 4d 45 d warranty of ME
0110: 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 RCHANTABILITY or
0120: 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20 50 FITNESS FOR A P
0130: 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20 20 50 55 ARTICULAR.;; PU
0140: 52 50 4f 53 45 2e 0a 0a 3b 3b 20 74 77 69 6b 69 RPOSE...;; twiki
0150: 20 6d 6f 64 75 6c 65 0a 28 72 65 71 75 69 72 65 module.(require
0160: 2d 65 78 74 65 6e 73 69 6f 6e 20 73 71 6c 69 74 -extension sqlit
0170: 65 33 20 72 65 67 65 78 20 70 6f 73 69 78 20 6d e3 regex posix m
0180: 64 35 20 62 61 73 65 36 34 29 0a 28 69 6d 70 6f d5 base64).(impo
0190: 72 74 20 28 70 72 65 66 69 78 20 62 61 73 65 36 rt (prefix base6
01a0: 34 20 62 61 73 65 36 34 3a 29 29 0a 0a 3b 3b 20 4 base64:))..;;
01b0: 54 4f 44 4f 0a 3b 3b 0a 3b 3b 20 2a 20 49 6e 6c TODO.;;.;; * Inl
01c0: 69 6e 65 20 74 69 64 64 6c 65 72 73 20 5b 69 6e ine tiddlers [in
01d0: 6c 69 6e 65 5b 54 69 64 64 6c 65 72 4e 61 6d 65 line[TiddlerName
01e0: 5d 5d 0a 3b 3b 20 2a 20 50 69 63 73 20 20 20 20 ]].;; * Pics
01f0: 20 20 20 20 20 20 20 20 5b 70 69 63 20 58 20 59 [pic X Y
0200: 5b 70 69 63 6e 61 6d 65 2e 6a 70 67 5d 5d 0a 3b [picname.jpg]].;
0210: 3b 20 2a 20 4d 6f 76 65 20 74 77 69 6b 69 20 70 ; * Move twiki p
0220: 61 72 73 69 6e 67 2f 65 78 70 61 6e 64 69 6e 67 arsing/expanding
0230: 20 74 6f 20 6d 61 74 74 73 75 74 69 6c 73 20 61 to mattsutils a
0240: 73 20 6c 6f 61 64 61 62 6c 65 20 6d 6f 64 75 6c s loadable modul
0250: 65 0a 0a 3b 3b 20 52 6f 75 74 69 6e 65 73 20 69 e..;; Routines i
0260: 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 6f 76 ntended to be ov
0270: 65 72 72 69 64 64 65 6e 20 62 79 20 65 6e 64 20 erridden by end
0280: 75 73 65 72 73 0a 3b 3b 20 20 28 74 77 69 6b 69 users.;; (twiki
0290: 3a 61 63 63 65 73 73 20 6b 65 79 73 20 77 69 6b :access keys wik
02a0: 69 2d 6e 61 6d 65 20 75 73 65 72 2d 69 64 29 0a i-name user-id).
02b0: 3b 3b 20 73 65 61 72 63 68 20 74 68 65 20 63 6f ;; search the co
02c0: 64 65 20 66 6f 72 20 22 6f 76 65 72 72 69 64 65 de for "override
02d0: 22 20 66 6f 72 20 6d 6f 72 65 2e 0a 0a 3b 3b 20 " for more...;;
02e0: 74 77 69 6b 69 20 63 73 73 0a 3b 3b 20 3d 3d 3d twiki css.;; ===
02f0: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 42 6c 6f 63 6b 20 ======.;; Block
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
0310: 61 67 0a 3b 3b 20 2d 2d 2d 2d 2d 20 20 20 20 20 ag.;; -----
0320: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 2d 0a 3b ---.;
0330: 3b 20 74 77 69 6b 69 20 20 20 20 20 20 20 20 20 ; twiki
0340: 20 20 20 20 20 20 20 74 77 69 6b 69 0a 3b 3b 20 twiki.;;
0350: 74 77 69 6b 69 20 62 6f 64 79 20 64 69 76 20 20 twiki body div
0360: 20 20 20 20 20 74 77 69 6b 69 2d 6e 6f 64 65 0a twiki-node.
0370: 3b 3b 20 74 77 69 6b 69 20 6d 61 69 6e 20 6d 65 ;; twiki main me
0380: 6e 75 20 20 20 20 20 20 74 77 69 6b 69 2d 6d 61 nu twiki-ma
0390: 69 6e 2d 6d 65 6e 75 0a 0a 3b 3b 20 54 68 69 73 in-menu..;; This
03a0: 20 69 73 20 74 68 65 20 63 75 72 72 65 6e 74 6c is the currentl
03b0: 79 20 73 75 70 70 6f 72 74 65 64 20 6d 65 63 68 y supported mech
03c0: 61 6e 69 73 6d 2e 20 50 6f 73 74 67 72 65 73 20 anism. Postgres
03d0: 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20 6c 61 will be added la
03e0: 74 65 72 20 2d 6d 72 77 2d 20 37 2f 32 36 2f 32 ter -mrw- 7/26/2
03f0: 30 30 39 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 009.;;.(define (
0400: 74 77 69 6b 69 3a 6f 70 65 6e 2d 64 62 20 6b 65 twiki:open-db ke
0410: 79 20 2e 20 63 72 65 61 74 65 2d 6e 6f 74 2d 6f y . create-not-o
0420: 6b 29 0a 20 20 3b 3b 20 28 73 3a 6c 6f 67 20 22 k). ;; (s:log "
0430: 47 6f 74 20 74 6f 20 74 77 69 6b 69 3a 6f 70 65 Got to twiki:ope
0440: 6e 2d 64 62 20 77 69 74 68 20 6b 65 79 3a 20 22 n-db with key: "
0450: 20 6b 65 79 29 0a 20 20 28 6c 65 74 2a 20 28 28 key). (let* ((
0460: 63 72 65 61 74 65 2d 6f 6b 20 28 69 66 20 28 6e create-ok (if (n
0470: 75 6c 6c 3f 20 63 72 65 61 74 65 2d 6e 6f 74 2d ull? create-not-
0480: 6f 6b 29 20 23 74 20 28 63 61 72 20 63 72 65 61 ok) #t (car crea
0490: 74 65 2d 6e 6f 74 2d 6f 6b 29 29 29 0a 09 20 28 te-not-ok))).. (
04a0: 66 64 61 74 20 20 20 20 20 20 28 74 77 69 6b 69 fdat (twiki
04b0: 3a 6b 65 79 2d 3e 66 6e 61 6d 65 20 6b 65 79 29 :key->fname key)
04c0: 29 0a 09 20 28 62 61 73 65 70 61 74 68 20 20 28 ).. (basepath (
04d0: 73 64 61 74 2d 67 65 74 2d 74 77 69 6b 69 64 69 sdat-get-twikidi
04e0: 72 20 73 3a 73 65 73 73 69 6f 6e 29 29 0a 09 20 r s:session))..
04f0: 28 66 70 61 74 68 20 20 20 20 20 28 63 61 72 20 (fpath (car
0500: 66 64 61 74 29 29 0a 09 20 28 66 6e 61 6d 65 20 fdat)).. (fname
0510: 20 20 20 20 28 63 61 64 72 20 66 64 61 74 29 29 (cadr fdat))
0520: 0a 09 20 28 66 75 6c 6c 6e 61 6d 65 20 20 28 63 .. (fullname (c
0530: 6f 6e 63 20 62 61 73 65 70 61 74 68 20 22 2f 22 onc basepath "/"
0540: 20 66 70 61 74 68 20 22 2f 22 20 66 6e 61 6d 65 fpath "/" fname
0550: 29 29 0a 09 20 28 66 65 78 69 73 74 73 20 20 20 )).. (fexists
0560: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 66 75 (file-exists? fu
0570: 6c 6c 6e 61 6d 65 29 29 0a 09 20 28 64 62 20 20 llname)).. (db
0580: 20 20 20 20 20 20 28 69 66 20 66 65 78 69 73 74 (if fexist
0590: 73 20 28 64 62 69 3a 6f 70 65 6e 20 27 73 71 6c s (dbi:open 'sql
05a0: 69 74 65 33 20 28 6c 69 73 74 20 28 63 6f 6e 73 ite3 (list (cons
05b0: 20 27 64 62 6e 61 6d 65 20 66 75 6c 6c 6e 61 6d 'dbname fullnam
05c0: 65 29 29 29 20 23 66 29 29 29 0a 20 20 20 20 28 e))) #f))). (
05d0: 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 64 62 29 if (and (not db)
05e0: 0a 09 20 20 20 20 20 28 6e 6f 74 20 63 72 65 61 .. (not crea
05f0: 74 65 2d 6f 6b 29 29 0a 09 28 65 78 69 74 20 31 te-ok))..(exit 1
0600: 30 30 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 00)..(begin.. (
0610: 69 66 20 28 6e 6f 74 20 66 65 78 69 73 74 73 29 if (not fexists)
0620: 0a 09 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09 .. (begin..
0630: 09 3b 3b 20 28 70 72 69 6e 74 20 22 66 75 6c 6c .;; (print "full
0640: 6e 61 6d 65 3a 20 22 20 66 75 6c 6c 6e 61 6d 65 name: " fullname
0650: 29 0a 09 09 28 74 77 69 6b 69 3a 72 65 67 69 73 )...(twiki:regis
0660: 74 65 72 2d 77 69 6b 69 20 6b 65 79 20 66 75 6c ter-wiki key ful
0670: 6c 6e 61 6d 65 29 0a 09 09 28 73 79 73 74 65 6d lname)...(system
0680: 20 28 63 6f 6e 63 20 22 6d 6b 64 69 72 20 2d 70 (conc "mkdir -p
0690: 20 22 20 66 70 61 74 68 29 29 20 3b 3b 20 63 72 " fpath)) ;; cr
06a0: 65 61 74 65 20 74 68 65 20 70 61 74 68 0a 09 09 eate the path...
06b0: 28 69 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 (if (file-exists
06c0: 3f 20 66 70 61 74 68 29 0a 09 09 20 20 20 20 28 ? fpath)... (
06d0: 73 3a 6c 6f 67 20 22 4f 4b 3a 20 64 69 72 20 22 s:log "OK: dir "
06e0: 20 66 70 61 74 68 20 22 20 68 61 73 20 62 65 65 fpath " has bee
06f0: 6e 20 6d 61 64 65 22 29 0a 09 09 20 20 20 20 28 n made")... (
0700: 73 3a 6c 6f 67 20 22 45 52 52 4f 52 3a 20 46 61 s:log "ERROR: Fa
0710: 69 6c 65 64 20 74 6f 20 6d 61 6b 65 20 74 68 65 iled to make the
0720: 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 74 77 path for the tw
0730: 69 6b 69 22 29 29 0a 09 09 28 73 65 74 21 20 64 iki"))...(set! d
0740: 62 20 28 64 62 69 3a 6f 70 65 6e 20 27 73 71 6c b (dbi:open 'sql
0750: 69 74 65 33 20 28 6c 69 73 74 20 28 63 6f 6e 73 ite3 (list (cons
0760: 20 27 64 62 6e 61 6d 65 20 66 75 6c 6c 6e 61 6d 'dbname fullnam
0770: 65 29 29 29 29 0a 09 09 28 66 6f 72 2d 65 61 63 e))))...(for-eac
0780: 68 20 0a 09 09 20 28 6c 61 6d 62 64 61 20 28 73 h ... (lambda (s
0790: 71 72 79 29 0a 09 09 20 20 20 3b 3b 20 28 70 72 qry)... ;; (pr
07a0: 69 6e 74 20 73 71 72 79 29 0a 09 09 20 20 20 28 int sqry)... (
07b0: 64 62 69 3a 65 78 65 63 20 64 62 20 73 71 72 79 dbi:exec db sqry
07c0: 29 29 0a 09 09 20 3b 3b 20 74 79 70 65 73 3a 20 ))... ;; types:
07d0: 30 20 74 65 78 74 2c 20 31 20 6a 70 67 2c 20 32 0 text, 1 jpg, 2
07e0: 20 70 6e 67 2c 20 33 20 73 76 67 2c 20 34 20 73 png, 3 svg, 4 s
07f0: 70 72 65 61 64 73 68 65 65 74 2c 20 35 20 61 75 preadsheet, 5 au
0800: 64 69 6f 2c 20 36 20 76 69 64 65 6f 20 3a 3a 20 dio, 6 video ::
0810: 62 65 74 74 65 72 20 73 70 65 63 73 20 74 6f 20 better specs to
0820: 63 6f 6d 65 2e 2e 2e 0a 09 09 20 28 6c 69 73 74 come...... (list
0830: 0a 09 09 20 20 22 43 52 45 41 54 45 20 54 41 42 ... "CREATE TAB
0840: 4c 45 20 70 69 63 73 20 20 20 20 20 20 28 69 64 LE pics (id
0850: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
0860: 20 4b 45 59 2c 6e 61 6d 65 20 54 45 58 54 2c 77 KEY,name TEXT,w
0870: 69 6b 69 5f 69 64 20 49 4e 54 45 47 45 52 2c 64 iki_id INTEGER,d
0880: 61 74 5f 69 64 20 49 4e 54 45 47 45 52 2c 74 68 at_id INTEGER,th
0890: 75 6d 62 5f 64 61 74 5f 69 64 20 49 4e 54 45 47 umb_dat_id INTEG
08a0: 45 52 2c 63 72 65 61 74 65 64 5f 6f 6e 20 49 4e ER,created_on IN
08b0: 54 45 47 45 52 2c 6f 77 6e 65 72 5f 69 64 20 49 TEGER,owner_id I
08c0: 4e 54 45 47 45 52 29 3b 22 0a 09 09 20 20 22 43 NTEGER);"... "C
08d0: 52 45 41 54 45 20 54 41 42 4c 45 20 64 61 74 73 REATE TABLE dats
08e0: 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 (id INTEGE
08f0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 6d 64 R PRIMARY KEY,md
0900: 35 73 75 6d 20 54 45 58 54 2c 64 61 74 20 42 4c 5sum TEXT,dat BL
0910: 4f 42 2c 74 79 70 65 20 49 4e 54 45 47 45 52 29 OB,type INTEGER)
0920: 3b 22 0a 09 09 20 20 3b 3b 20 6f 6e 20 65 76 65 ;"... ;; on eve
0930: 72 79 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 ry modification
0940: 61 20 6e 65 77 20 74 69 64 64 6c 65 72 73 20 65 a new tiddlers e
0950: 6e 74 72 79 20 69 73 20 63 72 65 61 74 65 64 2e ntry is created.
0960: 20 57 68 65 6e 20 64 69 73 70 6c 61 79 69 6e 67 When displaying
0970: 20 74 68 65 20 74 69 64 64 6c 65 72 73 20 64 6f the tiddlers do
0980: 3a 0a 09 09 20 20 3b 3b 20 20 20 20 73 65 6c 65 :... ;; sele
0990: 63 74 20 77 68 65 72 65 20 63 72 65 61 74 65 64 ct where created
09a0: 5f 6f 6e 20 3c 20 73 6f 6d 65 64 61 74 65 20 6f _on < somedate o
09b0: 72 64 65 72 20 62 79 20 63 72 65 61 74 65 64 5f rder by created_
09c0: 6f 6e 20 64 65 73 63 20 6c 69 6d 69 74 20 31 0a on desc limit 1.
09d0: 09 09 20 20 22 43 52 45 41 54 45 20 54 41 42 4c .. "CREATE TABL
09e0: 45 20 74 69 64 64 6c 65 72 73 20 28 69 64 20 49 E tiddlers (id I
09f0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K
0a00: 45 59 2c 77 69 6b 69 5f 69 64 20 49 4e 54 45 47 EY,wiki_id INTEG
0a10: 45 52 2c 6e 61 6d 65 20 54 45 58 54 2c 72 65 76 ER,name TEXT,rev
0a20: 20 49 4e 54 45 47 45 52 2c 64 61 74 5f 69 64 20 INTEGER,dat_id
0a30: 49 4e 54 45 47 45 52 2c 63 72 65 61 74 65 64 5f INTEGER,created_
0a40: 6f 6e 20 49 4e 54 45 47 45 52 2c 6f 77 6e 65 72 on INTEGER,owner
0a50: 5f 69 64 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 _id INTEGER);"..
0a60: 09 20 20 3b 3b 20 72 65 76 20 61 6e 64 20 74 61 . ;; rev and ta
0a70: 67 20 6f 6e 6c 79 20 75 74 69 6c 69 7a 65 64 20 g only utilized
0a80: 77 68 65 6e 20 75 73 65 72 20 73 65 74 73 20 61 when user sets a
0a90: 20 74 61 67 2e 20 41 6c 6c 20 72 65 73 75 6c 74 tag. All result
0aa0: 73 20 66 72 6f 6d 20 61 20 73 65 6c 65 63 74 20 s from a select
0ab0: 61 73 20 61 62 6f 76 65 20 66 6f 72 20 74 69 64 as above for tid
0ac0: 64 6c 65 72 73 20 61 72 65 20 73 65 74 20 74 6f dlers are set to
0ad0: 20 74 68 65 20 74 61 67 0a 09 09 20 20 22 43 52 the tag... "CR
0ae0: 45 41 54 45 20 54 41 42 4c 45 20 72 65 76 73 20 EATE TABLE revs
0af0: 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 52 20 (id INTEGER
0b00: 50 52 49 4d 41 52 59 20 4b 45 59 2c 74 61 67 20 PRIMARY KEY,tag
0b10: 54 45 58 54 29 3b 22 0a 09 09 20 20 3b 3b 20 77 TEXT);"... ;; w
0b20: 69 6b 69 73 20 69 73 20 68 65 72 65 20 66 6f 72 ikis is here for
0b30: 20 77 68 65 6e 20 70 6f 73 74 67 72 65 73 71 6c when postgresql
0b40: 20 73 75 70 70 6f 72 74 20 69 73 20 61 64 64 65 support is adde
0b50: 64 20 6f 72 20 69 66 20 61 20 73 75 62 20 77 69 d or if a sub wi
0b60: 6b 69 20 69 73 20 63 72 65 61 74 65 64 2e 20 0a ki is created. .
0b70: 09 09 20 20 22 43 52 45 41 54 45 20 54 41 42 4c .. "CREATE TABL
0b80: 45 20 77 69 6b 69 73 20 20 20 20 28 69 64 20 49 E wikis (id I
0b90: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K
0ba0: 45 59 2c 6e 61 6d 65 20 54 45 58 54 2c 63 72 65 EY,name TEXT,cre
0bb0: 61 74 65 64 5f 6f 6e 20 49 4e 54 45 47 45 52 29 ated_on INTEGER)
0bc0: 3b 22 0a 09 09 20 20 3b 3b 20 61 63 63 65 73 73 ;"... ;; access
0bd0: 20 63 6f 6e 74 72 6f 6c 2c 20 6e 65 67 61 74 69 control, negati
0be0: 76 65 20 6e 75 6d 62 65 72 65 64 20 67 72 6f 75 ve numbered grou
0bf0: 70 73 20 61 72 65 20 70 72 69 76 61 74 65 20 67 ps are private g
0c00: 72 6f 75 70 73 2c 20 70 6f 73 74 69 76 65 20 6e roups, postive n
0c10: 75 6d 62 65 72 65 64 20 67 72 6f 75 70 73 20 61 umbered groups a
0c20: 72 65 20 73 79 73 74 65 6d 20 67 72 6f 75 70 73 re system groups
0c30: 0a 09 09 20 20 3b 3b 20 70 65 72 6d 69 73 73 69 ... ;; permissi
0c40: 6f 6e 73 20 61 72 65 20 6f 6e 20 61 20 70 65 72 ons are on a per
0c50: 2d 77 69 6b 69 20 67 72 61 6e 75 6c 61 72 69 74 -wiki granularit
0c60: 79 0a 09 09 20 20 3b 3b 20 61 63 63 65 73 73 3b y... ;; access;
0c70: 20 30 3d 6e 6f 6e 65 2c 31 3d 72 65 61 64 2c 32 0=none,1=read,2
0c80: 3d 72 65 61 64 2f 77 72 69 74 65 0a 09 09 20 20 =read/write...
0c90: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 65 "CREATE TABLE pe
0ca0: 72 6d 73 20 20 20 20 28 69 64 20 49 4e 54 45 47 rms (id INTEG
0cb0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 77 ER PRIMARY KEY,w
0cc0: 69 6b 69 5f 69 64 20 49 4e 54 45 47 45 52 2c 67 iki_id INTEGER,g
0cd0: 72 6f 75 70 5f 69 64 20 49 4e 54 45 47 45 52 2c roup_id INTEGER,
0ce0: 61 63 63 65 73 73 20 49 4e 54 45 47 45 52 29 3b access INTEGER);
0cf0: 22 0a 09 09 20 20 22 43 52 45 41 54 45 20 54 41 "... "CREATE TA
0d00: 42 4c 45 20 67 72 6f 75 70 73 20 20 20 28 69 64 BLE groups (id
0d10: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
0d20: 20 4b 45 59 2c 6e 61 6d 65 20 54 45 58 54 29 3b KEY,name TEXT);
0d30: 22 0a 09 09 20 20 22 43 52 45 41 54 45 20 54 41 "... "CREATE TA
0d40: 42 4c 45 20 6d 65 6d 62 65 72 73 20 20 28 69 64 BLE members (id
0d50: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 INTEGER PRIMARY
0d60: 20 4b 45 59 2c 70 65 72 73 6f 6e 5f 69 64 20 49 KEY,person_id I
0d70: 4e 54 45 47 45 52 2c 67 72 6f 75 70 5f 69 64 20 NTEGER,group_id
0d80: 49 4e 54 45 47 45 52 29 3b 22 0a 09 09 20 20 3b INTEGER);"... ;
0d90: 3b 20 73 65 74 75 70 20 61 6e 64 20 63 6f 6e 66 ; setup and conf
0da0: 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 0a 09 iguration data..
0db0: 09 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 . "CREATE TABLE
0dc0: 20 6d 65 74 61 20 20 20 20 20 28 69 64 20 49 4e meta (id IN
0dd0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE
0de0: 59 2c 6b 65 79 20 54 45 58 54 2c 76 61 6c 20 54 Y,key TEXT,val T
0df0: 45 58 54 29 3b 22 0a 09 09 20 20 3b 3b 20 6e 65 EXT);"... ;; ne
0e00: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 ed to create an
0e10: 65 6e 74 72 79 20 66 6f 72 20 2a 74 68 69 73 2a entry for *this*
0e20: 20 74 77 69 6b 69 0a 09 09 20 20 28 63 6f 6e 63 twiki... (conc
0e30: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 77 69 "INSERT INTO wi
0e40: 6b 69 73 20 28 69 64 2c 6e 61 6d 65 2c 63 72 65 kis (id,name,cre
0e50: 61 74 65 64 5f 6f 6e 29 20 56 41 4c 55 45 53 20 ated_on) VALUES
0e60: 28 31 2c 27 6d 61 69 6e 27 2c 22 20 28 63 75 72 (1,'main'," (cur
0e70: 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 22 29 rent-seconds) ")
0e80: 3b 22 29 29 29 0a 09 09 3b 3b 20 20 20 20 20 28 ;")))...;; (
0e90: 63 6f 6e 63 20 22 49 4e 53 45 52 54 20 49 4e 54 conc "INSERT INT
0ea0: 4f 20 74 69 64 64 6c 65 72 73 20 28 77 69 6b 69 O tiddlers (wiki
0eb0: 5f 69 64 2c 6e 61 6d 65 2c 63 72 65 61 74 65 64 _id,name,created
0ec0: 5f 6f 6e 29 20 56 41 4c 55 45 53 28 31 2c 27 4d _on) VALUES(1,'M
0ed0: 61 69 6e 4d 65 6e 75 27 2c 22 20 28 63 75 72 72 ainMenu'," (curr
0ee0: 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 22 29 3b ent-seconds) ");
0ef0: 22 29 29 29 29 29 0a 09 09 28 74 77 69 6b 69 3a ")))))...(twiki:
0f00: 73 61 76 65 2d 74 69 64 64 6c 65 72 20 64 62 20 save-tiddler db
0f10: 22 4d 61 69 6e 4d 65 6e 75 22 20 22 5b 5b 46 69 "MainMenu" "[[Fi
0f20: 72 73 74 54 69 64 64 6c 65 72 5d 5d 22 20 22 22 rstTiddler]]" ""
0f30: 20 31 20 31 29 29 29 0a 09 20 20 3b 3b 20 28 73 1 1))).. ;; (s
0f40: 71 6c 69 74 65 33 3a 73 65 74 2d 62 75 73 79 2d qlite3:set-busy-
0f50: 74 69 6d 65 6f 75 74 21 28 64 62 69 3a 64 62 2d timeout!(dbi:db-
0f60: 63 6f 6e 6e 20 64 62 29 20 31 30 30 30 30 30 30 conn db) 1000000
0f70: 29 0a 09 20 20 64 62 29 29 29 29 0a 0a 3b 3b 3d ).. db))))..;;=
0f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0fc0: 3d 3d 3d 3d 3d 0a 3b 3b 20 74 77 69 6b 69 73 20 =====.;; twikis
0fd0: 28 64 62 20 6e 61 6d 69 6e 67 2c 20 73 71 6c 69 (db naming, sqli
0fe0: 74 65 20 76 73 20 70 6f 73 74 67 72 65 73 71 6c te vs postgresql
0ff0: 2c 20 6b 65 79 73 20 65 74 63 2e 0a 3b 3b 3d 3d , keys etc..;;==
1000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1040: 3d 3d 3d 3d 0a 0a 3b 3b 20 41 20 77 69 6b 69 20 ====..;; A wiki
1050: 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 is specified by
1060: 61 20 6c 69 73 74 20 6f 66 20 6b 65 79 73 2c 20 a list of keys,
1070: 68 65 72 65 20 77 65 20 63 6f 6e 76 65 72 74 20 here we convert
1080: 74 68 61 74 20 6c 69 73 74 20 74 6f 20 61 20 73 that list to a s
1090: 69 6e 67 6c 65 20 73 74 72 69 6e 67 0a 28 64 65 ingle string.(de
10a0: 66 69 6e 65 20 28 74 77 69 6b 69 3a 6b 65 79 73 fine (twiki:keys
10b0: 2d 3e 6b 65 79 20 6b 65 79 73 29 0a 20 20 28 69 ->key keys). (i
10c0: 66 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 6b 65 f (not (null? ke
10d0: 79 73 29 29 0a 20 20 20 20 20 20 28 73 74 72 69 ys)). (stri
10e0: 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 ng-intersperse (
10f0: 6d 61 70 20 63 6f 6e 63 20 6b 65 79 73 29 20 22 map conc keys) "
1100: 20 22 29 0a 20 20 20 20 20 20 22 20 22 29 29 0a "). " ")).
1110: 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a .(define (twiki:
1120: 6b 65 79 2d 3e 66 6e 61 6d 65 20 6b 65 79 29 0a key->fname key).
1130: 20 20 28 6c 65 74 2a 20 28 3b 3b 20 28 6d 64 35 (let* (;; (md5
1140: 6b 65 79 70 61 74 68 20 28 6d 64 35 3a 64 69 67 keypath (md5:dig
1150: 65 73 74 20 6b 65 79 29 29 20 3b 3b 20 28 74 77 est key)) ;; (tw
1160: 69 6b 69 3a 6b 65 79 73 2d 3e 6b 65 79 20 6b 65 iki:keys->key ke
1170: 79 73 29 29 29 0a 09 20 28 6b 65 79 70 61 74 68 ys))).. (keypath
1180: 20 20 20 20 28 74 77 69 6b 69 3a 77 65 62 36 34 (twiki:web64
1190: 65 6e 63 20 6b 65 79 29 29 0a 09 20 28 64 65 6c enc key)).. (del
11a0: 74 61 20 20 20 20 20 20 28 71 75 6f 74 69 65 6e ta (quotien
11b0: 74 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 t (string-length
11c0: 20 6b 65 79 70 61 74 68 29 20 33 29 29 20 3b 3b keypath) 3)) ;;
11d0: 20 0a 09 20 28 70 31 20 20 20 20 20 20 20 20 20 .. (p1
11e0: 28 73 75 62 73 74 72 69 6e 67 20 6b 65 79 70 61 (substring keypa
11f0: 74 68 20 30 20 20 20 20 20 20 20 20 20 20 20 64 th 0 d
1200: 65 6c 74 61 29 29 20 3b 3b 20 20 30 20 20 38 29 elta)) ;; 0 8)
1210: 29 0a 09 20 28 70 32 20 20 20 20 20 20 20 20 20 ).. (p2
1220: 28 73 75 62 73 74 72 69 6e 67 20 6b 65 79 70 61 (substring keypa
1230: 74 68 20 64 65 6c 74 61 20 20 20 20 20 20 20 28 th delta (
1240: 2a 20 64 65 6c 74 61 20 32 29 29 29 3b 3b 20 20 * delta 2)));;
1250: 38 20 31 36 29 29 0a 09 20 28 70 33 20 20 20 20 8 16)).. (p3
1260: 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 (substring
1270: 6b 65 79 70 61 74 68 20 28 2a 20 64 65 6c 74 61 keypath (* delta
1280: 20 32 29 20 28 2a 20 64 65 6c 74 61 20 33 29 29 2) (* delta 3))
1290: 29 29 20 3b 3b 20 31 36 20 32 34 29 29 0a 20 20 )) ;; 16 24)).
12a0: 20 20 28 6c 69 73 74 20 28 73 74 72 69 6e 67 2d (list (string-
12b0: 69 6e 74 65 72 73 70 65 72 73 65 20 28 6c 69 73 intersperse (lis
12c0: 74 20 22 74 77 69 6b 69 73 22 20 70 31 20 70 32 t "twikis" p1 p2
12d0: 20 70 33 29 20 22 2f 22 29 20 6b 65 79 70 61 74 p3) "/") keypat
12e0: 68 29 29 29 0a 0a 3b 3b 20 6c 6f 6f 6b 20 75 70 h)))..;; look up
12f0: 20 74 68 65 20 77 69 64 20 62 61 73 65 64 20 6f the wid based o
1300: 6e 20 74 68 65 20 6b 65 79 73 2c 20 74 68 69 73 n the keys, this
1310: 20 69 73 20 75 73 65 64 20 66 6f 72 20 73 75 62 is used for sub
1320: 20 77 69 6b 69 73 20 6f 6e 6c 79 2e 20 49 2e 65 wikis only. I.e
1330: 2e 20 61 20 77 69 6b 69 20 69 6e 73 74 61 6e 74 . a wiki instant
1340: 69 61 74 65 64 20 69 6e 73 69 64 65 20 61 6e 6f iated inside ano
1350: 74 68 65 72 20 77 69 6b 69 20 0a 3b 3b 20 67 69 ther wiki .;; gi
1360: 76 69 6e 67 20 61 20 73 65 70 61 72 61 74 65 20 ving a separate
1370: 6e 61 6d 65 73 70 61 63 65 20 74 6f 20 61 6c 6c namespace to all
1380: 20 74 68 65 20 74 69 64 64 6c 65 72 73 0a 28 64 the tiddlers.(d
1390: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 6e 61 6d efine (twiki:nam
13a0: 65 2d 3e 77 69 64 20 64 62 20 6e 61 6d 65 29 20 e->wid db name)
13b0: 0a 20 20 28 6c 65 74 20 28 28 77 69 64 20 28 64 . (let ((wid (d
13c0: 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 20 22 53 bi:get-one db "S
13d0: 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 77 69 ELECT id FROM wi
13e0: 6b 69 73 20 57 48 45 52 45 20 6e 61 6d 65 3d 3f kis WHERE name=?
13f0: 3b 22 20 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 ;" name))). (
1400: 69 66 20 77 69 64 20 77 69 64 0a 09 28 62 65 67 if wid wid..(beg
1410: 69 6e 0a 09 20 20 28 64 62 69 3a 65 78 65 63 20 in.. (dbi:exec
1420: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 db "INSERT INTO
1430: 77 69 6b 69 73 20 28 6e 61 6d 65 2c 63 72 65 61 wikis (name,crea
1440: 74 65 64 5f 6f 6e 29 20 56 41 4c 55 45 53 28 3f ted_on) VALUES(?
1450: 2c 3f 29 3b 22 20 6e 61 6d 65 20 28 63 75 72 72 ,?);" name (curr
1460: 65 6e 74 2d 73 65 63 6f 6e 64 73 29 29 0a 09 20 ent-seconds))..
1470: 20 28 74 77 69 6b 69 3a 6e 61 6d 65 2d 3e 77 69 (twiki:name->wi
1480: 64 20 64 62 20 6e 61 6d 65 29 29 29 29 29 0a 0a d db name)))))..
1490: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
14a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
14d0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 74 77 69 6b ========.;; twik
14e0: 69 20 72 65 63 6f 72 64 0a 3b 3b 3d 3d 3d 3d 3d i record.;;=====
14f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1530: 3d 0a 0a 3b 3b 20 6d 61 6b 65 2d 76 65 63 74 6f =..;; make-vecto
1540: 72 2d 72 65 63 6f 72 64 20 74 77 69 6b 69 20 77 r-record twiki w
1550: 69 6b 69 20 77 69 64 20 6e 61 6d 65 20 6b 65 79 iki wid name key
1560: 20 64 62 68 0a 28 64 65 66 69 6e 65 20 28 6d 61 dbh.(define (ma
1570: 6b 65 2d 74 77 69 6b 69 3a 77 69 6b 69 29 28 6d ke-twiki:wiki)(m
1580: 61 6b 65 2d 76 65 63 74 6f 72 20 35 29 29 0a 28 ake-vector 5)).(
1590: 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 define-inline (t
15a0: 77 69 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 77 69 wiki:wiki-get-wi
15b0: 64 20 20 20 20 76 65 63 29 20 20 20 20 28 76 65 d vec) (ve
15c0: 63 74 6f 72 2d 72 65 66 20 20 76 65 63 20 30 29 ctor-ref vec 0)
15d0: 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 ).(define-inline
15e0: 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 67 65 74 (twiki:wiki-get
15f0: 2d 6e 61 6d 65 20 20 20 76 65 63 29 20 20 20 20 -name vec)
1600: 28 76 65 63 74 6f 72 2d 72 65 66 20 20 76 65 63 (vector-ref vec
1610: 20 31 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 1)).(define-inl
1620: 69 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d ine (twiki:wiki-
1630: 67 65 74 2d 6b 65 79 20 20 20 20 76 65 63 29 20 get-key vec)
1640: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 (vector-ref
1650: 76 65 63 20 32 29 29 0a 28 64 65 66 69 6e 65 2d vec 2)).(define-
1660: 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 77 69 inline (twiki:wi
1670: 6b 69 2d 67 65 74 2d 64 62 68 20 20 20 20 76 65 ki-get-dbh ve
1680: 63 29 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 c) (vector-re
1690: 66 20 20 76 65 63 20 33 29 29 0a 28 64 65 66 69 f vec 3)).(defi
16a0: 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 ne-inline (twiki
16b0: 3a 77 69 6b 69 2d 67 65 74 2d 70 65 72 6d 73 20 :wiki-get-perms
16c0: 20 76 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 vec) (vector
16d0: 2d 72 65 66 20 20 76 65 63 20 34 29 29 0a 0a 28 -ref vec 4))..(
16e0: 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 define-inline (t
16f0: 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 77 69 wiki:wiki-set-wi
1700: 64 21 20 20 20 76 65 63 20 76 61 6c 29 28 76 65 d! vec val)(ve
1710: 63 74 6f 72 2d 73 65 74 21 20 76 65 63 20 30 20 ctor-set! vec 0
1720: 76 61 6c 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e val)).(define-in
1730: 6c 69 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 line (twiki:wiki
1740: 2d 73 65 74 2d 6e 61 6d 65 21 20 20 76 65 63 20 -set-name! vec
1750: 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 21 val)(vector-set!
1760: 20 76 65 63 20 31 20 76 61 6c 29 29 0a 28 64 65 vec 1 val)).(de
1770: 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 fine-inline (twi
1780: 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 6b 65 79 21 ki:wiki-set-key!
1790: 20 20 20 76 65 63 20 76 61 6c 29 28 76 65 63 74 vec val)(vect
17a0: 6f 72 2d 73 65 74 21 20 76 65 63 20 32 20 76 61 or-set! vec 2 va
17b0: 6c 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 l)).(define-inli
17c0: 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 73 ne (twiki:wiki-s
17d0: 65 74 2d 64 62 68 21 20 20 20 76 65 63 20 76 61 et-dbh! vec va
17e0: 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 l)(vector-set! v
17f0: 65 63 20 33 20 76 61 6c 29 29 0a 28 64 65 66 69 ec 3 val)).(defi
1800: 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 ne-inline (twiki
1810: 3a 77 69 6b 69 2d 73 65 74 2d 70 65 72 6d 73 21 :wiki-set-perms!
1820: 20 76 65 63 20 76 61 6c 29 28 76 65 63 74 6f 72 vec val)(vector
1830: 2d 73 65 74 21 20 76 65 63 20 34 20 76 61 6c 29 -set! vec 4 val)
1840: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
1850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 74 ===========.;; t
1890: 77 69 6b 69 20 6d 69 73 63 0a 3b 3b 3d 3d 3d 3d wiki misc.;;====
18a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
18b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
18c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
18d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
18e0: 3d 3d 0a 0a 3b 3b 20 72 65 74 75 72 6e 73 20 68 ==..;; returns h
18f0: 65 6c 70 20 68 74 6d 6c 0a 28 64 65 66 69 6e 65 elp html.(define
1900: 20 28 74 77 69 6b 69 3a 68 65 6c 70 20 73 65 63 (twiki:help sec
1910: 74 69 6f 6e 29 0a 20 20 28 6c 65 74 20 28 28 6d tion). (let ((m
1920: 61 69 6e 20 28 74 77 69 6b 69 3a 64 69 76 20 0a ain (twiki:div .
1930: 09 20 20 20 20 20 20 20 27 6e 6f 64 65 20 22 74 . 'node "t
1940: 77 69 6b 69 2d 68 65 6c 70 22 0a 09 20 20 20 20 wiki-help"..
1950: 20 20 20 28 6c 69 73 74 20 0a 09 09 28 74 77 69 (list ...(twi
1960: 6b 69 3a 68 33 20 22 48 65 6c 70 20 73 74 75 66 ki:h3 "Help stuf
1970: 66 22 29 0a 09 09 28 74 77 69 6b 69 3a 70 72 65 f")...(twiki:pre
1980: 20 22 0a 4c 69 6e 6b 20 74 6f 20 70 61 67 65 3a ".Link to page:
1990: 20 20 20 20 20 20 5b 5b 50 61 67 65 20 54 69 74 [[Page Tit
19a0: 6c 65 5d 5d 0a 48 65 61 64 69 6e 67 33 3a 20 20 le]].Heading3:
19b0: 20 20 20 20 20 20 20 20 21 21 21 20 54 68 65 20 !!! The
19c0: 68 65 61 64 69 6e 67 0a 55 6e 64 65 72 6c 69 6e heading.Underlin
19d0: 65 3a 20 20 20 20 20 20 20 20 20 5f 5f 75 6e 64 e: __und
19e0: 65 72 6c 69 6e 65 64 5f 5f 0a 54 61 62 6c 65 3a erlined__.Table:
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 63 | c
1a00: 65 6c 6c 31 20 7c 20 63 65 6c 6c 32 20 7c 0a 4c ell1 | cell2 |.L
1a10: 69 73 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 ist:
1a20: 20 20 23 20 69 74 65 6d 31 0a 20 20 20 20 20 20 # item1.
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 23 20 ##
1a40: 69 74 65 6d 32 0a 42 75 6c 6c 65 74 3a 20 20 20 item2.Bullet:
1a50: 20 20 20 20 20 20 20 20 20 2a 20 69 74 65 6d 31 * item1
1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1a70: 20 20 20 20 2a 2a 20 69 74 65 6d 32 0a 50 72 65 ** item2.Pre
1a80: 66 6f 72 6d 61 74 74 65 64 3a 20 20 20 20 20 20 formatted:
1a90: 7b 7b 7b 73 74 75 66 66 20 68 65 72 65 7d 7d 7d {{{stuff here}}}
1aa0: 0a 49 6e 73 65 72 74 20 61 20 70 69 63 74 75 72 .Insert a pictur
1ab0: 65 3a 20 20 5b 70 69 63 5b 50 69 63 4e 61 6d 65 e: [pic[PicName
1ac0: 5d 5d 0a 4f 72 20 77 69 74 68 20 73 69 7a 65 3a ]].Or with size:
1ad0: 20 20 20 20 20 20 5b 70 69 63 31 30 30 78 31 30 [pic100x10
1ae0: 30 5b 50 69 63 4e 61 6d 65 5d 5d 0a 55 70 6c 6f 0[PicName]].Uplo
1af0: 61 64 20 74 68 65 20 70 69 63 74 75 72 65 20 75 ad the picture u
1b00: 73 69 6e 67 20 74 68 65 20 5c 22 50 69 63 5c 22 sing the \"Pic\"
1b10: 20 6c 69 6e 6b 20 66 69 72 73 74 22 29 29 29 29 link first"))))
1b20: 29 0a 09 3b 3b 28 63 61 73 65 20 73 65 63 74 69 )..;;(case secti
1b30: 6f 6e 0a 20 20 20 20 6d 61 69 6e 29 29 0a 0a 3b on. main))..;
1b40: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
1b50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1b80: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 74 77 69 6b 69 =======.;; twiki
1b90: 20 61 63 63 65 73 73 20 63 6f 6e 74 72 6f 6c 0a access control.
1ba0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
1bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1be0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 69 64 65 ========..;; ide
1bf0: 61 20 68 65 72 65 20 69 73 20 66 6f 72 20 74 68 a here is for th
1c00: 65 20 65 6e 64 20 75 73 65 72 20 74 6f 20 72 65 e end user to re
1c10: 64 65 66 69 6e 65 20 74 68 69 73 20 72 6f 75 74 define this rout
1c20: 69 6e 65 2c 0a 3b 3b 20 61 6e 64 20 63 61 6c 6c ine,.;; and call
1c30: 20 74 77 69 6b 69 3a 69 6e 74 65 72 61 6c 2d 61 twiki:interal-a
1c40: 63 63 65 73 73 20 69 66 20 64 65 73 69 72 65 64 ccess if desired
1c50: 0a 3b 3b 20 0a 3b 3b 20 69 66 20 6f 76 65 72 72 .;; .;; if overr
1c60: 69 64 65 20 69 73 20 23 74 20 74 68 65 6e 20 67 ide is #t then g
1c70: 69 76 65 20 61 63 63 65 73 73 20 6e 6f 20 6d 61 ive access no ma
1c80: 74 74 65 72 20 77 68 61 74 0a 28 64 65 66 69 6e tter what.(defin
1c90: 65 20 28 74 77 69 6b 69 3a 61 63 63 65 73 73 20 e (twiki:access
1ca0: 6b 65 79 73 20 77 69 6b 69 2d 6e 61 6d 65 20 75 keys wiki-name u
1cb0: 73 65 72 2d 69 64 29 0a 20 20 27 28 72 20 77 29 ser-id). '(r w)
1cc0: 29 0a 0a 3b 3b 20 41 64 64 20 73 75 70 70 6f 72 )..;; Add suppor
1cd0: 74 20 66 6f 72 20 73 74 6f 72 69 6e 67 20 67 72 t for storing gr
1ce0: 6f 75 70 73 2c 20 75 73 65 72 73 20 61 6e 64 20 oups, users and
1cf0: 61 63 63 65 73 73 20 69 6e 74 65 72 6e 61 6c 6c access internall
1d00: 79 0a 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 74 y.;; .(define (t
1d10: 77 69 6b 69 3a 69 6e 74 65 72 6e 61 6c 2d 61 63 wiki:internal-ac
1d20: 63 65 73 73 20 6b 65 79 73 20 77 69 6b 69 2d 6e cess keys wiki-n
1d30: 61 6d 65 20 75 73 65 72 2d 69 64 29 0a 20 20 23 ame user-id). #
1d40: 66 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d f)..;;==========
1d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
1d90: 74 77 69 6b 69 20 72 65 67 69 73 74 72 79 0a 3b twiki registry.;
1da0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
1db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1de0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 74 68 65 73 =======..;; thes
1df0: 65 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 e can be overrid
1e00: 64 65 6e 20 62 79 20 65 6e 64 20 75 73 65 72 20 den by end user
1e10: 28 6a 75 73 74 20 63 72 65 61 74 65 20 61 20 6e (just create a n
1e20: 65 77 20 72 6f 75 74 69 6e 65 20 62 79 20 74 68 ew routine by th
1e30: 65 20 73 61 6d 65 20 6e 61 6d 65 29 0a 0a 28 64 e same name)..(d
1e40: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 6f 70 65 efine (twiki:ope
1e50: 6e 2d 72 65 67 69 73 74 72 79 29 0a 20 20 28 6c n-registry). (l
1e60: 65 74 2a 20 28 28 62 61 73 65 70 61 74 68 20 20 et* ((basepath
1e70: 28 73 64 61 74 2d 67 65 74 2d 73 72 6f 6f 74 20 (sdat-get-sroot
1e80: 73 3a 73 65 73 73 69 6f 6e 29 29 0a 09 20 28 72 s:session)).. (r
1e90: 65 67 66 69 6c 65 20 20 20 28 63 6f 6e 63 20 62 egfile (conc b
1ea0: 61 73 65 70 61 74 68 20 22 2f 74 77 69 6b 69 73 asepath "/twikis
1eb0: 2f 72 65 67 69 73 74 72 79 2e 64 62 22 29 29 0a /registry.db")).
1ec0: 09 20 28 72 65 67 65 78 69 73 74 73 20 28 66 69 . (regexists (fi
1ed0: 6c 65 2d 65 78 69 73 74 73 3f 20 72 65 67 66 69 le-exists? regfi
1ee0: 6c 65 29 29 0a 09 20 28 64 62 20 20 20 20 20 20 le)).. (db
1ef0: 20 20 28 64 62 69 3a 6f 70 65 6e 20 27 73 71 6c (dbi:open 'sql
1f00: 69 74 65 33 20 28 6c 69 73 74 20 28 63 6f 6e 73 ite3 (list (cons
1f10: 20 27 64 62 6e 61 6d 65 20 72 65 67 66 69 6c 65 'dbname regfile
1f20: 29 29 29 29 29 0a 20 20 20 20 28 69 66 20 72 65 ))))). (if re
1f30: 67 65 78 69 73 74 73 0a 09 64 62 0a 09 28 62 65 gexists..db..(be
1f40: 67 69 6e 0a 09 20 20 28 66 6f 72 2d 65 61 63 68 gin.. (for-each
1f50: 20 28 6c 61 6d 62 64 61 20 28 73 74 6d 74 29 28 (lambda (stmt)(
1f60: 64 62 69 3a 65 78 65 63 20 64 62 20 73 74 6d 74 dbi:exec db stmt
1f70: 29 29 0a 09 09 20 20 20 20 28 6c 69 73 74 20 22 ))... (list "
1f80: 43 52 45 41 54 45 20 54 41 42 4c 45 20 77 69 6b CREATE TABLE wik
1f90: 69 73 20 28 6b 65 79 20 54 45 58 54 20 50 52 49 is (key TEXT PRI
1fa0: 4d 41 52 59 20 4b 45 59 2c 70 61 74 68 20 54 45 MARY KEY,path TE
1fb0: 58 54 2c 63 72 65 61 74 69 6f 6e 5f 64 61 74 65 XT,creation_date
1fc0: 20 49 4e 54 45 47 45 52 2c 63 72 65 61 74 6f 72 INTEGER,creator
1fd0: 5f 69 64 20 49 4e 54 45 47 45 52 29 3b 22 29 29 _id INTEGER);"))
1fe0: 0a 09 20 20 64 62 29 29 29 29 0a 0a 28 64 65 66 .. db))))..(def
1ff0: 69 6e 65 20 28 74 77 69 6b 69 3a 72 65 67 69 73 ine (twiki:regis
2000: 74 65 72 2d 77 69 6b 69 20 6b 65 79 20 70 61 74 ter-wiki key pat
2010: 68 29 0a 20 20 28 6c 65 74 20 28 28 64 62 20 28 h). (let ((db (
2020: 74 77 69 6b 69 3a 6f 70 65 6e 2d 72 65 67 69 73 twiki:open-regis
2030: 74 72 79 29 29 29 0a 20 20 20 20 28 64 62 69 3a try))). (dbi:
2040: 65 78 65 63 20 64 62 20 0a 09 20 20 20 20 20 20 exec db ..
2050: 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 "INSERT OR REPLA
2060: 43 45 20 49 4e 54 4f 20 77 69 6b 69 73 20 28 6b CE INTO wikis (k
2070: 65 79 2c 70 61 74 68 2c 63 72 65 61 74 69 6f 6e ey,path,creation
2080: 5f 64 61 74 65 2c 63 72 65 61 74 6f 72 5f 69 64 _date,creator_id
2090: 29 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f ) VALUES(?,?,?,?
20a0: 29 3b 22 0a 09 20 20 20 20 20 20 6b 65 79 20 70 );".. key p
20b0: 61 74 68 20 28 63 75 72 72 65 6e 74 2d 73 65 63 ath (current-sec
20c0: 6f 6e 64 73 29 20 28 74 77 69 6b 69 3a 67 65 74 onds) (twiki:get
20d0: 2d 69 64 29 29 0a 20 20 20 20 28 64 62 69 3a 63 -id)). (dbi:c
20e0: 6c 6f 73 65 20 64 62 29 29 29 0a 0a 3b 3b 3d 3d lose db)))..;;==
20f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2130: 3d 3d 3d 3d 0a 3b 3b 20 74 69 64 64 6c 65 72 73 ====.;; tiddlers
2140: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
2150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 =========..(defi
2190: 6e 65 20 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 ne twiki:tiddler
21a0: 2d 73 65 6c 65 63 74 6f 72 20 22 53 45 4c 45 43 -selector "SELEC
21b0: 54 20 74 2e 69 64 2c 74 2e 6e 61 6d 65 2c 74 2e T t.id,t.name,t.
21c0: 72 65 76 2c 74 2e 64 61 74 5f 69 64 2c 74 2e 63 rev,t.dat_id,t.c
21d0: 72 65 61 74 65 64 5f 6f 6e 2c 74 2e 6f 77 6e 65 reated_on,t.owne
21e0: 72 5f 69 64 20 46 52 4f 4d 20 74 69 64 64 6c 65 r_id FROM tiddle
21f0: 72 73 20 41 53 20 74 20 49 4e 4e 45 52 20 4a 4f rs AS t INNER JO
2200: 49 4e 20 64 61 74 73 20 41 53 20 64 20 4f 4e 20 IN dats AS d ON
2210: 74 2e 64 61 74 5f 69 64 3d 64 2e 69 64 22 29 0a t.dat_id=d.id").
2220: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 74 (define (twiki:t
2230: 69 64 64 6c 65 72 2d 6d 61 6b 65 29 28 6d 61 6b iddler-make)(mak
2240: 65 2d 76 65 63 74 6f 72 20 38 20 23 66 29 29 0a e-vector 8 #f)).
2250: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
2260: 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 twiki:tiddler-ge
2270: 74 2d 69 64 20 20 20 20 20 20 20 20 20 20 20 76 t-id v
2280: 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 2d 72 ec) (vector-r
2290: 65 66 20 20 76 65 63 20 30 29 29 0a 28 64 65 66 ef vec 0)).(def
22a0: 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b ine-inline (twik
22b0: 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 6e 61 i:tiddler-get-na
22c0: 6d 65 20 20 20 20 20 20 20 20 20 76 65 63 29 20 me vec)
22d0: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 (vector-ref
22e0: 76 65 63 20 31 29 29 0a 28 64 65 66 69 6e 65 2d vec 1)).(define-
22f0: 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 inline (twiki:ti
2300: 64 64 6c 65 72 2d 67 65 74 2d 72 65 76 20 20 20 ddler-get-rev
2310: 20 20 20 20 20 20 20 76 65 63 29 20 20 20 20 28 vec) (
2320: 76 65 63 74 6f 72 2d 72 65 66 20 20 76 65 63 20 vector-ref vec
2330: 32 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 2)).(define-inli
2340: 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 ne (twiki:tiddle
2350: 72 2d 67 65 74 2d 64 61 74 2d 69 64 20 20 20 20 r-get-dat-id
2360: 20 20 20 76 65 63 29 20 20 20 20 28 76 65 63 74 vec) (vect
2370: 6f 72 2d 72 65 66 20 20 76 65 63 20 33 29 29 0a or-ref vec 3)).
2380: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
2390: 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 twiki:tiddler-ge
23a0: 74 2d 63 72 65 61 74 65 64 5f 6f 6e 20 20 20 76 t-created_on v
23b0: 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 2d 72 ec) (vector-r
23c0: 65 66 20 20 76 65 63 20 34 29 29 0a 28 64 65 66 ef vec 4)).(def
23d0: 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b ine-inline (twik
23e0: 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 6f 77 i:tiddler-get-ow
23f0: 6e 65 72 5f 69 64 20 20 20 20 20 76 65 63 29 20 ner_id vec)
2400: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 (vector-ref
2410: 76 65 63 20 35 29 29 0a 3b 3b 20 28 64 65 66 69 vec 5)).;; (defi
2420: 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 ne-inline (twiki
2430: 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 :tiddler-get-dat
2440: 2d 74 79 70 65 20 20 20 20 20 76 65 63 29 20 20 -type vec)
2450: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 76 (vector-ref v
2460: 65 63 20 36 29 29 0a 0a 28 64 65 66 69 6e 65 2d ec 6))..(define-
2470: 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 inline (twiki:ti
2480: 64 64 6c 65 72 2d 73 65 74 2d 69 64 21 20 20 20 ddler-set-id!
2490: 20 20 20 20 20 20 20 76 65 63 20 76 61 6c 29 28 vec val)(
24a0: 76 65 63 74 6f 72 2d 73 65 74 21 20 76 65 63 20 vector-set! vec
24b0: 30 20 76 61 6c 29 20 76 65 63 29 0a 28 64 65 66 0 val) vec).(def
24c0: 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b ine-inline (twik
24d0: 69 3a 74 69 64 64 6c 65 72 2d 73 65 74 2d 6e 61 i:tiddler-set-na
24e0: 6d 65 21 20 20 20 20 20 20 20 20 76 65 63 20 76 me! vec v
24f0: 61 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 al)(vector-set!
2500: 76 65 63 20 31 20 76 61 6c 29 20 76 65 63 29 0a vec 1 val) vec).
2510: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
2520: 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 twiki:tiddler-se
2530: 74 2d 72 65 76 21 20 20 20 20 20 20 20 20 20 76 t-rev! v
2540: 65 63 20 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 ec val)(vector-s
2550: 65 74 21 20 76 65 63 20 32 20 76 61 6c 29 20 76 et! vec 2 val) v
2560: 65 63 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 ec).(define-inli
2570: 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 ne (twiki:tiddle
2580: 72 2d 73 65 74 2d 64 61 74 2d 69 64 21 20 20 20 r-set-dat-id!
2590: 20 20 20 76 65 63 20 76 61 6c 29 28 76 65 63 74 vec val)(vect
25a0: 6f 72 2d 73 65 74 21 20 76 65 63 20 33 20 76 61 or-set! vec 3 va
25b0: 6c 29 20 76 65 63 29 0a 28 64 65 66 69 6e 65 2d l) vec).(define-
25c0: 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 inline (twiki:ti
25d0: 64 64 6c 65 72 2d 73 65 74 2d 63 72 65 61 74 65 ddler-set-create
25e0: 64 5f 6f 6e 21 20 20 76 65 63 20 76 61 6c 29 28 d_on! vec val)(
25f0: 76 65 63 74 6f 72 2d 73 65 74 21 20 76 65 63 20 vector-set! vec
2600: 34 20 76 61 6c 29 20 76 65 63 29 0a 3b 3b 20 28 4 val) vec).;; (
2610: 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 define-inline (t
2620: 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 74 wiki:tiddler-set
2630: 2d 6f 77 6e 65 72 5f 69 64 21 20 20 20 20 76 65 -owner_id! ve
2640: 63 20 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 65 c val)(vector-se
2650: 74 21 20 76 65 63 20 35 20 76 61 6c 29 29 0a 0a t! vec 5 val))..
2660: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
2670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
26a0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 52 6f 75 74 ========.;; Rout
26b0: 69 6e 65 73 20 66 6f 72 20 64 69 73 70 6c 61 79 ines for display
26c0: 69 6e 67 2c 20 65 64 69 74 69 6e 67 2c 20 62 72 ing, editing, br
26d0: 6f 77 73 69 6e 67 20 65 74 63 2e 20 74 69 64 64 owsing etc. tidd
26e0: 6c 65 72 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d lers.;;=========
26f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 09 0a 0a =============...
2730: 3b 3b 20 73 68 6f 75 6c 64 20 63 68 61 6e 67 65 ;; should change
2740: 20 74 68 69 73 20 74 6f 20 74 61 6b 65 20 61 20 this to take a
2750: 74 69 64 64 6c 65 72 20 73 74 72 75 63 74 75 72 tiddler structur
2760: 65 3f 0a 3b 3b 20 54 68 69 73 20 69 73 20 74 68 e?.;; This is th
2770: 65 20 64 69 73 70 6c 61 79 20 6f 66 20 61 20 73 e display of a s
2780: 69 6e 67 6c 65 20 74 69 64 64 6c 65 72 0a 28 64 ingle tiddler.(d
2790: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 76 69 65 efine (twiki:vie
27a0: 77 20 64 61 74 20 20 74 6b 65 79 20 77 69 64 20 w dat tkey wid
27b0: 74 69 64 64 6c 65 72 20 77 69 6b 69 29 20 3b 3b tiddler wiki) ;;
27c0: 20 63 6c 6f 73 65 2c 20 63 6c 6f 73 65 20 6f 74 close, close ot
27d0: 68 65 72 73 2c 20 65 64 69 74 2c 20 6d 6f 72 65 hers, edit, more
27e0: 0a 20 20 28 6c 65 74 20 28 28 69 73 2d 6e 6f 74 . (let ((is-not
27f0: 2d 6d 61 69 6e 20 20 28 6e 6f 74 20 28 65 71 75 -main (not (equ
2800: 61 6c 3f 20 22 4d 61 69 6e 4d 65 6e 75 22 20 28 al? "MainMenu" (
2810: 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 twiki:tiddler-ge
2820: 74 2d 6e 61 6d 65 20 74 69 64 64 6c 65 72 29 29 t-name tiddler))
2830: 29 29 0a 09 28 65 64 69 74 2d 61 6c 6c 6f 77 65 ))..(edit-allowe
2840: 64 20 28 6d 65 6d 62 65 72 20 27 77 20 28 74 77 d (member 'w (tw
2850: 69 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 70 65 72 iki:wiki-get-per
2860: 6d 73 20 77 69 6b 69 29 29 29 29 0a 20 20 20 20 ms wiki)))).
2870: 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 22 74 (s:div 'class "t
2880: 69 64 64 6c 65 72 22 0a 09 20 20 20 28 73 3a 64 iddler".. (s:d
2890: 69 76 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c iv 'class "tiddl
28a0: 65 72 2d 6d 65 6e 75 22 0a 09 09 20 20 28 69 66 er-menu"... (if
28b0: 20 28 65 71 75 61 6c 3f 20 22 4d 61 69 6e 4d 65 (equal? "MainMe
28c0: 6e 75 22 20 28 74 77 69 6b 69 3a 74 69 64 64 6c nu" (twiki:tiddl
28d0: 65 72 2d 67 65 74 2d 6e 61 6d 65 20 74 69 64 64 er-get-name tidd
28e0: 6c 65 72 29 29 0a 09 09 20 20 20 20 20 20 28 69 ler))... (i
28f0: 66 20 65 64 69 74 2d 61 6c 6c 6f 77 65 64 0a 09 f edit-allowed..
2900: 09 09 20 20 28 6c 69 73 74 20 28 73 3a 61 20 22 .. (list (s:a "
2910: 65 64 69 74 22 20 27 68 72 65 66 0a 09 09 09 09 edit" 'href.....
2920: 20 20 20 20 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 (s:link-to
2930: 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d (twiki:get-link-
2940: 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 back-to-current)
2950: 0a 09 09 09 09 09 09 27 65 64 69 74 5f 74 69 64 .......'edit_tid
2960: 64 6c 65 72 20 28 74 77 69 6b 69 3a 74 69 64 64 dler (twiki:tidd
2970: 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 6c ler-get-id tiddl
2980: 65 72 29 29 29 29 0a 09 09 09 20 20 27 28 29 29 er)))).... '())
2990: 0a 09 09 20 20 20 20 20 20 28 73 3a 64 69 76 20 ... (s:div
29a0: 27 63 6c 61 73 73 20 22 74 69 64 64 6c 65 72 2d 'class "tiddler-
29b0: 6d 65 6e 75 2d 69 6e 74 65 72 6e 61 6c 22 0a 09 menu-internal"..
29c0: 09 20 20 20 20 20 20 20 28 73 3a 61 20 22 63 6c . (s:a "cl
29d0: 6f 73 65 22 20 27 68 72 65 66 20 28 73 3a 6c 69 ose" 'href (s:li
29e0: 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 nk-to (twiki:get
29f0: 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 -link-back-to-cu
2a00: 72 72 65 6e 74 29 20 27 63 6c 6f 73 65 5f 74 69 rrent) 'close_ti
2a10: 64 64 6c 65 72 20 28 74 77 69 6b 69 3a 74 69 64 ddler (twiki:tid
2a20: 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 dler-get-id tidd
2a30: 6c 65 72 29 29 29 20 22 2e 22 0a 09 09 20 20 20 ler))) "."...
2a40: 20 20 20 20 28 73 3a 61 20 22 63 6c 6f 73 65 20 (s:a "close
2a50: 6f 74 68 65 72 73 22 20 27 68 72 65 66 20 28 73 others" 'href (s
2a60: 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a :link-to (twiki:
2a70: 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f get-link-back-to
2a80: 2d 63 75 72 72 65 6e 74 29 20 27 63 6c 6f 73 65 -current) 'close
2a90: 5f 6f 74 68 65 72 5f 74 69 64 64 6c 65 72 73 20 _other_tiddlers
2aa0: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
2ab0: 65 74 2d 69 64 20 74 69 64 64 6c 65 72 29 29 29 et-id tiddler)))
2ac0: 20 22 2e 22 0a 09 09 20 20 20 20 20 20 20 28 69 "."... (i
2ad0: 66 20 65 64 69 74 2d 61 6c 6c 6f 77 65 64 0a 09 f edit-allowed..
2ae0: 09 09 20 20 20 28 73 3a 61 20 22 65 64 69 74 22 .. (s:a "edit"
2af0: 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 'href (s:link-
2b00: 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 to (twiki:get-li
2b10: 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 nk-back-to-curre
2b20: 6e 74 29 20 27 65 64 69 74 5f 74 69 64 64 6c 65 nt) 'edit_tiddle
2b30: 72 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 r (twiki:tiddler
2b40: 2d 67 65 74 2d 69 64 20 74 69 64 64 6c 65 72 29 -get-id tiddler)
2b50: 29 29 0a 09 09 09 20 20 20 27 28 29 29 29 29 29 )).... '()))))
2b60: 0a 09 20 20 20 20 28 73 3a 70 20 28 74 77 69 6b .. (s:p (twik
2b70: 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 64 61 74 20 i:dat->html dat
2b80: 77 69 6b 69 29 29 29 29 29 0a 0a 28 64 65 66 69 wiki)))))..(defi
2b90: 6e 65 20 28 74 77 69 6b 69 3a 76 69 65 77 2d 74 ne (twiki:view-t
2ba0: 69 64 64 6c 65 72 20 64 62 20 20 74 6b 65 79 20 iddler db tkey
2bb0: 77 69 64 20 74 69 64 64 6c 65 72 20 77 69 6b 69 wid tiddler wiki
2bc0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 74 2d ). (let* ((dat-
2bd0: 69 64 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 id (twiki:tiddle
2be0: 72 2d 67 65 74 2d 64 61 74 2d 69 64 20 74 69 64 r-get-dat-id tid
2bf0: 64 6c 65 72 29 29 0a 09 20 28 64 61 74 20 20 20 dler)).. (dat
2c00: 20 28 74 77 69 6b 69 3a 67 65 74 2d 64 61 74 20 (twiki:get-dat
2c10: 64 62 20 64 61 74 2d 69 64 29 29 0a 09 20 28 74 db dat-id)).. (t
2c20: 6e 75 6d 20 20 20 28 74 77 69 6b 69 3a 74 69 64 num (twiki:tid
2c30: 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 dler-get-id tidd
2c40: 6c 65 72 29 29 29 0a 20 20 20 20 3b 3b 20 28 73 ler))). ;; (s
2c50: 3a 6c 6f 67 20 22 74 77 69 64 3a 20 22 20 64 61 :log "twid: " da
2c60: 74 2d 69 64 20 22 20 64 61 74 3a 20 22 20 64 61 t-id " dat: " da
2c70: 74 29 0a 20 20 20 20 28 74 77 69 6b 69 3a 76 69 t). (twiki:vi
2c80: 65 77 20 64 61 74 20 20 74 6b 65 79 20 77 69 64 ew dat tkey wid
2c90: 20 74 69 64 64 6c 65 72 20 77 69 6b 69 29 29 29 tiddler wiki)))
2ca0: 0a 0a 3b 3b 20 63 61 6c 6c 20 77 69 74 68 20 70 ..;; call with p
2cb0: 61 72 61 6d 20 3d 3e 20 61 63 74 69 6f 6e 2d 6e aram => action-n
2cc0: 61 6d 65 2d 6b 65 79 20 65 2e 67 2e 20 73 61 76 ame-key e.g. sav
2cd0: 65 2d 62 57 46 70 62 67 5f 5f 2d 61 47 56 73 62 e-bWFpbg__-aGVsb
2ce0: 47 38 67 62 6e 56 79 63 32 55 5f 20 28 73 61 76 G8gbnVyc2U_ (sav
2cf0: 65 20 6d 61 69 6e 20 22 68 65 6c 6c 6f 20 6e 75 e main "hello nu
2d00: 72 73 65 22 29 0a 3b 3b 20 74 68 69 73 20 6f 6e rse").;; this on
2d10: 65 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e e is called when
2d20: 20 61 6e 20 65 64 69 74 20 66 6f 72 6d 20 69 73 an edit form is
2d30: 20 73 75 62 6d 69 74 74 65 64 20 28 69 2e 65 2e submitted (i.e.
2d40: 20 50 4f 53 54 29 0a 28 64 65 66 69 6e 65 20 28 POST).(define (
2d50: 74 77 69 6b 69 3a 61 63 74 69 6f 6e 20 70 61 72 twiki:action par
2d60: 61 6d 73 29 0a 20 20 28 69 66 20 28 61 6e 64 20 ams). (if (and
2d70: 28 6c 69 73 74 3f 20 70 61 72 61 6d 73 29 0a 09 (list? params)..
2d80: 20 20 20 28 3e 20 28 6c 65 6e 67 74 68 20 70 61 (> (length pa
2d90: 72 61 6d 73 29 20 30 29 29 0a 20 20 20 20 20 20 rams) 0)).
2da0: 28 6c 65 74 2a 20 28 28 63 6d 64 6c 6e 20 28 73 (let* ((cmdln (s
2db0: 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 63 61 72 tring-split (car
2dc0: 20 70 61 72 61 6d 73 29 20 22 2d 22 29 29 0a 09 params) "-"))..
2dd0: 20 20 20 20 20 28 63 6d 64 20 20 20 28 73 74 72 (cmd (str
2de0: 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 63 61 72 ing->symbol (car
2df0: 20 63 6d 64 6c 6e 29 29 29 0a 09 20 20 20 20 20 cmdln)))..
2e00: 28 74 6b 65 79 20 20 28 74 77 69 6b 69 3a 77 65 (tkey (twiki:we
2e10: 62 36 34 64 65 63 20 28 63 61 64 64 72 20 63 6d b64dec (caddr cm
2e20: 64 6c 6e 29 29 29 0a 09 20 20 20 20 20 28 77 69 dln))).. (wi
2e30: 64 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d d (string->num
2e40: 62 65 72 20 28 63 61 64 72 20 63 6d 64 6c 6e 29 ber (cadr cmdln)
2e50: 29 29 0a 09 20 20 20 20 20 28 74 64 62 20 20 20 )).. (tdb
2e60: 28 74 77 69 6b 69 3a 6f 70 65 6e 2d 64 62 20 74 (twiki:open-db t
2e70: 6b 65 79 29 29 29 0a 09 28 73 3a 6c 6f 67 20 22 key)))..(s:log "
2e80: 63 6d 64 6c 6e 3a 20 22 20 63 6d 64 6c 6e 20 22 cmdln: " cmdln "
2e90: 20 63 6d 64 3a 20 22 20 63 6d 64 20 22 20 74 6b cmd: " cmd " tk
2ea0: 65 79 3a 20 22 20 74 6b 65 79 20 22 20 77 69 64 ey: " tkey " wid
2eb0: 3a 20 22 20 77 69 64 29 0a 09 28 63 61 73 65 20 : " wid)..(case
2ec0: 63 6d 64 0a 09 20 20 28 28 73 61 76 65 29 0a 09 cmd.. ((save)..
2ed0: 20 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 63 (twiki:save-c
2ee0: 75 72 72 2d 74 69 64 64 6c 65 72 20 74 64 62 20 urr-tiddler tdb
2ef0: 77 69 64 29 29 0a 09 20 20 28 28 73 61 76 65 70 wid)).. ((savep
2f00: 69 63 29 0a 09 20 20 20 28 73 3a 6c 6f 67 20 22 ic).. (s:log "
2f10: 74 77 69 6b 69 3a 61 63 74 69 6f 6e 20 67 6f 74 twiki:action got
2f20: 20 74 6f 20 73 61 76 65 70 69 63 22 29 0a 09 20 to savepic")..
2f30: 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 70 69 (twiki:save-pi
2f40: 63 2d 66 72 6f 6d 2d 66 6f 72 6d 20 74 64 62 20 c-from-form tdb
2f50: 77 69 64 29 29 0a 09 20 20 28 28 63 61 6e 63 65 wid)).. ((cance
2f60: 6c 29 20 3b 3b 20 64 65 70 72 65 63 61 74 65 64 l) ;; deprecated
2f70: 2e 20 55 73 65 20 61 20 6c 69 6e 6b 20 66 6f 72 . Use a link for
2f80: 20 74 68 69 73 20 28 69 2e 65 20 69 6e 20 74 68 this (i.e in th
2f90: 65 20 74 77 69 6b 69 3a 74 77 69 6b 69 20 70 72 e twiki:twiki pr
2fa0: 6f 63 0a 09 20 20 20 28 73 3a 64 65 6c 21 20 28 oc.. (s:del! (
2fb0: 63 6f 6e 63 20 22 43 55 52 52 45 4e 54 5f 54 57 conc "CURRENT_TW
2fc0: 49 44 4c 45 52 5f 55 4e 44 45 52 5f 45 44 49 54 IDLER_UNDER_EDIT
2fd0: 3a 22 20 77 69 64 29 29 0a 09 20 20 20 29 29 29 :" wid)).. )))
2fe0: 29 29 0a 0a 3b 3b 20 67 65 6e 65 72 61 74 65 20 ))..;; generate
2ff0: 61 20 66 6f 72 6d 20 66 6f 72 20 65 64 69 74 69 a form for editi
3000: 6e 67 20 61 20 74 77 69 64 64 6c 65 72 20 74 6e ng a twiddler tn
3010: 75 6d 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b um.(define (twik
3020: 69 3a 65 64 69 74 2d 74 69 64 64 6c 65 72 20 64 i:edit-tiddler d
3030: 62 20 74 6b 65 79 20 77 69 64 20 74 6e 75 6d 29 b tkey wid tnum)
3040: 0a 20 20 28 73 3a 6c 6f 67 20 22 74 77 69 6b 69 . (s:log "twiki
3050: 3a 65 64 69 74 2d 74 69 64 64 6c 65 72 3a 20 74 :edit-tiddler: t
3060: 6b 65 79 3d 22 20 74 6b 65 79 20 22 20 77 69 64 key=" tkey " wid
3070: 3a 20 22 20 77 69 64 29 0a 20 20 28 6c 65 74 2a : " wid). (let*
3080: 20 28 28 65 6e 63 2d 6b 65 79 20 20 28 74 77 69 ((enc-key (twi
3090: 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 6b 65 79 ki:web64enc tkey
30a0: 29 29 0a 09 20 28 74 69 64 64 61 74 73 20 20 28 )).. (tiddats (
30b0: 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 twiki:get-tiddle
30c0: 72 73 2d 62 79 2d 6e 75 6d 20 64 62 20 77 69 64 rs-by-num db wid
30d0: 20 28 6c 69 73 74 20 74 6e 75 6d 29 29 29 29 0a (list tnum)))).
30e0: 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 74 (if (null? t
30f0: 69 64 64 61 74 73 29 0a 09 28 6c 65 74 2a 20 28 iddats)..(let* (
3100: 28 74 69 64 20 20 20 20 30 29 0a 09 20 20 20 20 (tid 0)..
3110: 20 20 20 28 64 61 74 2d 69 64 20 30 29 29 0a 09 (dat-id 0))..
3120: 20 20 28 73 3a 73 65 74 21 20 22 74 77 69 6b 69 (s:set! "twiki
3130: 5f 74 69 74 6c 65 22 20 22 22 29 0a 09 20 20 28 _title" "").. (
3140: 73 3a 73 65 74 21 20 22 74 77 69 6b 69 5f 62 6f s:set! "twiki_bo
3150: 64 79 22 20 20 22 22 29 29 0a 09 28 6c 65 74 2a dy" ""))..(let*
3160: 20 28 28 74 69 64 20 20 20 20 28 63 61 72 20 74 ((tid (car t
3170: 69 64 64 61 74 73 29 29 0a 09 20 20 20 20 20 20 iddats))..
3180: 20 28 64 61 74 2d 69 64 20 28 74 77 69 6b 69 3a (dat-id (twiki:
3190: 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 2d tiddler-get-dat-
31a0: 69 64 20 74 69 64 29 29 29 0a 09 20 20 3b 3b 20 id tid))).. ;;
31b0: 28 73 3a 6c 6f 67 20 22 74 69 64 3a 20 22 20 74 (s:log "tid: " t
31c0: 69 64 20 22 20 64 61 74 2d 69 64 3a 20 22 20 64 id " dat-id: " d
31d0: 61 74 2d 69 64 29 0a 09 20 20 28 73 3a 73 65 74 at-id).. (s:set
31e0: 21 20 22 74 77 69 6b 69 5f 74 69 74 6c 65 22 20 ! "twiki_title"
31f0: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
3200: 65 74 2d 6e 61 6d 65 20 74 69 64 29 29 0a 09 20 et-name tid))..
3210: 20 28 73 3a 73 65 74 21 20 22 74 77 69 6b 69 5f (s:set! "twiki_
3220: 62 6f 64 79 22 20 20 28 74 77 69 6b 69 3a 67 65 body" (twiki:ge
3230: 74 2d 64 61 74 20 64 62 20 64 61 74 2d 69 64 29 t-dat db dat-id)
3240: 29 29 29 0a 20 20 20 20 28 73 3a 66 6f 72 6d 20 ))). (s:form
3250: 27 61 63 74 69 6f 6e 20 28 73 3a 6c 69 6e 6b 2d 'action (s:link-
3260: 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 to (twiki:get-li
3270: 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 nk-back-to-curre
3280: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 20 27 61 nt).... 'a
3290: 63 74 69 6f 6e 20 28 63 6f 6e 63 20 22 74 77 69 ction (conc "twi
32a0: 6b 69 2e 73 61 76 65 2d 22 20 28 6e 75 6d 62 65 ki.save-" (numbe
32b0: 72 2d 3e 73 74 72 69 6e 67 20 77 69 64 29 20 22 r->string wid) "
32c0: 2d 22 20 65 6e 63 2d 6b 65 79 29 29 0a 09 20 20 -" enc-key))..
32d0: 20 20 27 6d 65 74 68 6f 64 20 22 70 6f 73 74 22 'method "post"
32e0: 20 3b 3b 20 27 74 77 69 6b 69 6e 61 6d 65 20 74 ;; 'twikiname t
32f0: 6b 65 79 20 3b 3b 20 64 6f 6e 65 2c 20 63 61 6e key ;; done, can
3300: 63 65 6c 2c 20 64 65 6c 65 74 65 0a 09 20 20 20 cel, delete..
3310: 20 28 73 3a 69 6e 70 75 74 20 27 74 79 70 65 20 (s:input 'type
3320: 22 73 75 62 6d 69 74 22 20 20 20 27 6e 61 6d 65 "submit" 'name
3330: 20 22 66 6f 72 6d 2d 6e 61 6d 65 22 20 27 76 61 "form-name" 'va
3340: 6c 75 65 20 22 73 61 76 65 22 20 27 74 77 69 6b lue "save" 'twik
3350: 69 6e 61 6d 65 20 74 6b 65 79 29 0a 09 20 20 20 iname tkey)..
3360: 20 3b 3b 20 28 73 3a 61 20 22 64 6f 6e 65 22 20 ;; (s:a "done"
3370: 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 'href (s:link-to
3380: 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b (twiki:get-link
3390: 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 -back-to-current
33a0: 29 20 27 73 61 76 65 5f 74 6d 65 6e 75 20 74 6e ) 'save_tmenu tn
33b0: 75 6d 29 29 0a 09 20 20 20 20 28 73 3a 61 20 22 um)).. (s:a "
33c0: 63 61 6e 63 65 6c 22 20 27 68 72 65 66 20 28 73 cancel" 'href (s
33d0: 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a :link-to (twiki:
33e0: 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f get-link-back-to
33f0: 2d 63 75 72 72 65 6e 74 29 20 27 63 61 6e 63 65 -current) 'cance
3400: 6c 5f 74 65 64 69 74 20 74 6e 75 6d 29 29 20 22 l_tedit tnum)) "
3410: 2e 22 0a 09 20 20 20 20 28 73 3a 61 20 22 64 65 .".. (s:a "de
3420: 6c 65 74 65 22 20 27 68 72 65 66 20 28 73 3a 6c lete" 'href (s:l
3430: 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 ink-to (twiki:ge
3440: 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 t-link-back-to-c
3450: 75 72 72 65 6e 74 29 20 27 64 65 6c 65 74 65 5f urrent) 'delete_
3460: 74 69 64 64 6c 65 72 20 74 6e 75 6d 29 29 28 73 tiddler tnum))(s
3470: 3a 62 72 29 0a 09 20 20 20 20 28 73 3a 69 6e 70 :br).. (s:inp
3480: 75 74 2d 70 72 65 73 65 72 76 65 20 27 74 79 70 ut-preserve 'typ
3490: 65 20 22 74 65 78 74 22 20 27 6e 61 6d 65 20 22 e "text" 'name "
34a0: 74 77 69 6b 69 5f 74 69 74 6c 65 22 20 27 73 69 twiki_title" 'si
34b0: 7a 65 20 22 35 38 22 20 27 6d 61 78 6c 65 6e 67 ze "58" 'maxleng
34c0: 74 68 20 22 31 35 30 22 29 0a 09 20 20 20 20 28 th "150").. (
34d0: 73 3a 74 65 78 74 61 72 65 61 2d 70 72 65 73 65 s:textarea-prese
34e0: 72 76 65 20 27 74 79 70 65 20 22 74 65 78 74 61 rve 'type "texta
34f0: 72 65 61 22 20 27 6e 61 6d 65 20 22 74 77 69 6b rea" 'name "twik
3500: 69 5f 62 6f 64 79 22 20 27 72 6f 77 73 20 22 31 i_body" 'rows "1
3510: 30 22 20 27 63 6f 6c 73 20 22 36 35 22 29 0a 09 0" 'cols "65")..
3520: 20 20 20 20 28 73 3a 70 20 22 54 61 67 73 22 20 (s:p "Tags"
3530: 28 73 3a 69 6e 70 75 74 2d 70 72 65 73 65 72 76 (s:input-preserv
3540: 65 20 27 74 79 70 65 20 22 74 65 78 74 22 20 27 e 'type "text" '
3550: 6e 61 6d 65 20 22 74 77 69 6b 69 5f 74 61 67 73 name "twiki_tags
3560: 22 20 27 73 69 7a 65 20 22 35 35 22 20 27 6d 61 " 'size "55" 'ma
3570: 78 6c 65 6e 67 74 68 20 22 31 35 30 22 29 29 29 xlength "150")))
3580: 29 29 0a 0a 3b 3b 20 73 61 76 65 20 61 20 74 69 ))..;; save a ti
3590: 64 64 6c 65 72 20 74 6f 20 74 68 65 20 64 62 20 ddler to the db
35a0: 66 6f 72 20 74 68 65 20 74 77 69 6b 69 20 74 77 for the twiki tw
35b0: 69 6b 2c 20 67 65 74 74 69 6e 67 20 64 61 74 61 ik, getting data
35c0: 20 66 72 6f 6d 20 74 68 65 20 49 4e 50 55 54 0a from the INPUT.
35d0: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 73 (define (twiki:s
35e0: 61 76 65 2d 63 75 72 72 2d 74 69 64 64 6c 65 72 ave-curr-tiddler
35f0: 20 74 64 62 20 77 69 64 29 0a 20 20 28 66 6f 72 tdb wid). (for
3600: 6d 64 61 74 3a 70 72 69 6e 74 61 6c 6c 20 28 73 mdat:printall (s
3610: 64 61 74 2d 67 65 74 2d 66 6f 72 6d 64 61 74 20 dat-get-formdat
3620: 73 3a 73 65 73 73 69 6f 6e 29 20 73 3a 6c 6f 67 s:session) s:log
3630: 29 0a 20 20 28 6c 65 74 2a 20 28 28 68 65 61 64 ). (let* ((head
3640: 69 6e 67 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 ing (s:get-input
3650: 20 27 74 77 69 6b 69 5f 74 69 74 6c 65 29 29 0a 'twiki_title)).
3660: 09 20 28 62 6f 64 79 20 20 20 20 28 73 3a 67 65 . (body (s:ge
3670: 74 2d 69 6e 70 75 74 20 27 74 77 69 6b 69 5f 62 t-input 'twiki_b
3680: 6f 64 79 29 29 0a 09 20 28 74 61 67 73 20 20 20 ody)).. (tags
3690: 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 20 27 74 (s:get-input 't
36a0: 77 69 6b 69 5f 74 61 67 73 29 29 0a 09 20 28 75 wiki_tags)).. (u
36b0: 69 64 20 20 20 20 20 28 74 77 69 6b 69 3a 67 65 id (twiki:ge
36c0: 74 2d 69 64 29 29 29 0a 20 20 20 20 3b 3b 20 28 t-id))). ;; (
36d0: 73 3a 6c 6f 67 20 22 74 77 69 6b 69 3a 73 61 76 s:log "twiki:sav
36e0: 65 2d 63 75 72 72 2d 74 69 64 64 6c 65 72 20 68 e-curr-tiddler h
36f0: 65 61 64 69 6e 67 3a 20 22 20 68 65 61 64 69 6e eading: " headin
3700: 67 20 22 20 62 6f 64 79 3a 20 22 20 62 6f 64 79 g " body: " body
3710: 20 22 20 74 61 67 73 3a 20 22 20 74 61 67 73 29 " tags: " tags)
3720: 0a 20 20 20 20 28 73 3a 73 65 74 21 20 27 74 77 . (s:set! 'tw
3730: 69 6b 69 5f 74 69 74 6c 65 20 68 65 61 64 69 6e iki_title headin
3740: 67 29 0a 20 20 20 20 28 69 66 20 62 6f 64 79 0a g). (if body.
3750: 09 28 62 65 67 69 6e 0a 09 20 20 28 73 65 74 21 .(begin.. (set!
3760: 20 62 6f 64 79 20 28 73 74 72 69 6e 67 2d 63 68 body (string-ch
3770: 6f 6d 70 20 62 6f 64 79 29 29 0a 09 20 20 28 73 omp body)).. (s
3780: 3a 73 65 74 21 20 27 74 77 69 6b 69 5f 62 6f 64 :set! 'twiki_bod
3790: 79 20 20 62 6f 64 79 29 29 29 0a 20 20 20 20 28 y body))). (
37a0: 73 3a 73 65 74 21 20 27 74 77 69 6b 69 5f 74 61 s:set! 'twiki_ta
37b0: 67 73 20 20 74 61 67 73 29 0a 20 20 20 20 28 73 gs tags). (s
37c0: 3a 64 65 6c 21 20 28 63 6f 6e 63 20 22 43 55 52 :del! (conc "CUR
37d0: 52 45 4e 54 5f 54 57 49 44 4c 45 52 5f 55 4e 44 RENT_TWIDLER_UND
37e0: 45 52 5f 45 44 49 54 3a 22 20 77 69 64 29 29 0a ER_EDIT:" wid)).
37f0: 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 28 (let ((res (
3800: 74 77 69 6b 69 3a 73 61 76 65 2d 74 69 64 64 6c twiki:save-tiddl
3810: 65 72 20 74 64 62 20 68 65 61 64 69 6e 67 20 62 er tdb heading b
3820: 6f 64 79 20 74 61 67 73 20 77 69 64 20 75 69 64 ody tags wid uid
3830: 29 29 29 0a 20 20 20 20 20 20 3b 3b 20 4e 6f 77 ))). ;; Now
3840: 2c 20 72 65 70 6c 61 63 65 20 74 68 69 73 20 74 , replace this t
3850: 77 69 64 64 6c 65 72 20 6e 75 6d 62 65 72 20 69 widdler number i
3860: 6e 20 74 68 65 20 76 69 65 77 20 6c 69 73 74 20 n the view list
3870: 77 69 74 68 20 0a 20 20 20 20 20 20 3b 3b 20 74 with . ;; t
3880: 68 65 20 6e 65 77 20 6e 75 6d 62 65 72 20 66 72 he new number fr
3890: 6f 6d 20 74 68 65 20 64 62 0a 20 20 20 20 20 20 om the db.
38a0: 28 74 77 69 6b 69 3a 6e 6f 72 6d 61 6c 69 7a 65 (twiki:normalize
38b0: 2d 63 75 72 72 65 6e 74 2d 74 77 69 64 64 6c 65 -current-twiddle
38c0: 72 73 20 74 64 62 20 77 69 64 29 0a 20 20 20 20 rs tdb wid).
38d0: 20 20 28 73 3a 64 65 6c 21 20 27 74 77 69 6b 69 (s:del! 'twiki
38e0: 5f 74 69 74 6c 65 29 0a 20 20 20 20 20 20 28 73 _title). (s
38f0: 3a 64 65 6c 21 20 27 74 77 69 6b 69 5f 62 6f 64 :del! 'twiki_bod
3900: 79 29 0a 20 20 20 20 20 20 28 73 3a 64 65 6c 21 y). (s:del!
3910: 20 27 74 77 69 6b 69 5f 74 61 67 73 29 0a 20 20 'twiki_tags).
3920: 20 20 20 20 72 65 73 29 0a 20 20 20 20 29 29 0a res). )).
3930: 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a .(define (twiki:
3940: 6e 6f 72 6d 61 6c 69 7a 65 2d 63 75 72 72 65 6e normalize-curren
3950: 74 2d 74 77 69 64 64 6c 65 72 73 20 74 64 62 20 t-twiddlers tdb
3960: 77 69 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 63 wid). (let* ((c
3970: 76 61 72 20 20 20 20 20 20 28 63 6f 6e 63 20 22 var (conc "
3980: 43 55 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 53 CURRENT_TWIDLERS
3990: 3a 22 20 77 69 64 29 29 0a 09 20 28 63 75 72 72 :" wid)).. (curr
39a0: 2d 73 6c 73 74 20 28 73 3a 67 65 74 20 63 76 61 -slst (s:get cva
39b0: 72 29 29 0a 09 20 28 63 75 72 72 2d 6c 73 74 20 r)).. (curr-lst
39c0: 20 28 6d 61 70 20 73 74 72 69 6e 67 2d 3e 6e 75 (map string->nu
39d0: 6d 62 65 72 20 28 73 74 72 69 6e 67 2d 73 70 6c mber (string-spl
39e0: 69 74 20 63 75 72 72 2d 73 6c 73 74 20 22 2c 22 it curr-slst ","
39f0: 29 29 29 0a 09 20 28 74 64 6c 72 73 20 20 20 20 ))).. (tdlrs
3a00: 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 (twiki:get-tidd
3a10: 6c 65 72 73 2d 62 79 2d 6e 75 6d 20 74 64 62 20 lers-by-num tdb
3a20: 77 69 64 20 63 75 72 72 2d 6c 73 74 29 29 0a 09 wid curr-lst))..
3a30: 20 28 6e 61 6d 65 73 20 20 20 20 20 28 72 65 6d (names (rem
3a40: 6f 76 65 20 28 6c 61 6d 62 64 61 20 28 74 29 28 ove (lambda (t)(
3a50: 73 74 72 69 6e 67 3d 3f 20 22 4d 61 69 6e 4d 65 string=? "MainMe
3a60: 6e 75 22 20 74 29 29 0a 09 09 09 20 20 20 20 28 nu" t)).... (
3a70: 6d 61 70 20 74 77 69 6b 69 3a 74 69 64 64 6c 65 map twiki:tiddle
3a80: 72 2d 67 65 74 2d 6e 61 6d 65 20 74 64 6c 72 73 r-get-name tdlrs
3a90: 29 29 29 0a 09 20 28 6e 65 77 6e 75 6d 73 20 20 ))).. (newnums
3aa0: 20 28 6d 61 70 20 74 77 69 6b 69 3a 74 69 64 64 (map twiki:tidd
3ab0: 6c 65 72 2d 67 65 74 2d 69 64 20 0a 09 09 09 20 ler-get-id ....
3ac0: 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 74 6e (map (lambda (tn
3ad0: 29 0a 09 09 09 09 28 74 77 69 6b 69 3a 67 65 74 ).....(twiki:get
3ae0: 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d 65 -tiddler-by-name
3af0: 20 74 64 62 20 77 69 64 20 74 6e 29 29 0a 09 09 tdb wid tn))...
3b00: 09 20 20 20 20 20 20 6e 61 6d 65 73 29 29 29 29 . names))))
3b10: 0a 20 20 20 20 28 73 3a 73 65 74 21 20 63 76 61 . (s:set! cva
3b20: 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 r (string-inters
3b30: 70 65 72 73 65 20 28 6d 61 70 20 6e 75 6d 62 65 perse (map numbe
3b40: 72 2d 3e 73 74 72 69 6e 67 20 6e 65 77 6e 75 6d r->string newnum
3b50: 73 29 0a 09 09 09 09 20 20 20 20 20 22 2c 22 29 s)..... ",")
3b60: 29 29 29 0a 20 20 20 20 0a 3b 3b 20 67 65 6e 65 ))). .;; gene
3b70: 72 69 63 20 73 61 76 65 20 74 69 64 64 6c 65 72 ric save tiddler
3b80: 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a .(define (twiki:
3b90: 73 61 76 65 2d 74 69 64 64 6c 65 72 20 74 64 62 save-tiddler tdb
3ba0: 20 68 65 61 64 69 6e 67 20 62 6f 64 79 20 74 61 heading body ta
3bb0: 67 73 20 77 69 64 20 75 69 64 29 0a 20 20 20 20 gs wid uid).
3bc0: 28 69 66 20 28 6d 69 73 63 3a 6e 6f 6e 2d 7a 65 (if (misc:non-ze
3bd0: 72 6f 2d 73 74 72 69 6e 67 20 68 65 61 64 69 6e ro-string headin
3be0: 67 29 0a 09 28 6c 65 74 2a 20 28 28 70 72 65 76 g)..(let* ((prev
3bf0: 2d 74 69 64 20 28 74 77 69 6b 69 3a 67 65 74 2d -tid (twiki:get-
3c00: 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d 65 20 tiddler-by-name
3c10: 74 64 62 20 77 69 64 20 68 65 61 64 69 6e 67 29 tdb wid heading)
3c20: 29 0a 09 20 20 20 20 20 20 20 28 70 72 65 76 2d ).. (prev-
3c30: 64 61 74 2d 69 64 20 28 69 66 20 70 72 65 76 2d dat-id (if prev-
3c40: 74 69 64 20 0a 09 09 09 09 28 74 77 69 6b 69 3a tid .....(twiki:
3c50: 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 2d tiddler-get-dat-
3c60: 69 64 20 70 72 65 76 2d 74 69 64 29 0a 09 09 09 id prev-tid)....
3c70: 09 2d 31 29 29 0a 09 20 20 20 20 20 20 20 28 64 .-1)).. (d
3c80: 61 74 2d 69 64 20 28 74 77 69 6b 69 3a 73 61 76 at-id (twiki:sav
3c90: 65 2d 64 61 74 20 74 64 62 20 62 6f 64 79 20 30 e-dat tdb body 0
3ca0: 29 29 29 20 3b 3b 20 30 3d 74 65 78 74 0a 09 20 ))) ;; 0=text..
3cb0: 20 3b 3b 20 28 73 3a 6c 6f 67 20 22 74 77 69 6b ;; (s:log "twik
3cc0: 69 3a 73 61 76 65 2d 74 69 64 64 6c 65 72 20 64 i:save-tiddler d
3cd0: 61 74 2d 69 64 3a 20 22 20 64 61 74 2d 69 64 20 at-id: " dat-id
3ce0: 22 20 62 6f 64 79 3a 20 22 20 62 6f 64 79 29 0a " body: " body).
3cf0: 09 20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 70 . (if (equal? p
3d00: 72 65 76 2d 64 61 74 2d 69 64 20 64 61 74 2d 69 rev-dat-id dat-i
3d10: 64 29 20 3b 3b 20 6e 6f 20 6e 65 65 64 20 74 6f d) ;; no need to
3d20: 20 69 6e 73 65 72 74 20 61 20 6e 65 77 20 72 65 insert a new re
3d30: 63 6f 72 64 20 69 66 20 74 68 65 20 64 61 74 20 cord if the dat
3d40: 64 69 64 6e 27 74 20 63 68 61 6e 67 65 0a 09 20 didn't change..
3d50: 20 20 20 20 20 23 74 0a 09 20 20 20 20 20 20 28 #t.. (
3d60: 64 62 69 3a 65 78 65 63 20 74 64 62 20 0a 09 09 dbi:exec tdb ...
3d70: 09 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 69 ."INSERT INTO ti
3d80: 64 64 6c 65 72 73 20 28 77 69 6b 69 5f 69 64 2c ddlers (wiki_id,
3d90: 6e 61 6d 65 2c 64 61 74 5f 69 64 2c 63 72 65 61 name,dat_id,crea
3da0: 74 65 64 5f 6f 6e 2c 6f 77 6e 65 72 5f 69 64 29 ted_on,owner_id)
3db0: 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f 2c VALUES(?,?,?,?,
3dc0: 3f 29 3b 22 0a 09 09 09 77 69 64 20 68 65 61 64 ?);"....wid head
3dd0: 69 6e 67 20 64 61 74 2d 69 64 20 28 63 75 72 72 ing dat-id (curr
3de0: 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 75 69 64 ent-seconds) uid
3df0: 29 29 0a 09 20 20 23 74 29 20 3b 3b 20 73 75 63 )).. #t) ;; suc
3e00: 63 65 73 73 0a 09 23 66 29 29 20 20 3b 3b 20 6e cess..#f)) ;; n
3e10: 6f 6e 2d 73 75 63 63 65 73 73 0a 0a 3b 3b 20 74 on-success..;; t
3e20: 65 78 74 3d 30 2c 20 6a 70 67 3d 31 2c 20 70 6e ext=0, jpg=1, pn
3e30: 67 3d 32 0a 28 64 65 66 69 6e 65 20 28 74 77 69 g=2.(define (twi
3e40: 6b 69 3a 73 61 76 65 2d 64 61 74 20 64 62 20 64 ki:save-dat db d
3e50: 61 74 20 74 79 70 65 29 0a 20 20 28 6c 65 74 2a at type). (let*
3e60: 20 28 28 6d 64 35 73 75 6d 20 28 6d 64 35 2d 64 ((md5sum (md5-d
3e70: 69 67 65 73 74 20 64 61 74 29 29 0a 09 20 28 64 igest dat)).. (d
3e80: 61 74 69 64 20 20 28 74 77 69 6b 69 3a 64 61 74 atid (twiki:dat
3e90: 2d 65 78 69 73 74 73 3f 20 64 62 20 6d 64 35 73 -exists? db md5s
3ea0: 75 6d 20 74 79 70 65 29 29 0a 09 20 28 64 61 74 um type)).. (dat
3eb0: 62 6c 6f 62 20 28 69 66 20 28 73 74 72 69 6e 67 blob (if (string
3ec0: 3f 20 64 61 74 29 0a 09 09 20 20 20 20 20 20 28 ? dat)... (
3ed0: 73 74 72 69 6e 67 2d 3e 62 6c 6f 62 20 64 61 74 string->blob dat
3ee0: 29 0a 09 09 20 20 20 20 20 20 64 61 74 29 29 29 )... dat)))
3ef0: 0a 20 20 20 20 28 69 66 20 64 61 74 69 64 0a 09 . (if datid..
3f00: 64 61 74 69 64 0a 09 28 62 65 67 69 6e 0a 09 20 datid..(begin..
3f10: 20 28 63 61 73 65 20 74 79 70 65 0a 09 20 20 20 (case type..
3f20: 20 28 28 30 29 20 20 20 28 64 62 69 3a 65 78 65 ((0) (dbi:exe
3f30: 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 c db "INSERT INT
3f40: 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c 64 O dats (md5sum,d
3f50: 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 28 at,type) VALUES(
3f60: 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d 20 ?,?,?);" md5sum
3f70: 64 61 74 62 6c 6f 62 20 30 29 29 0a 09 20 20 20 datblob 0))..
3f80: 20 28 28 31 29 20 20 20 28 64 62 69 3a 65 78 65 ((1) (dbi:exe
3f90: 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 c db "INSERT INT
3fa0: 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c 64 O dats (md5sum,d
3fb0: 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 28 at,type) VALUES(
3fc0: 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d 20 ?,?,?);" md5sum
3fd0: 64 61 74 62 6c 6f 62 20 31 29 29 0a 09 20 20 20 datblob 1))..
3fe0: 20 28 65 6c 73 65 20 20 28 64 62 69 3a 65 78 65 (else (dbi:exe
3ff0: 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 c db "INSERT INT
4000: 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c 64 O dats (md5sum,d
4010: 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 28 at,type) VALUES(
4020: 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d 20 ?,?,?);" md5sum
4030: 64 61 74 62 6c 6f 62 20 74 79 70 65 29 29 29 0a datblob type))).
4040: 09 20 20 28 74 77 69 6b 69 3a 64 61 74 2d 65 78 . (twiki:dat-ex
4050: 69 73 74 73 3f 20 64 62 20 6d 64 35 73 75 6d 20 ists? db md5sum
4060: 74 79 70 65 29 29 29 29 29 0a 20 20 20 20 20 20 type))))).
4070: 20 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 .(define (twiki
4080: 3a 64 61 74 2d 65 78 69 73 74 73 3f 20 64 62 20 :dat-exists? db
4090: 6d 64 35 73 75 6d 20 74 79 70 65 29 0a 20 20 28 md5sum type). (
40a0: 64 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 20 22 dbi:get-one db "
40b0: 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 64 SELECT id FROM d
40c0: 61 74 73 20 57 48 45 52 45 20 6d 64 35 73 75 6d ats WHERE md5sum
40d0: 3d 3f 20 41 4e 44 20 74 79 70 65 3d 3f 3b 22 20 =? AND type=?;"
40e0: 6d 64 35 73 75 6d 20 74 79 70 65 29 29 0a 0a 28 md5sum type))..(
40f0: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 define (twiki:ge
4100: 74 2d 64 61 74 20 64 62 20 69 64 29 0a 20 20 28 t-dat db id). (
4110: 69 66 20 28 61 6e 64 20 69 64 20 28 6e 75 6d 62 if (and id (numb
4120: 65 72 3f 20 69 64 29 29 0a 20 20 20 20 20 20 28 er? id)). (
4130: 69 66 20 28 3c 20 69 64 20 30 29 0a 09 20 20 22 if (< id 0).. "
4140: 22 0a 09 20 20 28 6c 65 74 20 28 28 72 65 73 20 ".. (let ((res
4150: 28 64 62 69 3a 67 65 74 2d 6f 6e 65 2d 72 6f 77 (dbi:get-one-row
4160: 20 64 62 20 22 53 45 4c 45 43 54 20 64 61 74 2c db "SELECT dat,
4170: 74 79 70 65 20 46 52 4f 4d 20 64 61 74 73 20 57 type FROM dats W
4180: 48 45 52 45 20 69 64 3d 3f 3b 22 20 69 64 29 29 HERE id=?;" id))
4190: 29 0a 09 20 20 20 20 28 69 66 20 72 65 73 0a 09 ).. (if res..
41a0: 09 28 63 61 73 65 20 28 76 65 63 74 6f 72 2d 72 .(case (vector-r
41b0: 65 66 20 72 65 73 20 31 29 0a 09 09 20 20 28 28 ef res 1)... ((
41c0: 30 29 28 62 6c 6f 62 2d 3e 73 74 72 69 6e 67 20 0)(blob->string
41d0: 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 73 20 (vector-ref res
41e0: 30 29 29 29 0a 09 09 20 20 28 65 6c 73 65 20 28 0)))... (else (
41f0: 76 65 63 74 6f 72 2d 72 65 66 20 72 65 73 20 30 vector-ref res 0
4200: 29 29 29 0a 09 09 23 66 29 29 29 0a 20 20 20 20 )))...#f))).
4210: 20 20 23 66 29 29 0a 0a 28 64 65 66 69 6e 65 20 #f))..(define
4220: 28 74 77 69 6b 69 3a 6d 61 69 6e 74 5f 61 72 65 (twiki:maint_are
4230: 61 20 74 64 62 20 77 69 64 20 74 6b 65 79 20 77 a tdb wid tkey w
4240: 69 6b 69 29 0a 20 20 28 6c 65 74 20 28 28 6d 61 iki). (let ((ma
4250: 69 6e 74 20 28 73 3a 67 65 74 2d 70 61 72 61 6d int (s:get-param
4260: 20 27 74 77 69 6b 69 5f 6d 61 69 6e 74 29 29 0a 'twiki_maint)).
4270: 09 28 77 72 69 74 65 2d 70 65 72 6d 20 28 6d 65 .(write-perm (me
4280: 6d 62 65 72 20 27 77 20 28 74 77 69 6b 69 3a 77 mber 'w (twiki:w
4290: 69 6b 69 2d 67 65 74 2d 70 65 72 6d 73 20 77 69 iki-get-perms wi
42a0: 6b 69 29 29 29 29 0a 20 20 20 20 28 73 3a 64 69 ki)))). (s:di
42b0: 76 20 27 63 6c 61 73 73 20 22 74 77 69 6b 69 2d v 'class "twiki-
42c0: 6d 65 6e 75 2d 69 6e 74 65 72 6e 61 6c 22 0a 20 menu-internal".
42d0: 20 20 20 20 28 69 66 20 77 72 69 74 65 2d 70 65 (if write-pe
42e0: 72 6d 0a 09 20 28 6c 69 73 74 20 28 73 3a 61 20 rm.. (list (s:a
42f0: 22 4f 72 70 68 61 6e 73 22 20 20 27 68 72 65 66 "Orphans" 'href
4300: 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 (s:link-to (twi
4310: 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b ki:get-link-back
4320: 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 74 77 -to-current) 'tw
4330: 69 6b 69 5f 6d 61 69 6e 74 20 31 29 29 28 73 3a iki_maint 1))(s:
4340: 62 72 29 0a 09 20 20 20 20 20 20 20 28 73 3a 61 br).. (s:a
4350: 20 22 50 69 63 73 22 20 20 20 20 20 27 68 72 65 "Pics" 'hre
4360: 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 f (s:link-to (tw
4370: 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 iki:get-link-bac
4380: 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 74 k-to-current) 't
4390: 77 69 6b 69 5f 6d 61 69 6e 74 20 32 29 29 28 73 wiki_maint 2))(s
43a0: 3a 62 72 29 0a 09 20 20 20 20 20 20 20 28 73 3a :br).. (s:
43b0: 61 20 22 48 65 6c 70 22 20 20 20 20 20 27 68 72 a "Help" 'hr
43c0: 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 ef (s:link-to (t
43d0: 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 wiki:get-link-ba
43e0: 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 ck-to-current) '
43f0: 74 77 69 6b 69 5f 6d 61 69 6e 74 20 34 29 29 28 twiki_maint 4))(
4400: 73 3a 62 72 29 29 0a 09 20 27 28 29 29 0a 20 20 s:br)).. '()).
4410: 20 20 20 28 73 3a 61 20 22 53 65 61 72 63 68 22 (s:a "Search"
4420: 20 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 'href (s:link
4430: 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c -to (twiki:get-l
4440: 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 ink-back-to-curr
4450: 65 6e 74 29 20 27 74 77 69 6b 69 5f 6d 61 69 6e ent) 'twiki_main
4460: 74 20 33 29 29 28 73 3a 62 72 29 0a 20 20 20 20 t 3))(s:br).
4470: 20 28 63 61 73 65 20 6d 61 69 6e 74 0a 20 20 20 (case maint.
4480: 20 20 20 20 28 28 31 29 0a 09 28 74 77 69 6b 69 ((1)..(twiki
4490: 3a 6c 69 73 74 2d 6f 72 70 68 61 6e 73 20 74 64 :list-orphans td
44a0: 62 29 29 0a 20 20 20 20 20 20 20 28 65 6c 73 65 b)). (else
44b0: 0a 09 20 27 28 29 29 29 29 29 29 0a 0a 3b 3b 3d .. '())))))..;;=
44c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4500: 3d 3d 3d 3d 3d 0a 3b 3b 20 4f 72 70 68 61 6e 73 =====.;; Orphans
4510: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
4520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 28 64 65 66 69 6e =========.(defin
4560: 65 20 28 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 69 e (twiki:make-ti
4570: 64 64 6c 65 72 2d 6c 69 73 74 20 74 64 6c 72 73 ddler-list tdlrs
4580: 20 2e 20 74 6e 75 6d 73 29 0a 20 20 28 63 6f 6e . tnums). (con
4590: 63 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 c (string-inters
45a0: 70 65 72 73 65 20 0a 09 20 28 6d 61 70 20 63 6f perse .. (map co
45b0: 6e 63 20 28 64 65 6c 65 74 65 2d 64 75 70 6c 69 nc (delete-dupli
45c0: 63 61 74 65 73 0a 09 09 20 20 20 20 28 61 70 70 cates... (app
45d0: 65 6e 64 20 28 6d 61 70 20 74 77 69 6b 69 3a 74 end (map twiki:t
45e0: 69 64 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 64 iddler-get-id td
45f0: 6c 72 73 29 20 74 6e 75 6d 73 29 29 29 0a 09 20 lrs) tnums)))..
4600: 22 2c 22 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ",")))..(define
4610: 28 74 77 69 6b 69 3a 67 65 74 2d 6f 72 70 68 61 (twiki:get-orpha
4620: 6e 73 20 74 64 62 29 0a 20 20 27 28 29 29 0a 0a ns tdb). '())..
4630: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 6c (define (twiki:l
4640: 69 73 74 2d 6f 72 70 68 61 6e 73 20 74 64 62 29 ist-orphans tdb)
4650: 0a 20 20 27 28 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d . '())..;;=====
4660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
46a0: 3d 0a 3b 3b 20 50 69 63 74 75 72 65 73 0a 3b 3b =.;; Pictures.;;
46b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
46c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
46d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
46e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
46f0: 3d 3d 3d 3d 3d 3d 0a 28 64 65 66 69 6e 65 20 28 ======.(define (
4700: 74 77 69 6b 69 3a 70 69 63 5f 6d 67 6d 74 20 74 twiki:pic_mgmt t
4710: 64 62 20 77 69 64 20 74 6b 65 79 29 0a 20 20 28 db wid tkey). (
4720: 73 3a 64 69 76 20 0a 20 20 20 28 73 3a 61 20 22 s:div . (s:a "
4730: 41 64 64 20 70 69 63 22 20 27 68 72 65 66 20 28 Add pic" 'href (
4740: 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 s:link-to (twiki
4750: 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 :get-link-back-t
4760: 6f 2d 63 75 72 72 65 6e 74 29 20 27 74 77 69 6b o-current) 'twik
4770: 69 5f 6d 61 69 6e 74 20 32 20 27 74 77 69 6b 69 i_maint 2 'twiki
4780: 5f 6d 61 69 6e 74 5f 61 64 64 5f 70 69 63 73 20 _maint_add_pics
4790: 31 29 29 28 73 3a 62 72 29 0a 20 20 20 28 69 66 1))(s:br). (if
47a0: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 (s:get-param "t
47b0: 77 69 6b 69 5f 6d 61 69 6e 74 5f 61 64 64 5f 70 wiki_maint_add_p
47c0: 69 63 73 22 29 0a 20 20 20 20 20 20 20 28 73 3a ics"). (s:
47d0: 66 6f 72 6d 20 27 65 6e 63 74 79 70 65 20 22 6d form 'enctype "m
47e0: 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 61 ultipart/form-da
47f0: 74 61 22 20 3b 3b 20 27 6e 61 6d 65 20 22 64 6f ta" ;; 'name "do
4800: 65 73 2d 61 2d 66 6f 72 6d 2d 68 61 76 65 2d 61 es-a-form-have-a
4810: 2d 6e 61 6d 65 22 0a 09 20 20 20 20 20 20 20 28 -name".. (
4820: 73 3a 69 6e 70 75 74 20 27 74 79 70 65 20 22 66 s:input 'type "f
4830: 69 6c 65 22 20 27 6e 61 6d 65 20 22 69 6e 70 75 ile" 'name "inpu
4840: 74 2d 70 69 63 74 75 72 65 22 20 27 76 61 6c 75 t-picture" 'valu
4850: 65 20 22 55 70 6c 6f 61 64 20 70 69 63 22 29 0a e "Upload pic").
4860: 09 20 20 20 20 20 20 20 28 73 3a 69 6e 70 75 74 . (s:input
4870: 20 27 74 79 70 65 20 22 73 75 62 6d 69 74 22 20 'type "submit"
4880: 27 6e 61 6d 65 20 22 73 75 62 6d 69 74 2d 70 69 'name "submit-pi
4890: 63 74 75 72 65 22 20 27 76 61 6c 75 65 20 22 53 cture" 'value "S
48a0: 75 62 6d 69 74 22 29 0a 09 20 20 20 20 20 20 20 ubmit")..
48b0: 27 6d 65 74 68 6f 64 20 22 70 6f 73 74 22 20 0a 'method "post" .
48c0: 09 20 20 20 20 20 20 20 27 61 63 74 69 6f 6e 20 . 'action
48d0: 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b (s:link-to (twik
48e0: 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d i:get-link-back-
48f0: 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 61 63 74 to-current) 'act
4900: 69 6f 6e 20 28 63 6f 6e 63 20 22 74 77 69 6b 69 ion (conc "twiki
4910: 2e 73 61 76 65 70 69 63 2d 22 20 28 6e 75 6d 62 .savepic-" (numb
4920: 65 72 2d 3e 73 74 72 69 6e 67 20 77 69 64 29 20 er->string wid)
4930: 22 2d 22 20 28 74 77 69 6b 69 3a 77 65 62 36 34 "-" (twiki:web64
4940: 65 6e 63 20 74 6b 65 79 29 29 29 0a 09 20 20 20 enc tkey)))..
4950: 20 20 20 20 28 73 3a 69 6e 70 75 74 20 27 74 79 (s:input 'ty
4960: 70 65 20 22 74 65 78 74 22 20 27 6e 61 6d 65 20 pe "text" 'name
4970: 22 70 69 63 74 75 72 65 2d 6e 61 6d 65 22 20 27 "picture-name" '
4980: 76 61 6c 75 65 20 22 22 29 29 0a 20 20 20 20 20 value "")).
4990: 20 20 27 28 29 29 0a 20 20 20 28 6c 65 74 20 28 '()). (let (
49a0: 28 70 69 63 73 20 28 64 62 69 3a 67 65 74 2d 72 (pics (dbi:get-r
49b0: 6f 77 73 20 74 64 62 20 22 53 45 4c 45 43 54 20 ows tdb "SELECT
49c0: 69 64 2c 6e 61 6d 65 2c 64 61 74 5f 69 64 2c 74 id,name,dat_id,t
49d0: 68 75 6d 62 5f 64 61 74 5f 69 64 20 46 52 4f 4d humb_dat_id FROM
49e0: 20 70 69 63 73 20 57 48 45 52 45 20 77 69 6b 69 pics WHERE wiki
49f0: 5f 69 64 3d 3f 3b 22 20 77 69 64 29 29 29 0a 20 _id=?;" wid))).
4a00: 20 20 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 (map (lambda
4a10: 20 28 70 69 63 29 0a 09 20 20 20 20 28 73 3a 64 (pic).. (s:d
4a20: 69 76 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c iv 'class "tiddl
4a30: 65 72 74 68 75 6d 62 22 0a 09 09 20 20 20 28 73 erthumb"... (s
4a40: 3a 69 6d 67 20 27 74 69 74 6c 65 20 28 76 65 63 :img 'title (vec
4a50: 74 6f 72 2d 72 65 66 20 70 69 63 20 31 29 20 27 tor-ref pic 1) '
4a60: 61 6c 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 alt (vector-ref
4a70: 70 69 63 20 31 29 0a 09 09 20 09 20 20 3b 3b 20 pic 1)... . ;;
4a80: 27 73 72 63 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 'src (s:link-to
4a90: 22 74 77 69 6b 69 22 20 27 77 69 6b 69 5f 6b 65 "twiki" 'wiki_ke
4aa0: 79 20 28 74 77 69 6b 69 3a 77 65 62 36 34 65 6e y (twiki:web64en
4ab0: 63 20 74 6b 65 79 29 20 27 69 6d 61 67 65 20 20 c tkey) 'image
4ac0: 28 76 65 63 74 6f 72 2d 72 65 66 20 70 69 63 20 (vector-ref pic
4ad0: 30 29 29 29 0a 09 09 20 09 20 20 27 73 72 63 20 0)))... . 'src
4ae0: 28 73 3a 6c 69 6e 6b 2d 74 6f 20 22 74 77 69 6b (s:link-to "twik
4af0: 69 22 20 27 77 69 6b 69 5f 6b 65 79 20 28 63 6f i" 'wiki_key (co
4b00: 6e 63 20 28 6e 75 6d 62 65 72 2d 3e 73 74 72 69 nc (number->stri
4b10: 6e 67 20 77 69 64 29 20 22 2d 22 20 28 74 77 69 ng wid) "-" (twi
4b20: 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 6b 65 79 ki:web64enc tkey
4b30: 29 29 0a 09 09 09 09 09 20 20 27 74 68 75 6d 62 ))...... 'thumb
4b40: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 70 69 (vector-ref pi
4b50: 63 20 30 29 29 29 0a 09 09 20 20 20 3b 3b 20 20 c 0)))... ;;
4b60: 20 20 20 20 20 28 63 6f 6e 63 20 22 74 77 69 6b (conc "twik
4b70: 69 2f 22 20 77 69 64 20 22 2f 74 68 75 6d 62 73 i/" wid "/thumbs
4b80: 2f 22 20 28 76 65 63 74 6f 72 2d 72 65 66 20 70 /" (vector-ref p
4b90: 69 63 20 30 29 29 29 29 0a 09 09 20 20 20 28 76 ic 0))))... (v
4ba0: 65 63 74 6f 72 2d 72 65 66 20 70 69 63 20 30 29 ector-ref pic 0)
4bb0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 70 69 63 (vector-ref pic
4bc0: 20 31 29 29 29 0a 09 20 20 70 69 63 73 29 29 29 1))).. pics)))
4bd0: 29 0a 0a 28 64 65 66 69 6e 65 20 20 28 74 77 69 )..(define (twi
4be0: 6b 69 3a 73 61 76 65 2d 70 69 63 2d 66 72 6f 6d ki:save-pic-from
4bf0: 2d 66 6f 72 6d 20 74 64 62 20 77 69 64 29 0a 20 -form tdb wid).
4c00: 20 28 6c 65 74 2a 20 28 28 70 69 63 2d 64 61 74 (let* ((pic-dat
4c10: 20 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 20 27 (s:get-input '
4c20: 69 6e 70 75 74 2d 70 69 63 74 75 72 65 29 29 0a input-picture)).
4c30: 09 20 28 61 6c 74 2d 6e 61 6d 65 20 28 73 3a 67 . (alt-name (s:g
4c40: 65 74 2d 69 6e 70 75 74 20 27 70 69 63 74 75 72 et-input 'pictur
4c50: 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 69 e-name))). (i
4c60: 66 20 70 69 63 2d 64 61 74 0a 09 28 62 65 67 69 f pic-dat..(begi
4c70: 6e 0a 09 20 20 28 73 3a 6c 6f 67 20 22 74 77 69 n.. (s:log "twi
4c80: 6b 69 3a 73 61 76 65 2d 70 69 63 2d 66 72 6f 6d ki:save-pic-from
4c90: 2d 66 6f 72 6d 20 77 69 74 68 20 70 69 63 2d 64 -form with pic-d
4ca0: 61 74 3d 22 20 70 69 63 2d 64 61 74 20 22 20 61 at=" pic-dat " a
4cb0: 6e 64 20 61 6c 74 2d 6e 61 6d 65 3d 22 20 61 6c nd alt-name=" al
4cc0: 74 2d 6e 61 6d 65 29 0a 09 20 20 28 74 77 69 6b t-name).. (twik
4cd0: 69 3a 73 61 76 65 2d 70 69 63 20 74 64 62 20 70 i:save-pic tdb p
4ce0: 69 63 2d 64 61 74 20 77 69 64 20 61 6c 74 2d 6e ic-dat wid alt-n
4cf0: 61 6d 65 29 29 0a 09 23 66 29 29 29 0a 0a 3b 3b ame))..#f)))..;;
4d00: 20 67 65 74 20 70 69 63 20 69 64 20 66 6f 72 20 get pic id for
4d10: 61 20 70 69 63 20 6e 61 6d 65 2c 20 72 65 74 75 a pic name, retu
4d20: 72 6e 73 20 74 68 65 20 6c 61 74 65 73 74 0a 28 rns the latest.(
4d30: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 define (twiki:ge
4d40: 74 2d 70 69 63 2d 69 64 20 74 64 62 20 70 69 63 t-pic-id tdb pic
4d50: 2d 6e 61 6d 65 20 77 69 64 29 0a 20 20 28 64 62 -name wid). (db
4d60: 69 3a 67 65 74 2d 6f 6e 65 20 74 64 62 20 22 53 i:get-one tdb "S
4d70: 45 4c 45 43 54 20 70 69 63 73 2e 69 64 20 46 52 ELECT pics.id FR
4d80: 4f 4d 20 70 69 63 73 20 57 48 45 52 45 20 70 69 OM pics WHERE pi
4d90: 63 73 2e 6e 61 6d 65 3d 3f 20 41 4e 44 20 70 69 cs.name=? AND pi
4da0: 63 73 2e 77 69 6b 69 5f 69 64 3d 3f 20 4f 52 44 cs.wiki_id=? ORD
4db0: 45 52 20 42 59 20 70 69 63 73 2e 69 64 20 44 45 ER BY pics.id DE
4dc0: 53 43 20 4c 49 4d 49 54 20 31 3b 22 20 70 69 63 SC LIMIT 1;" pic
4dd0: 2d 6e 61 6d 65 20 77 69 64 29 29 0a 0a 28 64 65 -name wid))..(de
4de0: 66 69 6e 65 20 28 74 77 69 6b 69 3a 73 61 76 65 fine (twiki:save
4df0: 2d 70 69 63 20 74 64 62 20 70 69 63 2d 64 61 74 -pic tdb pic-dat
4e00: 20 77 69 64 20 61 6c 74 29 0a 20 20 28 6c 65 74 wid alt). (let
4e10: 20 28 28 70 69 63 2d 6e 61 6d 65 20 28 63 61 72 ((pic-name (car
4e20: 20 70 69 63 2d 64 61 74 29 29 0a 09 28 70 69 63 pic-dat))..(pic
4e30: 2d 74 79 70 65 20 28 63 61 64 72 20 70 69 63 2d -type (cadr pic-
4e40: 64 61 74 29 29 0a 09 28 70 69 63 2d 64 61 74 61 dat))..(pic-data
4e50: 20 28 63 61 64 64 72 20 70 69 63 2d 64 61 74 29 (caddr pic-dat)
4e60: 29 0a 09 3b 3b 20 49 27 6d 20 6e 6f 74 20 74 6f )..;; I'm not to
4e70: 6f 20 68 61 70 70 79 20 77 69 74 68 20 74 68 69 o happy with thi
4e80: 73 20 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20 49 s solution but I
4e90: 20 63 61 6e 27 74 20 73 65 65 6d 20 74 6f 20 63 can't seem to c
4ea0: 68 6f 6d 70 20 74 68 65 20 5c 6e 5c 64 20 66 72 homp the \n\d fr
4eb0: 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 om the end of th
4ec0: 65 20 73 74 72 69 6e 67 0a 09 28 61 6c 74 2d 6e e string..(alt-n
4ed0: 61 6d 65 20 28 69 66 20 61 6c 74 20 28 73 74 72 ame (if alt (str
4ee0: 69 6e 67 2d 73 75 62 73 74 69 74 75 74 65 20 28 ing-substitute (
4ef0: 72 65 67 65 78 70 20 22 5b 5e 5c 5c 77 20 5d 22 regexp "[^\\w ]"
4f00: 29 20 22 22 20 61 6c 74 20 23 74 29 20 23 66 29 ) "" alt #t) #f)
4f10: 29 29 0a 20 20 20 20 28 69 66 20 28 61 6e 64 20 )). (if (and
4f20: 61 6c 74 2d 6e 61 6d 65 0a 09 20 20 20 20 20 28 alt-name.. (
4f30: 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 string-match (re
4f40: 67 65 78 70 20 22 5c 5c 77 2b 22 29 20 61 6c 74 gexp "\\w+") alt
4f50: 2d 6e 61 6d 65 29 29 0a 09 28 73 65 74 21 20 70 -name))..(set! p
4f60: 69 63 2d 6e 61 6d 65 20 61 6c 74 2d 6e 61 6d 65 ic-name alt-name
4f70: 29 29 0a 20 20 20 20 28 73 3a 6c 6f 67 20 22 61 )). (s:log "a
4f80: 6c 74 3a 20 22 20 61 6c 74 20 22 20 61 6c 74 2d lt: " alt " alt-
4f90: 6e 61 6d 65 3a 20 22 20 61 6c 74 2d 6e 61 6d 65 name: " alt-name
4fa0: 29 0a 20 20 20 20 28 69 66 20 70 69 63 2d 64 61 ). (if pic-da
4fb0: 74 61 0a 09 28 6c 65 74 20 28 28 64 61 74 2d 69 ta..(let ((dat-i
4fc0: 64 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 64 61 d (twiki:save-da
4fd0: 74 20 74 64 62 20 70 69 63 2d 64 61 74 61 20 28 t tdb pic-data (
4fe0: 74 77 69 6b 69 3a 6d 69 6d 65 2d 3e 74 77 69 6b twiki:mime->twik
4ff0: 69 2d 74 79 70 65 20 70 69 63 2d 74 79 70 65 29 i-type pic-type)
5000: 29 29 0a 09 20 20 20 20 20 20 28 63 72 65 61 74 )).. (creat
5010: 69 6f 6e 2d 74 69 6d 65 20 28 63 75 72 72 65 6e ion-time (curren
5020: 74 2d 73 65 63 6f 6e 64 73 29 29 29 0a 09 20 20 t-seconds)))..
5030: 3b 3b 20 28 74 77 69 6b 69 3a 64 65 6c 65 74 65 ;; (twiki:delete
5040: 2d 70 69 63 2d 62 79 2d 6e 61 6d 65 20 74 64 62 -pic-by-name tdb
5050: 20 70 69 63 2d 6e 61 6d 65 29 0a 09 20 20 28 64 pic-name).. (d
5060: 62 69 3a 65 78 65 63 20 74 64 62 20 0a 09 09 20 bi:exec tdb ...
5070: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 "INSERT INTO
5080: 70 69 63 73 20 28 6e 61 6d 65 2c 77 69 6b 69 5f pics (name,wiki_
5090: 69 64 2c 64 61 74 5f 69 64 2c 63 72 65 61 74 65 id,dat_id,create
50a0: 64 5f 6f 6e 2c 6f 77 6e 65 72 5f 69 64 29 20 56 d_on,owner_id) V
50b0: 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 29 ALUES(?,?,?,?,?)
50c0: 3b 22 0a 09 09 20 20 20 20 70 69 63 2d 6e 61 6d ;"... pic-nam
50d0: 65 20 77 69 64 20 64 61 74 2d 69 64 20 63 72 65 e wid dat-id cre
50e0: 61 74 69 6f 6e 2d 74 69 6d 65 20 28 74 77 69 6b ation-time (twik
50f0: 69 3a 67 65 74 2d 69 64 29 29 0a 09 20 20 28 6c i:get-id)).. (l
5100: 65 74 20 28 28 70 69 63 2d 69 64 20 28 74 77 69 et ((pic-id (twi
5110: 6b 69 3a 67 65 74 2d 70 69 63 2d 69 64 20 74 64 ki:get-pic-id td
5120: 62 20 70 69 63 2d 6e 61 6d 65 20 77 69 64 29 29 b pic-name wid))
5130: 29 0a 09 20 20 20 20 28 74 77 69 6b 69 3a 6d 61 ).. (twiki:ma
5140: 6b 65 2d 74 68 75 6d 62 6e 61 69 6c 20 74 64 62 ke-thumbnail tdb
5150: 20 70 69 63 2d 69 64 20 77 69 64 29 29 0a 09 20 pic-id wid))..
5160: 20 23 74 29 0a 09 23 66 29 29 29 0a 0a 28 64 65 #t)..#f)))..(de
5170: 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 2d fine (twiki:get-
5180: 70 69 63 2d 64 61 74 20 74 64 62 20 77 69 64 20 pic-dat tdb wid
5190: 70 69 63 2d 69 64 29 0a 20 20 28 64 62 69 3a 67 pic-id). (dbi:g
51a0: 65 74 2d 6f 6e 65 20 74 64 62 20 22 53 45 4c 45 et-one tdb "SELE
51b0: 43 54 20 64 61 74 20 46 52 4f 4d 20 70 69 63 73 CT dat FROM pics
51c0: 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 64 61 74 73 INNER JOIN dats
51d0: 20 4f 4e 20 70 69 63 73 2e 64 61 74 5f 69 64 3d ON pics.dat_id=
51e0: 64 61 74 73 2e 69 64 20 57 48 45 52 45 20 70 69 dats.id WHERE pi
51f0: 63 73 2e 69 64 3d 3f 20 41 4e 44 20 77 69 6b 69 cs.id=? AND wiki
5200: 5f 69 64 3d 3f 3b 22 20 70 69 63 2d 69 64 20 77 _id=?;" pic-id w
5210: 69 64 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 id))..(define (t
5220: 77 69 6b 69 3a 67 65 74 2d 74 68 75 6d 62 2d 64 wiki:get-thumb-d
5230: 61 74 20 74 64 62 20 77 69 64 20 70 69 63 2d 69 at tdb wid pic-i
5240: 64 29 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f 6e d). (dbi:get-on
5250: 65 20 74 64 62 20 22 53 45 4c 45 43 54 20 64 61 e tdb "SELECT da
5260: 74 20 46 52 4f 4d 20 70 69 63 73 20 49 4e 4e 45 t FROM pics INNE
5270: 52 20 4a 4f 49 4e 20 64 61 74 73 20 4f 4e 20 70 R JOIN dats ON p
5280: 69 63 73 2e 74 68 75 6d 62 5f 64 61 74 5f 69 64 ics.thumb_dat_id
5290: 3d 64 61 74 73 2e 69 64 20 57 48 45 52 45 20 70 =dats.id WHERE p
52a0: 69 63 73 2e 69 64 3d 3f 20 41 4e 44 20 77 69 6b ics.id=? AND wik
52b0: 69 5f 69 64 3d 3f 3b 22 20 70 69 63 2d 69 64 20 i_id=?;" pic-id
52c0: 77 69 64 29 29 0a 0a 3b 3b 20 74 68 69 73 20 6f wid))..;; this o
52d0: 6e 65 20 73 65 74 73 20 75 70 20 74 68 65 20 43 ne sets up the C
52e0: 6f 6e 74 65 6e 74 20 74 79 70 65 2c 20 70 75 74 ontent type, put
52f0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 74 6f 20 s the data into
5300: 70 61 67 65 2d 64 61 74 20 61 6e 64 20 69 73 20 page-dat and is
5310: 64 6f 6e 65 0a 28 64 65 66 69 6e 65 20 28 74 77 done.(define (tw
5320: 69 6b 69 3a 72 65 74 75 72 6e 2d 69 6d 61 67 65 iki:return-image
5330: 2d 64 61 74 20 74 64 62 20 77 69 64 20 70 69 63 -dat tdb wid pic
5340: 2d 69 64 29 0a 20 20 28 6c 65 74 20 28 28 64 61 -id). (let ((da
5350: 74 20 20 28 74 77 69 6b 69 3a 67 65 74 2d 70 69 t (twiki:get-pi
5360: 63 2d 64 61 74 20 74 64 62 20 77 69 64 20 70 69 c-dat tdb wid pi
5370: 63 2d 69 64 29 29 29 0a 20 20 20 20 28 73 3a 6c c-id))). (s:l
5380: 6f 67 20 22 74 77 69 6b 69 3a 72 65 74 75 72 6e og "twiki:return
5390: 2d 69 6d 61 67 65 2d 64 61 74 20 64 61 74 20 69 -image-dat dat i
53a0: 73 3a 20 22 20 64 61 74 20 22 20 6f 66 20 73 69 s: " dat " of si
53b0: 7a 65 3a 20 22 20 28 69 66 20 28 62 6c 6f 62 3f ze: " (if (blob?
53c0: 20 64 61 74 29 28 62 6c 6f 62 2d 73 69 7a 65 20 dat)(blob-size
53d0: 64 61 74 29 20 22 5b 6e 6f 74 20 61 20 62 6c 6f dat) "[not a blo
53e0: 62 5d 22 29 29 0a 20 20 20 20 28 73 64 61 74 2d b]")). (sdat-
53f0: 73 65 74 2d 70 61 67 65 2d 74 79 70 65 21 20 20 set-page-type!
5400: 20 20 73 3a 73 65 73 73 69 6f 6e 20 27 69 6d 61 s:session 'ima
5410: 67 65 29 0a 20 20 20 20 28 73 64 61 74 2d 73 65 ge). (sdat-se
5420: 74 2d 63 6f 6e 74 65 6e 74 2d 74 79 70 65 21 20 t-content-type!
5430: 73 3a 73 65 73 73 69 6f 6e 20 22 69 6d 61 67 65 s:session "image
5440: 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 73 64 61 /jpeg"). (sda
5450: 74 2d 73 65 74 2d 61 6c 74 2d 70 61 67 65 2d 64 t-set-alt-page-d
5460: 61 74 21 20 73 3a 73 65 73 73 69 6f 6e 20 64 61 at! s:session da
5470: 74 29 29 29 0a 20 20 20 20 3b 3b 20 28 73 65 73 t))). ;; (ses
5480: 73 69 6f 6e 3a 61 6c 74 2d 6f 75 74 20 73 3a 73 sion:alt-out s:s
5490: 65 73 73 69 6f 6e 29 29 29 0a 0a 3b 3b 20 74 68 ession)))..;; th
54a0: 69 73 20 6f 6e 65 20 73 65 74 73 20 75 70 20 74 is one sets up t
54b0: 68 65 20 43 6f 6e 74 65 6e 74 20 74 79 70 65 2c he Content type,
54c0: 20 70 75 74 73 20 74 68 65 20 64 61 74 61 20 69 puts the data i
54d0: 6e 74 6f 20 70 61 67 65 2d 64 61 74 20 61 6e 64 nto page-dat and
54e0: 20 69 73 20 64 6f 6e 65 0a 28 64 65 66 69 6e 65 is done.(define
54f0: 20 28 74 77 69 6b 69 3a 72 65 74 75 72 6e 2d 74 (twiki:return-t
5500: 68 75 6d 62 2d 64 61 74 20 74 64 62 20 77 69 64 humb-dat tdb wid
5510: 20 70 69 63 2d 69 64 29 0a 20 20 28 6c 65 74 20 pic-id). (let
5520: 28 28 64 61 74 20 20 28 74 77 69 6b 69 3a 67 65 ((dat (twiki:ge
5530: 74 2d 74 68 75 6d 62 2d 64 61 74 20 74 64 62 20 t-thumb-dat tdb
5540: 77 69 64 20 70 69 63 2d 69 64 29 29 29 0a 20 20 wid pic-id))).
5550: 20 20 28 73 3a 6c 6f 67 20 22 74 77 69 6b 69 3a (s:log "twiki:
5560: 72 65 74 75 72 6e 2d 69 6d 61 67 65 2d 64 61 74 return-image-dat
5570: 20 64 61 74 20 69 73 3a 20 22 20 64 61 74 20 22 dat is: " dat "
5580: 20 6f 66 20 73 69 7a 65 3a 20 22 20 28 69 66 20 of size: " (if
5590: 28 62 6c 6f 62 3f 20 64 61 74 29 28 62 6c 6f 62 (blob? dat)(blob
55a0: 2d 73 69 7a 65 20 64 61 74 29 20 22 5b 6e 6f 74 -size dat) "[not
55b0: 20 61 20 62 6c 6f 62 5d 22 29 29 0a 20 20 20 20 a blob]")).
55c0: 28 73 64 61 74 2d 73 65 74 2d 70 61 67 65 2d 74 (sdat-set-page-t
55d0: 79 70 65 21 20 20 20 20 73 3a 73 65 73 73 69 6f ype! s:sessio
55e0: 6e 20 27 69 6d 61 67 65 29 0a 20 20 20 20 28 73 n 'image). (s
55f0: 64 61 74 2d 73 65 74 2d 63 6f 6e 74 65 6e 74 2d dat-set-content-
5600: 74 79 70 65 21 20 73 3a 73 65 73 73 69 6f 6e 20 type! s:session
5610: 22 69 6d 61 67 65 2f 6a 70 65 67 22 29 0a 20 20 "image/jpeg").
5620: 20 20 28 73 64 61 74 2d 73 65 74 2d 61 6c 74 2d (sdat-set-alt-
5630: 70 61 67 65 2d 64 61 74 21 20 73 3a 73 65 73 73 page-dat! s:sess
5640: 69 6f 6e 20 64 61 74 29 29 29 0a 20 20 20 20 3b ion dat))). ;
5650: 3b 20 28 73 65 73 73 69 6f 6e 3a 61 6c 74 2d 6f ; (session:alt-o
5660: 75 74 20 73 3a 73 65 73 73 69 6f 6e 29 29 29 0a ut s:session))).
5670: 20 20 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b .(define (twik
5680: 69 3a 6d 61 6b 65 2d 74 68 75 6d 62 6e 61 69 6c i:make-thumbnail
5690: 20 74 64 62 20 70 69 63 2d 69 64 20 77 69 64 29 tdb pic-id wid)
56a0: 0a 20 20 28 6c 65 74 20 28 28 69 6e 64 61 74 20 . (let ((indat
56b0: 20 28 74 77 69 6b 69 3a 67 65 74 2d 70 69 63 2d (twiki:get-pic-
56c0: 64 61 74 20 74 64 62 20 77 69 64 20 70 69 63 2d dat tdb wid pic-
56d0: 69 64 29 29 29 0a 20 20 20 20 3b 3b 20 20 20 28 id))). ;; (
56e0: 6f 75 74 64 61 74 20 28 6f 70 65 6e 2d 6f 75 74 outdat (open-out
56f0: 70 75 74 2d 73 74 72 69 6e 67 29 29 29 0a 20 20 put-string))).
5700: 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 (let-values ((
5710: 28 69 6e 70 20 6f 75 70 20 70 69 64 29 28 70 72 (inp oup pid)(pr
5720: 6f 63 65 73 73 20 22 63 6f 6e 76 65 72 74 22 20 ocess "convert"
5730: 28 6c 69 73 74 20 22 2d 73 69 7a 65 22 20 22 35 (list "-size" "5
5740: 30 30 78 31 38 30 22 20 22 2d 22 20 22 2d 74 68 00x180" "-" "-th
5750: 75 6d 62 6e 61 69 6c 22 20 22 32 35 30 78 39 30 umbnail" "250x90
5760: 22 20 22 2d 75 6e 73 68 61 72 70 22 20 22 30 78 " "-unsharp" "0x
5770: 2e 35 22 20 22 2d 22 29 29 29 29 0a 09 09 28 77 .5" "-"))))...(w
5780: 72 69 74 65 2d 73 74 72 69 6e 67 20 28 62 6c 6f rite-string (blo
5790: 62 2d 3e 73 74 72 69 6e 67 20 69 6e 64 61 74 29 b->string indat)
57a0: 20 23 66 20 6f 75 70 29 0a 09 09 28 63 6c 6f 73 #f oup)...(clos
57b0: 65 2d 69 6e 70 75 74 2d 70 6f 72 74 20 6f 75 70 e-input-port oup
57c0: 29 0a 09 09 3b 3b 20 28 77 72 69 74 65 2d 73 74 )...;; (write-st
57d0: 72 69 6e 67 20 23 66 20 69 6e 70 20 28 62 6c 6f ring #f inp (blo
57e0: 62 2d 3e 73 74 72 69 6e 67 20 69 6e 64 61 74 29 b->string indat)
57f0: 29 0a 09 09 28 6c 65 74 20 28 28 6c 20 28 72 65 )...(let ((l (re
5800: 61 64 2d 73 74 72 69 6e 67 20 23 66 20 69 6e 70 ad-string #f inp
5810: 29 29 29 0a 09 09 20 20 28 63 6c 6f 73 65 2d 6f )))... (close-o
5820: 75 74 70 75 74 2d 70 6f 72 74 20 69 6e 70 29 0a utput-port inp).
5830: 09 09 20 20 3b 3b 20 28 77 72 69 74 65 2d 73 74 .. ;; (write-st
5840: 72 69 6e 67 20 6c 20 23 66 20 6f 75 74 64 61 74 ring l #f outdat
5850: 29 0a 09 09 20 20 28 6c 65 74 2a 20 28 28 6e 65 )... (let* ((ne
5860: 77 64 61 74 20 28 73 74 72 69 6e 67 2d 3e 62 6c wdat (string->bl
5870: 6f 62 20 6c 29 29 20 3b 3b 20 28 67 65 74 2d 6f ob l)) ;; (get-o
5880: 75 74 70 75 74 2d 73 74 72 69 6e 67 20 6f 75 74 utput-string out
5890: 64 61 74 29 29 29 0a 09 09 09 20 28 64 61 74 2d dat))).... (dat-
58a0: 69 64 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 64 id (twiki:save-d
58b0: 61 74 20 74 64 62 20 6e 65 77 64 61 74 20 32 29 at tdb newdat 2)
58c0: 29 29 20 3b 3b 20 62 75 67 3f 0a 09 09 20 20 20 )) ;; bug?...
58d0: 20 28 64 62 69 3a 65 78 65 63 20 74 64 62 20 22 (dbi:exec tdb "
58e0: 55 50 44 41 54 45 20 70 69 63 73 20 53 45 54 20 UPDATE pics SET
58f0: 74 68 75 6d 62 5f 64 61 74 5f 69 64 3d 3f 20 57 thumb_dat_id=? W
5900: 48 45 52 45 20 69 64 3d 3f 3b 22 20 64 61 74 2d HERE id=?;" dat-
5910: 69 64 20 70 69 63 2d 69 64 29 0a 09 09 20 20 20 id pic-id)...
5920: 20 64 61 74 2d 69 64 29 29 29 29 29 0a 0a 3b 3b dat-id)))))..;;
5930: 20 6e 6f 74 20 74 65 73 74 65 64 0a 28 64 65 66 not tested.(def
5940: 69 6e 65 20 28 74 77 69 6b 69 3a 70 69 63 64 61 ine (twiki:picda
5950: 74 2d 3e 74 68 75 6d 62 64 61 74 20 70 69 63 64 t->thumbdat picd
5960: 61 74 29 0a 20 20 28 6c 65 74 2d 76 61 6c 75 65 at). (let-value
5970: 73 20 28 28 28 69 6e 70 20 6f 75 70 20 70 69 64 s (((inp oup pid
5980: 29 28 70 72 6f 63 65 73 73 20 22 63 6f 6e 76 65 )(process "conve
5990: 72 74 22 20 3b 3b 20 28 6c 69 73 74 20 22 2d 73 rt" ;; (list "-s
59a0: 69 7a 65 22 20 22 35 30 30 78 31 38 30 22 20 22 ize" "500x180" "
59b0: 2d 22 20 22 2d 74 68 75 6d 62 6e 61 69 6c 22 20 -" "-thumbnail"
59c0: 22 32 35 30 78 39 30 22 20 22 2d 75 6e 73 68 61 "250x90" "-unsha
59d0: 72 70 22 20 22 30 78 2e 35 22 20 22 2d 22 29 29 rp" "0x.5" "-"))
59e0: 29 29 0a 09 09 09 09 20 20 20 20 20 20 28 6c 69 ))..... (li
59f0: 73 74 20 22 2d 73 69 7a 65 22 20 22 35 30 30 78 st "-size" "500x
5a00: 31 38 30 22 20 22 2d 22 20 22 2d 74 68 75 6d 62 180" "-" "-thumb
5a10: 6e 61 69 6c 22 20 22 32 30 30 78 37 30 22 20 22 nail" "200x70" "
5a20: 2d 75 6e 73 68 61 72 70 22 20 22 30 78 2e 35 22 -unsharp" "0x.5"
5a30: 20 22 2d 22 29 29 29 29 0a 09 20 20 20 20 20 20 "-"))))..
5a40: 28 77 72 69 74 65 2d 73 74 72 69 6e 67 20 28 62 (write-string (b
5a50: 6c 6f 62 2d 3e 73 74 72 69 6e 67 20 70 69 63 64 lob->string picd
5a60: 61 74 29 20 23 66 20 6f 75 70 29 0a 09 20 20 20 at) #f oup)..
5a70: 20 20 20 28 63 6c 6f 73 65 2d 69 6e 70 75 74 2d (close-input-
5a80: 70 6f 72 74 20 6f 75 70 29 0a 09 20 20 20 20 20 port oup)..
5a90: 20 3b 3b 20 28 77 72 69 74 65 2d 73 74 72 69 6e ;; (write-strin
5aa0: 67 20 23 66 20 69 6e 70 20 28 62 6c 6f 62 2d 3e g #f inp (blob->
5ab0: 73 74 72 69 6e 67 20 69 6e 64 61 74 29 29 0a 09 string indat))..
5ac0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 6c 20 28 (let ((l (
5ad0: 72 65 61 64 2d 73 74 72 69 6e 67 20 23 66 20 69 read-string #f i
5ae0: 6e 70 29 29 29 0a 09 09 28 63 6c 6f 73 65 2d 6f np)))...(close-o
5af0: 75 74 70 75 74 2d 70 6f 72 74 20 69 6e 70 29 0a utput-port inp).
5b00: 09 09 28 77 72 69 74 65 2d 73 74 72 69 6e 67 20 ..(write-string
5b10: 6c 20 23 66 20 6f 75 70 29 0a 09 09 28 73 74 72 l #f oup)...(str
5b20: 69 6e 67 2d 3e 62 6c 6f 62 20 6c 29 29 29 29 0a ing->blob l)))).
5b30: 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a .(define (twiki:
5b40: 6d 69 6d 65 2d 3e 74 77 69 6b 69 2d 74 79 70 65 mime->twiki-type
5b50: 20 6d 69 6d 65 2d 74 79 70 65 29 0a 20 20 28 63 mime-type). (c
5b60: 61 73 65 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d ase (string->sym
5b70: 62 6f 6c 20 6d 69 6d 65 2d 74 79 70 65 29 0a 20 bol mime-type).
5b80: 20 20 20 28 28 69 6d 61 67 65 2f 6a 70 65 67 29 ((image/jpeg)
5b90: 20 31 29 0a 20 20 20 20 28 28 69 6d 61 67 65 2f 1). ((image/
5ba0: 70 6e 67 29 20 20 32 29 0a 20 20 20 20 28 65 6c png) 2). (el
5bb0: 73 65 20 30 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d se 0)))..;;=====
5bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c00: 3d 0a 3b 3b 20 57 69 6b 69 20 73 74 75 66 66 0a =.;; Wiki stuff.
5c10: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
5c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c50: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 63 75 72 ========..;; cur
5c60: 72 2d 74 69 64 64 6c 65 72 73 20 69 73 20 61 20 r-tiddlers is a
5c70: 6c 69 73 74 20 6f 66 20 74 68 65 20 6e 61 6d 65 list of the name
5c80: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 s of the current
5c90: 20 74 69 64 64 6c 65 72 73 20 64 69 73 70 6c 61 tiddlers displa
5ca0: 79 65 64 0a 3b 3b 20 74 69 64 64 6c 65 72 2d 75 yed.;; tiddler-u
5cb0: 6e 64 65 72 2d 65 64 69 74 20 69 73 20 74 68 65 nder-edit is the
5cc0: 20 74 69 64 64 6c 65 72 20 62 65 69 6e 67 20 65 tiddler being e
5cd0: 64 69 74 65 64 20 28 6f 72 20 23 66 20 66 6f 72 dited (or #f for
5ce0: 20 6e 6f 6e 65 29 2e 0a 28 64 65 66 69 6e 65 20 none)..(define
5cf0: 28 74 77 69 6b 69 3a 77 69 6b 69 20 6e 61 6d 65 (twiki:wiki name
5d00: 20 6b 65 79 73 29 0a 20 20 28 6c 65 74 20 28 28 keys). (let ((
5d10: 70 65 72 6d 73 20 20 20 28 74 77 69 6b 69 3a 61 perms (twiki:a
5d20: 63 63 65 73 73 20 6e 61 6d 65 20 6b 65 79 73 20 ccess name keys
5d30: 28 74 77 69 6b 69 3a 67 65 74 2d 69 64 29 29 29 (twiki:get-id)))
5d40: 29 0a 20 20 20 20 3b 3b 20 28 73 3a 6c 6f 67 20 ). ;; (s:log
5d50: 22 74 77 69 6b 69 3a 77 69 6b 69 20 6e 61 6d 65 "twiki:wiki name
5d60: 3a 20 5c 22 22 20 6e 61 6d 65 20 22 5c 22 20 6b : \"" name "\" k
5d70: 65 79 73 3a 20 22 20 6b 65 79 73 29 0a 20 20 20 eys: " keys).
5d80: 20 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 6e 61 (if (or (not na
5d90: 6d 65 29 0a 09 20 20 20 20 28 73 74 72 69 6e 67 me).. (string
5da0: 3d 3f 20 6e 61 6d 65 20 22 22 29 29 20 3b 3b 20 =? name "")) ;;
5db0: 6e 61 6d 65 20 6d 75 73 74 20 62 65 20 22 22 20 name must be ""
5dc0: 6f 72 20 23 66 20 74 6f 20 67 65 74 20 68 65 72 or #f to get her
5dd0: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 6e 20 e and return an
5de0: 69 6d 61 67 65 0a 09 3b 3b 20 68 61 6e 64 6c 65 image..;; handle
5df0: 20 72 65 74 75 72 6e 69 6e 67 20 70 69 63 74 75 returning pictu
5e00: 72 65 73 2c 20 6e 6f 74 65 20 6b 65 79 73 20 61 res, note keys a
5e10: 6e 64 20 6e 61 6d 65 20 61 72 65 20 69 67 6e 6f nd name are igno
5e20: 72 65 64 20 66 6f 72 20 74 68 65 73 65 2e 20 54 red for these. T
5e30: 68 65 79 20 61 72 65 20 63 61 6c 6c 65 64 20 6f hey are called o
5e40: 75 74 20 69 6e 0a 09 3b 3b 20 74 68 65 20 74 77 ut in..;; the tw
5e50: 69 6b 69 2f 76 69 65 77 2e 73 63 6d 20 28 74 77 iki/view.scm (tw
5e60: 69 6b 69 3a 74 77 69 6b 69 20 22 62 6c 61 68 22 iki:twiki "blah"
5e70: 20 27 28 6e 61 64 61 20 66 6f 6f 29 29 20 63 61 '(nada foo)) ca
5e80: 6c 6c 2e 0a 09 28 6c 65 74 20 28 28 69 6d 61 67 ll...(let ((imag
5e90: 65 20 20 20 28 73 3a 67 65 74 2d 70 61 72 61 6d e (s:get-param
5ea0: 20 22 69 6d 61 67 65 22 29 29 0a 09 20 20 20 20 "image"))..
5eb0: 20 20 28 74 68 75 6d 62 20 20 20 28 73 3a 67 65 (thumb (s:ge
5ec0: 74 2d 70 61 72 61 6d 20 22 74 68 75 6d 62 22 29 t-param "thumb")
5ed0: 29 29 0a 09 20 20 28 73 3a 6c 6f 67 20 22 69 6d )).. (s:log "im
5ee0: 61 67 65 3a 20 22 20 69 6d 61 67 65 20 22 20 74 age: " image " t
5ef0: 68 75 6d 62 3a 20 22 20 74 68 75 6d 62 20 22 20 humb: " thumb "
5f00: 77 69 6b 69 5f 6b 65 79 3a 20 22 20 28 73 3a 67 wiki_key: " (s:g
5f10: 65 74 2d 70 61 72 61 6d 20 27 77 69 6b 69 5f 6b et-param 'wiki_k
5f20: 65 79 29 29 0a 09 20 20 28 69 66 20 28 61 6e 64 ey)).. (if (and
5f30: 20 28 6d 65 6d 62 65 72 20 27 72 20 70 65 72 6d (member 'r perm
5f40: 73 29 20 69 6d 61 67 65 29 0a 09 20 20 20 20 20 s) image)..
5f50: 20 28 6c 65 74 2a 20 28 28 76 61 72 6c 73 74 20 (let* ((varlst
5f60: 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 73 (string-split (s
5f70: 3a 67 65 74 2d 70 61 72 61 6d 20 27 77 69 6b 69 :get-param 'wiki
5f80: 5f 6b 65 79 29 20 22 2d 22 29 29 0a 09 09 20 20 _key) "-"))...
5f90: 20 20 20 28 74 6b 65 79 20 28 74 77 69 6b 69 3a (tkey (twiki:
5fa0: 77 65 62 36 34 64 65 63 20 28 63 61 64 72 20 76 web64dec (cadr v
5fb0: 61 72 6c 73 74 29 29 29 0a 09 09 20 20 20 20 20 arlst)))...
5fc0: 28 77 69 64 20 20 28 73 74 72 69 6e 67 2d 3e 6e (wid (string->n
5fd0: 75 6d 62 65 72 20 28 63 61 72 20 20 76 61 72 6c umber (car varl
5fe0: 73 74 29 29 29 0a 09 09 20 20 20 20 20 28 74 64 st)))... (td
5ff0: 62 6e 20 28 74 77 69 6b 69 3a 6f 70 65 6e 2d 64 bn (twiki:open-d
6000: 62 20 74 6b 65 79 20 23 66 29 29 29 0a 09 09 28 b tkey #f)))...(
6010: 73 3a 6c 6f 67 20 22 74 6b 65 79 3a 20 22 20 74 s:log "tkey: " t
6020: 6b 65 79 20 22 20 69 6d 61 67 65 20 6e 75 6d 62 key " image numb
6030: 65 72 3a 20 22 20 69 6d 61 67 65 29 0a 09 09 28 er: " image)...(
6040: 74 77 69 6b 69 3a 72 65 74 75 72 6e 2d 69 6d 61 twiki:return-ima
6050: 67 65 2d 64 61 74 20 74 64 62 6e 20 77 69 64 20 ge-dat tdbn wid
6060: 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 (string->number
6070: 69 6d 61 67 65 29 29 29 29 20 3b 3b 20 64 6f 20 image)))) ;; do
6080: 6e 6f 74 20 72 65 74 75 72 6e 20 66 72 6f 6d 20 not return from
6090: 74 77 69 6b 69 3a 72 65 74 75 72 6e 2d 69 6d 61 twiki:return-ima
60a0: 67 65 0a 09 20 20 28 69 66 20 28 61 6e 64 20 28 ge.. (if (and (
60b0: 6d 65 6d 62 65 72 20 27 72 20 70 65 72 6d 73 29 member 'r perms)
60c0: 20 74 68 75 6d 62 29 0a 09 20 20 20 20 20 20 28 thumb).. (
60d0: 6c 65 74 2a 20 28 28 76 61 72 6c 73 74 20 28 73 let* ((varlst (s
60e0: 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 73 3a 67 tring-split (s:g
60f0: 65 74 2d 70 61 72 61 6d 20 27 77 69 6b 69 5f 6b et-param 'wiki_k
6100: 65 79 29 20 22 2d 22 29 29 0a 09 09 20 20 20 20 ey) "-"))...
6110: 20 28 74 6b 65 79 20 20 20 28 74 77 69 6b 69 3a (tkey (twiki:
6120: 77 65 62 36 34 64 65 63 20 28 63 61 64 72 20 76 web64dec (cadr v
6130: 61 72 6c 73 74 29 29 29 0a 09 09 20 20 20 20 20 arlst)))...
6140: 28 77 69 64 20 20 20 20 28 73 74 72 69 6e 67 2d (wid (string-
6150: 3e 6e 75 6d 62 65 72 20 28 63 61 72 20 20 76 61 >number (car va
6160: 72 6c 73 74 29 29 29 0a 09 09 20 20 20 20 20 28 rlst)))... (
6170: 74 64 62 6e 20 20 20 28 74 77 69 6b 69 3a 6f 70 tdbn (twiki:op
6180: 65 6e 2d 64 62 20 74 6b 65 79 20 23 66 29 29 29 en-db tkey #f)))
6190: 0a 09 09 28 73 3a 6c 6f 67 20 22 74 6b 65 79 3a ...(s:log "tkey:
61a0: 20 22 20 74 6b 65 79 20 22 20 74 68 75 6d 62 20 " tkey " thumb
61b0: 6e 75 6d 62 65 72 3a 20 22 20 69 6d 61 67 65 29 number: " image)
61c0: 0a 09 09 28 74 77 69 6b 69 3a 72 65 74 75 72 6e ...(twiki:return
61d0: 2d 74 68 75 6d 62 2d 64 61 74 20 74 64 62 6e 20 -thumb-dat tdbn
61e0: 77 69 64 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d wid (string->num
61f0: 62 65 72 20 74 68 75 6d 62 29 29 29 29 29 20 3b ber thumb))))) ;
6200: 3b 20 64 6f 20 6e 6f 74 20 72 65 74 75 72 6e 20 ; do not return
6210: 66 72 6f 6d 20 74 77 69 6b 69 3a 72 65 74 75 72 from twiki:retur
6220: 6e 2d 69 6d 61 67 65 0a 09 28 69 66 20 28 6e 6f n-image..(if (no
6230: 74 20 28 6d 65 6d 62 65 72 20 27 72 20 70 65 72 t (member 'r per
6240: 6d 73 29 29 20 3b 3b 20 72 65 61 64 20 61 63 63 ms)) ;; read acc
6250: 65 73 73 0a 09 20 20 20 20 27 28 29 20 3b 3b 20 ess.. '() ;;
6260: 72 65 74 75 72 6e 20 61 20 62 6c 61 6e 6b 20 73 return a blank s
6270: 6c 61 74 65 0a 09 20 20 20 20 28 74 77 69 6b 69 late.. (twiki
6280: 3a 64 69 73 70 6c 61 79 2d 77 69 6b 69 20 6e 61 :display-wiki na
6290: 6d 65 20 6b 65 79 73 20 70 65 72 6d 73 29 29 29 me keys perms)))
62a0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 ))..(define (twi
62b0: 6b 69 3a 64 69 73 70 6c 61 79 2d 77 69 6b 69 20 ki:display-wiki
62c0: 6e 61 6d 65 20 6b 65 79 73 20 70 65 72 6d 73 29 name keys perms)
62d0: 0a 20 20 28 6c 65 74 2a 20 28 28 77 69 6b 69 64 . (let* ((wikid
62e0: 61 74 20 20 28 6d 61 6b 65 2d 74 77 69 6b 69 3a at (make-twiki:
62f0: 77 69 6b 69 29 29 0a 09 20 28 74 6b 65 79 20 20 wiki)).. (tkey
6300: 20 20 20 28 74 77 69 6b 69 3a 6b 65 79 73 2d 3e (twiki:keys->
6310: 6b 65 79 20 6b 65 79 73 29 29 0a 09 20 28 74 64 key keys)).. (td
6320: 62 20 20 20 20 20 20 28 74 77 69 6b 69 3a 6f 70 b (twiki:op
6330: 65 6e 2d 64 62 20 74 6b 65 79 29 29 0a 09 20 28 en-db tkey)).. (
6340: 77 69 64 20 20 20 20 20 20 28 74 77 69 6b 69 3a wid (twiki:
6350: 6e 61 6d 65 2d 3e 77 69 64 20 74 64 62 20 6e 61 name->wid tdb na
6360: 6d 65 29 29 0a 09 20 28 63 76 61 72 20 20 20 20 me)).. (cvar
6370: 20 28 63 6f 6e 63 20 22 43 55 52 52 45 4e 54 5f (conc "CURRENT_
6380: 54 57 49 44 4c 45 52 53 3a 22 20 77 69 64 29 29 TWIDLERS:" wid))
6390: 20 3b 3b 20 70 61 67 65 20 76 61 72 20 74 6f 20 ;; page var to
63a0: 73 74 6f 72 65 20 63 75 72 72 65 6e 74 20 74 77 store current tw
63b0: 69 64 64 6c 65 72 73 20 62 65 69 6e 67 20 76 69 iddlers being vi
63c0: 65 77 65 64 0a 09 20 28 63 76 61 72 2d 65 64 20 ewed.. (cvar-ed
63d0: 20 28 63 6f 6e 63 20 22 43 55 52 52 45 4e 54 5f (conc "CURRENT_
63e0: 54 57 49 44 4c 45 52 5f 55 4e 44 45 52 5f 45 44 TWIDLER_UNDER_ED
63f0: 49 54 3a 22 20 77 69 64 29 29 0a 09 20 28 74 6e IT:" wid)).. (tn
6400: 75 6d 65 64 69 74 20 28 69 66 20 28 73 3a 67 65 umedit (if (s:ge
6410: 74 20 63 76 61 72 2d 65 64 29 20 0a 09 09 20 20 t cvar-ed) ...
6420: 20 20 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 (string->nu
6430: 6d 62 65 72 20 28 73 3a 67 65 74 20 63 76 61 72 mber (s:get cvar
6440: 2d 65 64 29 29 0a 09 09 20 20 20 20 20 20 20 23 -ed))... #
6450: 66 29 29 20 3b 3b 20 23 66 20 3d 3e 20 6e 6f 74 f)) ;; #f => not
6460: 68 69 6e 67 20 74 6f 20 65 64 69 74 2c 20 2d 31 hing to edit, -1
6470: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 69 create a new ti
6480: 64 64 6c 65 72 0a 09 20 28 74 6e 75 6d 76 69 65 ddler.. (tnumvie
6490: 77 20 23 66 29 0a 09 20 28 6c 6d 65 6e 75 20 20 w #f).. (lmenu
64a0: 20 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 (twiki:get-tid
64b0: 64 6c 65 72 73 20 74 64 62 20 77 69 64 20 28 6c dlers tdb wid (l
64c0: 69 73 74 20 22 4d 61 69 6e 4d 65 6e 75 22 29 29 ist "MainMenu"))
64d0: 29 0a 09 20 3b 3b 20 73 74 6f 72 65 20 74 69 64 ).. ;; store tid
64e0: 64 6c 65 72 73 20 66 6f 72 20 74 68 69 73 20 70 dlers for this p
64f0: 61 67 65 2f 74 77 69 6b 69 20 69 6e 20 63 76 61 age/twiki in cva
6500: 72 20 28 69 2e 65 2e 20 43 55 52 52 45 4e 54 5f r (i.e. CURRENT_
6510: 54 57 49 44 4c 45 52 53 3a 3c 77 69 64 3e 0a 09 TWIDLERS:<wid>..
6520: 20 28 74 64 6c 6e 75 6d 73 20 20 28 69 66 20 28 (tdlnums (if (
6530: 73 3a 67 65 74 20 63 76 61 72 29 0a 09 09 20 20 s:get cvar)...
6540: 20 20 20 20 20 28 6d 61 70 20 73 74 72 69 6e 67 (map string
6550: 2d 3e 6e 75 6d 62 65 72 20 28 73 74 72 69 6e 67 ->number (string
6560: 2d 73 70 6c 69 74 20 28 73 3a 67 65 74 20 63 76 -split (s:get cv
6570: 61 72 29 20 22 2c 22 29 29 0a 09 09 20 20 20 20 ar) ","))...
6580: 20 20 20 27 28 29 29 29 20 3b 3b 20 6c 69 73 74 '())) ;; list
6590: 20 6f 66 20 74 69 64 64 6c 65 72 20 6e 75 6d 62 of tiddler numb
65a0: 65 72 73 0a 09 20 28 74 64 6c 72 73 20 20 20 20 ers.. (tdlrs
65b0: 27 28 29 29 0a 09 20 28 74 65 64 69 74 65 64 20 '()).. (tedited
65c0: 20 28 69 66 20 28 6d 65 6d 62 65 72 20 27 77 20 (if (member 'w
65d0: 70 65 72 6d 73 29 20 23 66 20 23 74 29 29 20 3b perms) #f #t)) ;
65e0: 3b 20 66 6f 72 63 65 20 6e 6f 20 65 64 69 74 73 ; force no edits
65f0: 20 69 66 20 6e 6f 74 20 61 20 77 72 69 74 65 72 if not a writer
6600: 0a 09 20 28 65 64 69 74 2d 74 6d 65 6e 75 2d 69 .. (edit-tmenu-i
6610: 64 20 28 69 66 20 28 61 6e 64 20 28 6d 65 6d 62 d (if (and (memb
6620: 65 72 20 27 77 20 70 65 72 6d 73 29 0a 09 09 09 er 'w perms)....
6630: 09 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 . (s:get-param "
6640: 65 64 69 74 5f 74 6d 65 6e 75 22 29 29 0a 09 09 edit_tmenu"))...
6650: 09 20 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 . (string->nu
6660: 6d 62 65 72 20 28 73 3a 67 65 74 2d 70 61 72 61 mber (s:get-para
6670: 6d 20 22 65 64 69 74 5f 74 6d 65 6e 75 22 29 29 m "edit_tmenu"))
6680: 0a 09 09 09 20 20 20 20 23 66 29 29 0a 09 20 28 .... #f)).. (
6690: 65 64 69 74 2d 74 69 64 64 6c 65 72 20 28 69 66 edit-tiddler (if
66a0: 20 20 28 61 6e 64 20 28 6d 65 6d 62 65 72 20 27 (and (member '
66b0: 77 20 70 65 72 6d 73 29 0a 09 09 09 09 20 28 73 w perms)..... (s
66c0: 3a 67 65 74 2d 70 61 72 61 6d 20 22 65 64 69 74 :get-param "edit
66d0: 5f 74 69 64 64 6c 65 72 22 29 29 20 3b 3b 20 74 _tiddler")) ;; t
66e0: 68 69 73 20 68 61 6e 64 6c 65 73 20 74 68 65 20 his handles the
66f0: 22 65 64 69 74 22 20 6c 69 6e 6b 20 69 6e 20 74 "edit" link in t
6700: 68 65 20 74 69 64 64 6c 65 72 20 63 6f 6e 74 72 he tiddler contr
6710: 6f 6c 20 62 61 72 0a 09 09 09 20 20 20 20 28 6c ol bar.... (l
6720: 65 74 20 28 28 74 20 28 74 77 69 6b 69 3a 67 65 et ((t (twiki:ge
6730: 74 2d 74 69 64 64 6c 65 72 73 2d 62 79 2d 6e 75 t-tiddlers-by-nu
6740: 6d 20 74 64 62 20 77 69 64 20 28 6c 69 73 74 20 m tdb wid (list
6750: 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 (string->number
6760: 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 65 64 (s:get-param "ed
6770: 69 74 5f 74 69 64 64 6c 65 72 22 29 29 29 29 29 it_tiddler")))))
6780: 29 0a 09 09 09 20 20 20 20 20 20 28 73 3a 6c 6f ).... (s:lo
6790: 67 20 22 74 3a 20 22 20 74 29 0a 09 09 09 20 20 g "t: " t)....
67a0: 20 20 20 20 28 69 66 20 74 0a 09 09 09 09 20 20 (if t.....
67b0: 28 63 61 72 20 74 20 29 20 3b 3b 20 73 68 6f 75 (car t ) ;; shou
67c0: 6c 64 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 ld be a list of
67d0: 6f 6e 65 0a 09 09 09 09 20 20 28 74 77 69 6b 69 one..... (twiki
67e0: 3a 74 69 64 64 6c 65 72 2d 73 65 74 2d 6e 61 6d :tiddler-set-nam
67f0: 65 21 0a 09 09 09 09 20 20 20 28 74 77 69 6b 69 e!..... (twiki
6800: 3a 74 69 64 64 6c 65 72 2d 73 65 74 2d 69 64 21 :tiddler-set-id!
6810: 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d (twiki:tiddler-
6820: 6d 61 6b 65 29 20 2d 31 29 20 22 4e 65 77 54 69 make) -1) "NewTi
6830: 64 64 6c 65 72 22 29 29 29 0a 09 09 09 20 20 20 ddler")))....
6840: 20 23 66 29 29 0a 09 20 28 76 69 65 77 2d 74 69 #f)).. (view-ti
6850: 64 64 6c 65 72 20 28 69 66 20 28 73 3a 67 65 74 ddler (if (s:get
6860: 2d 70 61 72 61 6d 20 22 76 69 65 77 5f 74 69 64 -param "view_tid
6870: 64 6c 65 72 22 29 0a 09 09 09 20 20 20 28 6c 65 dler").... (le
6880: 74 2a 20 28 28 74 6e 61 6d 65 20 28 74 77 69 6b t* ((tname (twik
6890: 69 3a 77 65 62 36 34 64 65 63 20 28 73 3a 67 65 i:web64dec (s:ge
68a0: 74 2d 70 61 72 61 6d 20 22 76 69 65 77 5f 74 69 t-param "view_ti
68b0: 64 64 6c 65 72 22 29 29 29 0a 09 09 09 09 20 20 ddler"))).....
68c0: 28 74 20 20 20 20 20 28 74 77 69 6b 69 3a 67 65 (t (twiki:ge
68d0: 74 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d t-tiddler-by-nam
68e0: 65 20 74 64 62 20 77 69 64 20 74 6e 61 6d 65 29 e tdb wid tname)
68f0: 29 29 0a 09 09 09 20 20 20 20 20 28 73 3a 6c 6f )).... (s:lo
6900: 67 20 22 74 3a 20 22 20 74 29 0a 09 09 09 20 20 g "t: " t)....
6910: 20 20 20 28 69 66 20 74 0a 09 09 09 09 20 74 20 (if t..... t
6920: 0a 09 09 09 09 20 28 62 65 67 69 6e 0a 09 09 09 ..... (begin....
6930: 09 20 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d . (twiki:save-
6940: 74 69 64 64 6c 65 72 20 74 64 62 20 74 6e 61 6d tiddler tdb tnam
6950: 65 20 28 63 6f 6e 63 20 22 21 22 20 74 6e 61 6d e (conc "!" tnam
6960: 65 29 20 22 22 20 77 69 64 20 28 74 77 69 6b 69 e) "" wid (twiki
6970: 3a 67 65 74 2d 69 64 29 29 0a 09 09 09 09 20 20 :get-id)).....
6980: 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 (twiki:get-tidd
6990: 6c 65 72 2d 62 79 2d 6e 61 6d 65 20 74 64 62 20 ler-by-name tdb
69a0: 77 69 64 20 74 6e 61 6d 65 29 29 29 29 0a 09 09 wid tname))))...
69b0: 09 20 20 20 23 66 29 29 0a 09 20 29 20 3b 3b 20 . #f)).. ) ;;
69c0: 69 6d 61 67 65 20 69 73 20 74 68 65 20 64 61 74 image is the dat
69d0: 5f 69 64 2c 20 6b 65 65 70 20 69 74 20 73 69 6d _id, keep it sim
69e0: 70 6c 65 20 73 69 6c 6c 79 2e 0a 0a 20 20 20 20 ple silly...
69f0: 28 74 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d (twiki:wiki-set-
6a00: 77 69 64 21 20 20 77 69 6b 69 64 61 74 20 77 69 wid! wikidat wi
6a10: 64 29 0a 20 20 20 20 28 74 77 69 6b 69 3a 77 69 d). (twiki:wi
6a20: 6b 69 2d 73 65 74 2d 6b 65 79 21 20 20 77 69 6b ki-set-key! wik
6a30: 69 64 61 74 20 74 6b 65 79 29 0a 20 20 20 20 28 idat tkey). (
6a40: 74 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 6e twiki:wiki-set-n
6a50: 61 6d 65 21 20 77 69 6b 69 64 61 74 20 6e 61 6d ame! wikidat nam
6a60: 65 29 0a 20 20 20 20 28 74 77 69 6b 69 3a 77 69 e). (twiki:wi
6a70: 6b 69 2d 73 65 74 2d 64 62 68 21 20 20 77 69 6b ki-set-dbh! wik
6a80: 69 64 61 74 20 74 64 62 29 0a 20 20 20 20 28 74 idat tdb). (t
6a90: 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 70 65 wiki:wiki-set-pe
6aa0: 72 6d 73 21 20 77 69 6b 69 64 61 74 20 70 65 72 rms! wikidat per
6ab0: 6d 73 29 0a 0a 20 20 20 20 3b 3b 20 28 73 3a 6c ms).. ;; (s:l
6ac0: 6f 67 20 22 65 64 69 74 2d 74 6d 65 6e 75 2d 69 og "edit-tmenu-i
6ad0: 64 3a 20 22 20 65 64 69 74 2d 74 6d 65 6e 75 2d d: " edit-tmenu-
6ae0: 69 64 20 22 20 65 64 69 74 2d 74 69 64 64 6c 65 id " edit-tiddle
6af0: 72 3a 20 22 20 65 64 69 74 2d 74 69 64 64 6c 65 r: " edit-tiddle
6b00: 72 29 0a 0a 20 20 20 20 3b 3b 20 48 61 6e 64 6c r).. ;; Handl
6b10: 65 20 6f 74 68 65 72 20 55 52 49 20 63 6f 6d 6d e other URI comm
6b20: 61 6e 64 73 20 68 65 72 65 0a 20 20 20 20 28 69 ands here. (i
6b30: 66 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 f (s:get-param "
6b40: 63 61 6e 63 65 6c 5f 74 65 64 69 74 22 29 20 3b cancel_tedit") ;
6b50: 3b 20 64 6f 65 73 6e 27 74 20 6d 61 74 74 65 72 ; doesn't matter
6b60: 20 77 68 69 63 68 20 74 69 64 64 6c 65 72 20 2d which tiddler -
6b70: 20 6a 75 73 74 20 75 73 65 20 74 68 69 73 20 74 just use this t
6b80: 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 65 64 69 o cancel any edi
6b90: 74 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 73 3a t..(begin.. (s:
6ba0: 64 65 6c 21 20 28 63 6f 6e 63 20 22 43 55 52 52 del! (conc "CURR
6bb0: 45 4e 54 5f 54 57 49 44 4c 45 52 5f 55 4e 44 45 ENT_TWIDLER_UNDE
6bc0: 52 5f 45 44 49 54 3a 22 20 77 69 64 29 29 0a 09 R_EDIT:" wid))..
6bd0: 20 20 28 73 65 74 21 20 65 64 69 74 2d 74 69 64 (set! edit-tid
6be0: 64 6c 65 72 20 23 66 29 0a 09 20 20 28 73 65 74 dler #f).. (set
6bf0: 21 20 74 6e 75 6d 65 64 69 74 20 23 66 29 0a 09 ! tnumedit #f)..
6c00: 20 20 28 73 65 74 21 20 76 69 65 77 2d 74 69 64 (set! view-tid
6c10: 64 6c 65 72 20 23 66 29 0a 09 20 20 28 74 77 69 dler #f).. (twi
6c20: 6b 69 3a 6e 6f 72 6d 61 6c 69 7a 65 2d 63 75 72 ki:normalize-cur
6c30: 72 65 6e 74 2d 74 77 69 64 64 6c 65 72 73 20 74 rent-twiddlers t
6c40: 64 62 20 77 69 64 29 0a 09 20 20 28 69 66 20 28 db wid).. (if (
6c50: 73 3a 67 65 74 20 63 76 61 72 29 0a 09 20 20 20 s:get cvar)..
6c60: 20 20 20 28 73 65 74 21 20 74 64 6c 6e 75 6d 73 (set! tdlnums
6c70: 20 28 6d 61 70 20 73 74 72 69 6e 67 2d 3e 6e 75 (map string->nu
6c80: 6d 62 65 72 20 28 73 74 72 69 6e 67 2d 73 70 6c mber (string-spl
6c90: 69 74 20 28 73 3a 67 65 74 20 63 76 61 72 29 20 it (s:get cvar)
6ca0: 22 2c 22 29 29 29 29 29 29 0a 20 20 20 20 28 69 ",")))))). (i
6cb0: 66 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 f (s:get-param "
6cc0: 64 65 6c 65 74 65 5f 74 69 64 64 6c 65 72 22 29 delete_tiddler")
6cd0: 20 27 28 29 29 0a 20 20 20 20 3b 3b 20 28 74 77 '()). ;; (tw
6ce0: 69 6b 69 3a 64 65 6c 65 74 65 5f 74 69 64 64 6c iki:delete_tiddl
6cf0: 65 72 20 74 64 62 20 77 69 64 20 28 73 74 72 69 er tdb wid (stri
6d00: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 ng->number (s:ge
6d10: 74 2d 70 61 72 61 6d 20 22 64 65 6c 65 74 65 5f t-param "delete_
6d20: 74 69 64 64 6c 65 72 22 29 29 29 29 0a 0a 20 20 tiddler"))))..
6d30: 20 20 28 73 3a 73 65 74 21 20 22 54 57 49 4b 49 (s:set! "TWIKI
6d40: 5f 4b 45 59 22 20 74 6b 65 79 29 20 3b 3b 20 74 _KEY" tkey) ;; t
6d50: 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 77 69 his mechanism wi
6d60: 6c 6c 20 66 61 69 6c 20 66 6f 72 20 68 69 65 72 ll fail for hier
6d70: 61 72 63 68 69 61 6c 20 74 77 69 6b 69 73 0a 20 archial twikis.
6d80: 20 20 20 3b 3b 20 6f 76 65 72 72 69 64 65 20 74 ;; override t
6d90: 68 65 20 74 77 69 64 64 6c 65 72 20 74 6f 20 65 he twiddler to e
6da0: 64 69 74 20 77 68 65 6e 20 65 64 69 74 69 6e 67 dit when editing
6db0: 20 4d 61 69 6e 4d 65 6e 75 0a 20 20 20 20 28 69 MainMenu. (i
6dc0: 66 20 65 64 69 74 2d 74 69 64 64 6c 65 72 0a 09 f edit-tiddler..
6dd0: 28 62 65 67 69 6e 0a 09 20 20 28 73 65 74 21 20 (begin.. (set!
6de0: 74 6e 75 6d 65 64 69 74 20 28 74 77 69 6b 69 3a tnumedit (twiki:
6df0: 74 69 64 64 6c 65 72 2d 67 65 74 2d 69 64 20 65 tiddler-get-id e
6e00: 64 69 74 2d 74 69 64 64 6c 65 72 29 29 0a 09 20 dit-tiddler))..
6e10: 20 28 73 3a 73 65 74 21 20 27 74 77 69 6b 69 5f (s:set! 'twiki_
6e20: 74 69 74 6c 65 20 28 74 77 69 6b 69 3a 74 69 64 title (twiki:tid
6e30: 64 6c 65 72 2d 67 65 74 2d 6e 61 6d 65 20 65 64 dler-get-name ed
6e40: 69 74 2d 74 69 64 64 6c 65 72 29 29 0a 09 20 20 it-tiddler))..
6e50: 28 73 3a 73 65 74 21 20 27 74 77 69 6b 69 5f 62 (s:set! 'twiki_b
6e60: 6f 64 79 20 20 28 74 77 69 6b 69 3a 67 65 74 2d ody (twiki:get-
6e70: 64 61 74 20 74 64 62 20 28 74 77 69 6b 69 3a 74 dat tdb (twiki:t
6e80: 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 2d 69 iddler-get-dat-i
6e90: 64 20 65 64 69 74 2d 74 69 64 64 6c 65 72 29 29 d edit-tiddler))
6ea0: 29 29 29 0a 20 20 20 20 28 69 66 20 76 69 65 77 ))). (if view
6eb0: 2d 74 69 64 64 6c 65 72 0a 09 28 62 65 67 69 6e -tiddler..(begin
6ec0: 0a 09 20 20 28 73 65 74 21 20 74 6e 75 6d 76 69 .. (set! tnumvi
6ed0: 65 77 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 ew (twiki:tiddle
6ee0: 72 2d 67 65 74 2d 69 64 20 76 69 65 77 2d 74 69 r-get-id view-ti
6ef0: 64 64 6c 65 72 29 29 29 29 0a 20 20 20 20 0a 20 ddler)))). .
6f00: 20 20 20 3b 3b 20 4e 4f 57 20 57 48 41 54 20 46 ;; NOW WHAT F
6f10: 4f 52 20 56 49 45 57 20 2d 20 66 69 78 20 74 68 OR VIEW - fix th
6f20: 65 20 6c 69 6e 6b 73 2c 20 61 64 64 20 74 6f 20 e links, add to
6f30: 74 64 6c 73 74 0a 0a 0a 20 20 20 20 28 69 66 20 tdlst... (if
6f40: 65 64 69 74 2d 74 6d 65 6e 75 2d 69 64 20 20 20 edit-tmenu-id
6f50: 28 73 65 74 21 20 74 6e 75 6d 65 64 69 74 20 65 (set! tnumedit e
6f60: 64 69 74 2d 74 6d 65 6e 75 2d 69 64 29 29 0a 20 dit-tmenu-id)).
6f70: 20 20 20 28 69 66 20 74 6e 75 6d 65 64 69 74 20 (if tnumedit
6f80: 28 73 65 74 21 20 74 64 6c 6e 75 6d 73 20 28 63 (set! tdlnums (c
6f90: 6f 6e 73 20 74 6e 75 6d 65 64 69 74 20 74 64 6c ons tnumedit tdl
6fa0: 6e 75 6d 73 29 29 29 0a 20 20 20 20 28 69 66 20 nums))). (if
6fb0: 74 6e 75 6d 76 69 65 77 20 28 73 65 74 21 20 74 tnumview (set! t
6fc0: 64 6c 6e 75 6d 73 20 28 63 6f 6e 73 20 74 6e 75 dlnums (cons tnu
6fd0: 6d 76 69 65 77 20 74 64 6c 6e 75 6d 73 29 29 29 mview tdlnums)))
6fe0: 0a 20 20 20 20 28 73 65 74 21 20 74 64 6c 72 73 . (set! tdlrs
6ff0: 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 (twiki:get-tidd
7000: 6c 65 72 73 2d 62 79 2d 6e 75 6d 20 74 64 62 20 lers-by-num tdb
7010: 77 69 64 20 74 64 6c 6e 75 6d 73 29 29 0a 0a 20 wid tdlnums))..
7020: 20 20 20 3b 3b 20 72 65 6d 6f 76 65 20 74 64 6c ;; remove tdl
7030: 72 73 20 66 72 6f 6d 20 74 68 65 20 6c 69 73 74 rs from the list
7040: 20 69 66 20 63 6c 6f 73 65 5f 74 69 64 64 6c 65 if close_tiddle
7050: 72 20 63 61 6c 6c 65 64 0a 20 20 20 20 28 69 66 r called. (if
7060: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 63 (s:get-param "c
7070: 6c 6f 73 65 5f 74 69 64 64 6c 65 72 22 29 0a 09 lose_tiddler")..
7080: 28 73 65 74 21 20 74 64 6c 72 73 20 28 6c 65 74 (set! tdlrs (let
7090: 20 28 28 74 6e 75 6d 20 28 73 74 72 69 6e 67 2d ((tnum (string-
70a0: 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 74 2d 70 >number (s:get-p
70b0: 61 72 61 6d 20 22 63 6c 6f 73 65 5f 74 69 64 64 aram "close_tidd
70c0: 6c 65 72 22 29 29 29 29 0a 09 09 20 20 20 20 20 ler"))))...
70d0: 20 28 72 65 6d 6f 76 65 20 28 6c 61 6d 62 64 61 (remove (lambda
70e0: 20 28 74 29 0a 09 09 09 09 28 65 71 75 61 6c 3f (t).....(equal?
70f0: 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d (twiki:tiddler-
7100: 67 65 74 2d 69 64 20 74 29 20 74 6e 75 6d 29 29 get-id t) tnum))
7110: 0a 09 09 09 20 20 20 20 20 20 74 64 6c 72 73 29 .... tdlrs)
7120: 29 29 29 0a 0a 20 20 20 20 3b 3b 20 72 65 6d 6f ))).. ;; remo
7130: 76 65 20 61 6c 6c 20 6f 74 68 65 72 73 20 69 66 ve all others if
7140: 20 63 6c 6f 73 65 5f 6f 74 68 65 72 5f 74 69 64 close_other_tid
7150: 64 6c 65 72 73 20 63 61 6c 6c 65 64 0a 20 20 20 dlers called.
7160: 20 28 69 66 20 28 73 3a 67 65 74 2d 70 61 72 61 (if (s:get-para
7170: 6d 20 22 63 6c 6f 73 65 5f 6f 74 68 65 72 5f 74 m "close_other_t
7180: 69 64 64 6c 65 72 73 22 29 0a 09 28 73 65 74 21 iddlers")..(set!
7190: 20 74 64 6c 72 73 20 28 6c 65 74 20 28 28 74 6e tdlrs (let ((tn
71a0: 75 6d 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 um (string->numb
71b0: 65 72 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 er (s:get-param
71c0: 22 63 6c 6f 73 65 5f 6f 74 68 65 72 5f 74 69 64 "close_other_tid
71d0: 64 6c 65 72 73 22 29 29 29 29 0a 09 09 20 20 20 dlers"))))...
71e0: 20 20 20 28 72 65 6d 6f 76 65 20 28 6c 61 6d 62 (remove (lamb
71f0: 64 61 20 28 74 29 0a 09 09 09 09 28 6e 6f 74 20 da (t).....(not
7200: 28 65 71 75 61 6c 3f 20 28 74 77 69 6b 69 3a 74 (equal? (twiki:t
7210: 69 64 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 29 iddler-get-id t)
7220: 20 74 6e 75 6d 29 29 29 0a 09 09 09 20 20 20 20 tnum)))....
7230: 20 20 74 64 6c 72 73 29 29 29 29 0a 20 20 20 20 tdlrs)))).
7240: 0a 20 20 20 20 28 73 3a 73 65 74 21 20 63 76 61 . (s:set! cva
7250: 72 20 28 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 69 r (twiki:make-ti
7260: 64 64 6c 65 72 2d 6c 69 73 74 20 74 64 6c 72 73 ddler-list tdlrs
7270: 29 29 0a 20 20 20 20 28 69 66 20 74 6e 75 6d 65 )). (if tnume
7280: 64 69 74 20 0a 09 28 73 3a 73 65 74 21 20 63 76 dit ..(s:set! cv
7290: 61 72 2d 65 64 20 74 6e 75 6d 65 64 69 74 29 0a ar-ed tnumedit).
72a0: 09 28 73 3a 64 65 6c 21 20 63 76 61 72 2d 65 64 .(s:del! cvar-ed
72b0: 29 29 0a 0a 20 20 20 20 3b 3b 20 6d 75 73 74 20 )).. ;; must
72c0: 68 61 76 65 20 61 20 4d 61 69 6e 4d 65 6e 75 20 have a MainMenu
72d0: 74 69 64 64 6c 65 72 20 62 79 20 6e 6f 77 0a 20 tiddler by now.
72e0: 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 6d (if (null? lm
72f0: 65 6e 75 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 enu)..(begin..
7300: 28 74 77 69 6b 69 3a 73 61 76 65 2d 74 69 64 64 (twiki:save-tidd
7310: 6c 65 72 20 74 64 62 20 22 4d 61 69 6e 4d 65 6e ler tdb "MainMen
7320: 75 22 20 22 22 20 22 22 20 77 69 64 20 28 74 77 u" "" "" wid (tw
7330: 69 6b 69 3a 67 65 74 2d 69 64 29 29 0a 09 20 20 iki:get-id))..
7340: 28 73 65 74 21 20 6c 6d 65 6e 75 20 28 74 77 69 (set! lmenu (twi
7350: 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 20 ki:get-tiddlers
7360: 74 64 62 20 77 69 64 20 28 6c 69 73 74 20 22 4d tdb wid (list "M
7370: 61 69 6e 4d 65 6e 75 22 29 29 29 29 29 0a 20 20 ainMenu"))))).
7380: 20 20 0a 20 20 20 20 3b 3b 20 67 65 74 20 74 68 . ;; get th
7390: 65 20 74 69 64 64 6c 65 72 73 20 66 72 6f 6d 20 e tiddlers from
73a0: 74 68 65 20 64 62 20 6e 6f 77 0a 20 20 20 20 28 the db now. (
73b0: 73 65 74 21 20 72 65 73 75 6c 74 0a 09 20 20 28 set! result.. (
73c0: 73 3a 64 69 76 20 27 63 6c 61 73 73 20 22 74 77 s:div 'class "tw
73d0: 69 6b 69 22 0a 09 20 20 20 3b 3b 20 66 6c 6f 61 iki".. ;; floa
73e0: 74 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 74 t to the right t
73f0: 68 65 20 63 6f 6e 74 72 6f 6c 20 6d 65 6e 75 0a he control menu.
7400: 09 20 20 20 28 73 3a 64 69 76 20 27 63 6c 61 73 . (s:div 'clas
7410: 73 20 22 74 77 69 6b 69 2d 6d 61 69 6e 2d 6d 65 s "twiki-main-me
7420: 6e 75 22 20 28 74 77 69 6b 69 3a 6d 61 69 6e 74 nu" (twiki:maint
7430: 5f 61 72 65 61 20 74 64 62 20 77 69 64 20 74 6b _area tdb wid tk
7440: 65 79 20 77 69 6b 69 64 61 74 29 29 0a 09 20 20 ey wikidat))..
7450: 20 28 74 77 69 6b 69 3a 76 69 65 77 2d 74 69 64 (twiki:view-tid
7460: 64 6c 65 72 20 74 64 62 20 20 74 6b 65 79 20 77 dler tdb tkey w
7470: 69 64 20 28 63 61 72 20 6c 6d 65 6e 75 29 20 77 id (car lmenu) w
7480: 69 6b 69 64 61 74 29 0a 09 20 20 20 3b 3b 20 74 ikidat).. ;; t
7490: 68 69 73 20 69 73 20 70 72 6f 62 61 62 6c 79 20 his is probably
74a0: 6e 6f 74 20 6e 65 65 64 65 64 20 61 73 20 74 68 not needed as th
74b0: 65 72 65 20 69 73 20 6e 6f 20 72 65 61 73 6f 6e ere is no reason
74c0: 20 74 6f 20 63 72 65 61 74 65 20 74 69 64 64 6c to create tiddl
74d0: 65 72 73 20 74 68 69 73 20 77 61 79 0a 09 20 20 ers this way..
74e0: 20 3b 3b 20 28 69 66 20 28 65 71 3f 20 74 6e 75 ;; (if (eq? tnu
74f0: 6d 65 64 69 74 20 2d 31 29 28 74 77 69 6b 69 3a medit -1)(twiki:
7500: 65 64 69 74 2d 74 69 64 64 6c 65 72 20 74 64 62 edit-tiddler tdb
7510: 20 74 6b 65 79 20 77 69 64 20 74 6e 75 6d 65 64 tkey wid tnumed
7520: 69 74 29 20 27 28 29 29 0a 09 20 20 20 3b 3b 20 it) '()).. ;;
7530: 69 6e 73 65 72 74 20 74 68 65 20 70 69 63 74 75 insert the pictu
7540: 72 65 20 65 64 69 74 6f 72 20 77 69 6e 64 6f 77 re editor window
7550: 20 69 66 20 65 6e 61 62 6c 65 64 0a 09 20 20 20 if enabled..
7560: 28 69 66 20 28 65 71 75 61 6c 3f 20 28 73 3a 67 (if (equal? (s:g
7570: 65 74 2d 70 61 72 61 6d 20 22 74 77 69 6b 69 5f et-param "twiki_
7580: 6d 61 69 6e 74 22 29 20 22 32 22 29 28 74 77 69 maint") "2")(twi
7590: 6b 69 3a 70 69 63 5f 6d 67 6d 74 20 74 64 62 20 ki:pic_mgmt tdb
75a0: 77 69 64 20 74 6b 65 79 29 20 27 28 29 29 0a 09 wid tkey) '())..
75b0: 20 20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 28 (if (equal? (
75c0: 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 77 69 s:get-param "twi
75d0: 6b 69 5f 6d 61 69 6e 74 22 29 20 22 34 22 29 28 ki_maint") "4")(
75e0: 74 77 69 6b 69 3a 68 65 6c 70 20 31 29 20 27 28 twiki:help 1) '(
75f0: 29 29 0a 09 20 20 20 28 69 66 20 28 6e 6f 74 20 )).. (if (not
7600: 28 6e 75 6c 6c 3f 20 74 64 6c 72 73 29 29 0a 09 (null? tdlrs))..
7610: 20 20 20 20 20 20 20 28 6d 61 70 20 28 6c 61 6d (map (lam
7620: 62 64 61 20 28 74 64 6c 72 29 0a 09 09 20 20 20 bda (tdlr)...
7630: 20 20 20 28 6c 65 74 20 28 28 74 6e 75 6d 20 20 (let ((tnum
7640: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
7650: 65 74 2d 69 64 20 74 64 6c 72 29 29 29 0a 09 09 et-id tdlr)))...
7660: 09 28 73 3a 6c 6f 67 20 22 74 6e 75 6d 3a 20 22 .(s:log "tnum: "
7670: 20 74 6e 75 6d 20 22 20 74 6e 75 6d 65 64 69 74 tnum " tnumedit
7680: 3a 20 22 20 74 6e 75 6d 65 64 69 74 29 0a 09 09 : " tnumedit)...
7690: 09 28 69 66 20 28 61 6e 64 20 74 6e 75 6d 65 64 .(if (and tnumed
76a0: 69 74 20 28 6e 6f 74 20 74 65 64 69 74 65 64 29 it (not tedited)
76b0: 20 28 65 71 75 61 6c 3f 20 74 6e 75 6d 65 64 69 (equal? tnumedi
76c0: 74 20 74 6e 75 6d 29 29 0a 09 09 09 20 20 20 20 t tnum))....
76d0: 28 62 65 67 69 6e 0a 09 09 09 20 20 20 20 20 20 (begin....
76e0: 28 73 65 74 21 20 74 65 64 69 74 65 64 20 23 74 (set! tedited #t
76f0: 29 20 3b 3b 20 6f 6e 6c 79 20 61 6c 6c 6f 77 20 ) ;; only allow
7700: 65 64 69 74 69 6e 67 20 6f 6e 65 20 74 69 64 64 editing one tidd
7710: 6c 65 72 20 61 74 20 61 20 74 69 6d 65 0a 09 09 ler at a time...
7720: 09 20 20 20 20 20 20 28 74 77 69 6b 69 3a 65 64 . (twiki:ed
7730: 69 74 2d 74 69 64 64 6c 65 72 20 74 64 62 20 74 it-tiddler tdb t
7740: 6b 65 79 20 77 69 64 20 74 6e 75 6d 29 29 0a 09 key wid tnum))..
7750: 09 09 20 20 20 20 28 74 77 69 6b 69 3a 76 69 65 .. (twiki:vie
7760: 77 2d 74 69 64 64 6c 65 72 20 74 64 62 20 20 74 w-tiddler tdb t
7770: 6b 65 79 20 77 69 64 20 74 64 6c 72 20 77 69 6b key wid tdlr wik
7780: 69 64 61 74 29 29 29 29 0a 09 09 20 20 20 20 74 idat))))... t
7790: 64 6c 72 73 29 0a 09 20 20 20 20 20 20 20 27 28 dlrs).. '(
77a0: 29 29 29 29 0a 20 20 20 20 28 64 62 69 3a 63 6c )))). (dbi:cl
77b0: 6f 73 65 20 74 64 62 29 0a 20 20 20 20 72 65 73 ose tdb). res
77c0: 75 6c 74 29 29 0a 0a 3b 3b 20 73 68 6f 75 6c 64 ult))..;; should
77d0: 20 64 6f 20 61 20 73 69 6e 67 6c 65 20 6d 6f 72 do a single mor
77e0: 65 20 65 66 66 69 63 69 65 6e 74 20 71 75 65 72 e efficient quer
77f0: 79 20 62 75 74 20 74 68 69 73 20 69 73 20 67 6f y but this is go
7800: 6f 64 20 65 6e 6f 75 67 68 0a 28 64 65 66 69 6e od enough.(defin
7810: 65 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 e (twiki:get-tid
7820: 64 6c 65 72 73 20 64 62 20 77 69 64 20 74 6e 61 dlers db wid tna
7830: 6d 65 73 29 0a 20 20 28 61 70 70 6c 79 20 74 77 mes). (apply tw
7840: 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 iki:get-tiddlers
7850: 2d 62 79 2d 6e 61 6d 65 20 64 62 20 77 69 64 20 -by-name db wid
7860: 74 6e 61 6d 65 73 29 29 0a 3b 3b 20 20 20 28 6c tnames)).;; (l
7870: 65 74 2a 20 28 28 74 64 6c 72 73 20 27 28 29 29 et* ((tdlrs '())
7880: 0a 3b 3b 20 09 20 3b 3b 20 28 63 6f 6e 6e 20 20 .;; . ;; (conn
7890: 20 28 73 64 61 74 2d 67 65 74 2d 63 6f 6e 6e 20 (sdat-get-conn
78a0: 73 3a 73 65 73 73 69 6f 6e 29 29 0a 3b 3b 20 09 s:session)).;; .
78b0: 20 28 6e 61 6d 65 6c 73 74 20 28 63 6f 6e 63 20 (namelst (conc
78c0: 22 28 27 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 "('" (string-int
78d0: 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 63 6f ersperse (map co
78e0: 6e 63 20 74 6e 61 6d 65 73 29 20 22 27 2c 27 22 nc tnames) "','"
78f0: 29 20 22 27 29 22 29 29 0a 3b 3b 20 09 20 28 71 ) "')")).;; . (q
7900: 72 79 20 20 20 20 20 28 63 6f 6e 63 20 74 77 69 ry (conc twi
7910: 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 6c 65 63 ki:tiddler-selec
7920: 74 6f 72 20 22 20 57 48 45 52 45 20 74 2e 77 69 tor " WHERE t.wi
7930: 6b 69 5f 69 64 3d 3f 20 41 4e 44 20 74 2e 69 64 ki_id=? AND t.id
7940: 20 49 4e 20 22 20 6e 61 6d 65 6c 73 74 20 22 3b IN " namelst ";
7950: 22 29 29 29 0a 3b 3b 20 20 20 20 20 3b 3b 20 28 "))).;; ;; (
7960: 70 72 69 6e 74 20 71 72 79 29 0a 3b 3b 20 20 20 print qry).;;
7970: 20 20 28 64 62 69 3a 66 6f 72 2d 65 61 63 68 2d (dbi:for-each-
7980: 72 6f 77 0a 3b 3b 20 20 20 20 20 20 28 6c 61 6d row.;; (lam
7990: 62 64 61 20 28 72 6f 77 29 0a 3b 3b 20 20 20 20 bda (row).;;
79a0: 20 20 20 20 28 73 65 74 21 20 74 64 6c 72 73 20 (set! tdlrs
79b0: 28 63 6f 6e 73 20 72 6f 77 20 74 64 6c 72 73 29 (cons row tdlrs)
79c0: 29 29 0a 3b 3b 20 20 20 20 20 20 64 62 20 71 72 )).;; db qr
79d0: 79 20 77 69 64 29 0a 3b 3b 20 20 20 20 20 28 72 y wid).;; (r
79e0: 65 76 65 72 73 65 20 74 64 6c 72 73 29 29 29 20 everse tdlrs)))
79f0: 3b 3b 20 21 54 77 69 6b 69 5c 0a 0a 3b 3b 20 74 ;; !Twiki\..;; t
7a00: 6c 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 lst is a list of
7a10: 20 74 69 64 64 6c 65 72 20 6e 75 6d 73 0a 28 64 tiddler nums.(d
7a20: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 efine (twiki:get
7a30: 2d 74 69 64 64 6c 65 72 73 2d 62 79 2d 6e 75 6d -tiddlers-by-num
7a40: 20 64 62 20 77 69 64 20 74 6c 73 74 29 0a 20 20 db wid tlst).
7a50: 3b 3b 20 28 73 3a 6c 6f 67 20 22 47 6f 74 20 74 ;; (s:log "Got t
7a60: 6f 20 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 o twiki:get-tidd
7a70: 6c 65 72 73 20 77 69 74 68 20 6b 65 79 73 3a 20 lers with keys:
7a80: 22 20 74 6c 73 74 20 22 20 61 6e 64 20 77 69 64 " tlst " and wid
7a90: 3a 20 22 20 77 69 64 29 0a 20 20 3b 3b 20 73 65 : " wid). ;; se
7aa0: 6c 65 63 74 20 77 68 65 72 65 20 63 72 65 61 74 lect where creat
7ab0: 65 64 5f 6f 6e 20 3c 20 73 6f 6d 65 64 61 74 65 ed_on < somedate
7ac0: 20 6f 72 64 65 72 20 62 79 20 63 72 65 61 74 65 order by create
7ad0: 64 5f 6f 6e 20 64 65 73 63 20 6c 69 6d 69 74 20 d_on desc limit
7ae0: 31 0a 20 20 28 6c 65 74 2a 20 28 28 74 64 6c 72 1. (let* ((tdlr
7af0: 73 20 27 28 29 29 0a 09 20 28 74 6c 73 74 73 74 s '()).. (tlstst
7b00: 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 r (string-inters
7b10: 70 65 72 73 65 20 28 6d 61 70 20 6e 75 6d 62 65 perse (map numbe
7b20: 72 2d 3e 73 74 72 69 6e 67 20 74 6c 73 74 29 20 r->string tlst)
7b30: 22 2c 22 29 29 0a 09 20 28 61 6c 72 65 61 64 79 ",")).. (already
7b40: 2d 67 6f 74 20 28 6d 61 6b 65 2d 68 61 73 68 2d -got (make-hash-
7b50: 74 61 62 6c 65 29 29 0a 09 20 28 71 72 79 20 20 table)).. (qry
7b60: 20 20 28 63 6f 6e 63 20 74 77 69 6b 69 3a 74 69 (conc twiki:ti
7b70: 64 64 6c 65 72 2d 73 65 6c 65 63 74 6f 72 20 22 ddler-selector "
7b80: 20 57 48 45 52 45 20 74 2e 77 69 6b 69 5f 69 64 WHERE t.wiki_id
7b90: 3d 3f 20 41 4e 44 20 74 2e 69 64 20 49 4e 20 28 =? AND t.id IN (
7ba0: 22 20 74 6c 73 74 73 74 72 20 22 29 20 4f 52 44 " tlststr ") ORD
7bb0: 45 52 20 42 59 20 63 72 65 61 74 65 64 5f 6f 6e ER BY created_on
7bc0: 20 44 45 53 43 3b 22 29 29 29 0a 20 20 20 20 28 DESC;"))). (
7bd0: 64 62 69 3a 66 6f 72 2d 65 61 63 68 2d 72 6f 77 dbi:for-each-row
7be0: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 72 . (lambda (r
7bf0: 6f 77 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 ow). (let
7c00: 28 28 74 6e 61 6d 65 20 28 74 77 69 6b 69 3a 74 ((tname (twiki:t
7c10: 69 64 64 6c 65 72 2d 67 65 74 2d 6e 61 6d 65 20 iddler-get-name
7c20: 72 6f 77 29 29 29 0a 09 20 28 69 66 20 28 6e 6f row))).. (if (no
7c30: 74 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 t (hash-table-re
7c40: 66 2f 64 65 66 61 75 6c 74 20 61 6c 72 65 61 64 f/default alread
7c50: 79 2d 67 6f 74 20 74 6e 61 6d 65 20 23 66 29 29 y-got tname #f))
7c60: 0a 09 20 20 20 20 20 28 62 65 67 69 6e 0a 09 20 .. (begin..
7c70: 20 20 20 20 20 20 28 73 65 74 21 20 74 64 6c 72 (set! tdlr
7c80: 73 20 28 63 6f 6e 73 20 72 6f 77 20 74 64 6c 72 s (cons row tdlr
7c90: 73 29 29 0a 09 20 20 20 20 20 20 20 28 68 61 73 s)).. (has
7ca0: 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 61 6c 72 h-table-set! alr
7cb0: 65 61 64 79 2d 67 6f 74 20 74 6e 61 6d 65 20 23 eady-got tname #
7cc0: 74 29 29 29 29 29 0a 20 20 20 20 20 64 62 20 71 t))))). db q
7cd0: 72 79 20 77 69 64 29 0a 20 20 20 20 28 69 66 20 ry wid). (if
7ce0: 28 6e 75 6c 6c 3f 20 74 64 6c 72 73 29 20 74 64 (null? tdlrs) td
7cf0: 6c 72 73 20 28 72 65 76 65 72 73 65 20 74 64 6c lrs (reverse tdl
7d00: 72 73 29 29 29 29 20 3b 3b 20 21 54 77 69 6b 69 rs)))) ;; !Twiki
7d10: 5c 6e 54 69 74 6c 65 2c 20 70 69 63 74 75 72 65 \nTitle, picture
7d20: 73 2c 20 65 74 63 2e 5c 6e 7b 7b 7b 5c 6e 43 6f s, etc.\n{{{\nCo
7d30: 64 65 5c 6e 7d 7d 7d 5c 6e 5b 5b 6c 69 6e 6b 73 de\n}}}\n[[links
7d40: 5d 5d 5c 6e 7c 74 61 62 6c 65 7c 6f 66 7c 73 74 ]]\n|table|of|st
7d50: 75 66 66 7c 5c 6e 7c 6d 6f 72 65 7c 73 74 75 66 uff|\n|more|stuf
7d60: 66 7c 68 65 72 65 7c 5c 6e 22 29 29 0a 0a 3b 3b f|here|\n"))..;;
7d70: 20 77 69 64 20 3d 20 77 69 6b 69 20 69 64 0a 3b wid = wiki id.;
7d80: 3b 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74 ; returns a list
7d90: 20 6f 66 20 74 77 69 6b 69 3a 74 69 64 64 6c 65 of twiki:tiddle
7da0: 72 73 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b rs.(define (twik
7db0: 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 2d 62 i:get-tiddlers-b
7dc0: 79 2d 6e 61 6d 65 20 74 64 62 20 77 69 64 20 2e y-name tdb wid .
7dd0: 20 6e 61 6d 65 73 29 0a 20 20 28 6c 65 74 20 28 names). (let (
7de0: 28 74 64 6c 72 73 20 27 28 29 29 29 0a 20 20 20 (tdlrs '())).
7df0: 20 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 (for-each (lamb
7e00: 64 61 20 28 6e 61 6d 65 29 0a 09 09 28 6c 65 74 da (name)...(let
7e10: 20 28 28 74 64 6c 72 20 28 74 77 69 6b 69 3a 67 ((tdlr (twiki:g
7e20: 65 74 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 et-tiddler-by-na
7e30: 6d 65 20 74 64 62 20 77 69 64 20 6e 61 6d 65 29 me tdb wid name)
7e40: 29 29 0a 09 09 20 20 28 69 66 20 74 64 6c 72 20 ))... (if tdlr
7e50: 28 73 65 74 21 20 74 64 6c 72 73 20 28 63 6f 6e (set! tdlrs (con
7e60: 73 20 74 64 6c 72 20 74 64 6c 72 73 29 29 29 29 s tdlr tdlrs))))
7e70: 29 0a 09 20 20 20 20 20 20 6e 61 6d 65 73 29 0a ).. names).
7e80: 20 20 20 20 28 72 65 76 65 72 73 65 20 74 64 6c (reverse tdl
7e90: 72 73 29 29 29 0a 3b 3b 20 77 69 74 68 20 74 68 rs))).;; with th
7ea0: 65 20 72 69 67 68 74 20 71 75 65 72 79 20 69 74 e right query it
7eb0: 20 73 68 6f 75 6c 64 20 62 65 20 70 6f 73 73 69 should be possi
7ec0: 62 6c 65 20 74 6f 20 64 6f 20 74 68 69 73 20 6d ble to do this m
7ed0: 75 63 68 20 66 61 73 74 65 72 20 61 70 70 72 6f uch faster appro
7ee0: 61 63 68 20 66 6f 72 20 74 77 69 6b 69 3a 67 65 ach for twiki:ge
7ef0: 74 2d 74 69 64 64 6c 65 72 73 2d 62 79 2d 6e 61 t-tiddlers-by-na
7f00: 6d 65 0a 3b 3b 20 20 20 28 6c 65 74 20 28 28 74 me.;; (let ((t
7f10: 64 6c 72 73 20 27 28 29 29 0a 3b 3b 20 09 28 6e dlrs '()).;; .(n
7f20: 61 6d 65 6c 73 74 20 28 63 6f 6e 63 20 22 28 27 amelst (conc "('
7f30: 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 " (string-inters
7f40: 70 65 72 73 65 20 6e 61 6d 65 73 20 22 27 2c 27 perse names "','
7f50: 22 29 20 22 27 29 22 29 29 29 0a 3b 3b 20 20 20 ") "')"))).;;
7f60: 20 20 28 64 62 69 3a 66 6f 72 2d 65 61 63 68 2d (dbi:for-each-
7f70: 72 6f 77 0a 3b 3b 20 20 20 20 20 20 28 6c 61 6d row.;; (lam
7f80: 62 64 61 20 28 72 6f 77 29 0a 3b 3b 20 20 20 20 bda (row).;;
7f90: 20 20 20 20 28 73 65 74 21 20 74 64 6c 72 73 20 (set! tdlrs
7fa0: 28 63 6f 6e 73 20 72 6f 77 20 74 64 6c 72 73 29 (cons row tdlrs)
7fb0: 29 29 0a 3b 3b 20 20 20 20 20 20 74 64 62 0a 3b )).;; tdb.;
7fc0: 3b 20 20 20 20 20 20 28 63 6f 6e 63 20 74 77 69 ; (conc twi
7fd0: 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 6c 65 63 ki:tiddler-selec
7fe0: 74 6f 72 20 22 20 57 48 45 52 45 20 74 2e 77 69 tor " WHERE t.wi
7ff0: 6b 69 5f 69 64 3d 3f 20 41 4e 44 20 74 2e 6e 61 ki_id=? AND t.na
8000: 6d 65 20 49 4e 20 22 20 6e 61 6d 65 6c 73 74 29 me IN " namelst)
8010: 20 77 69 64 29 0a 3b 3b 20 20 20 20 20 28 72 65 wid).;; (re
8020: 76 65 72 73 65 20 74 64 6c 72 73 29 29 29 0a 0a verse tdlrs)))..
8030: 3b 3b 20 67 65 74 20 74 68 65 20 74 69 64 64 6c ;; get the tiddl
8040: 65 72 20 77 69 74 68 20 74 68 65 20 67 69 76 65 er with the give
8050: 6e 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 6d n name and the m
8060: 61 78 20 64 61 74 65 0a 28 64 65 66 69 6e 65 20 ax date.(define
8070: 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c (twiki:get-tiddl
8080: 65 72 2d 62 79 2d 6e 61 6d 65 20 74 64 62 20 77 er-by-name tdb w
8090: 69 64 20 6e 61 6d 65 29 0a 20 20 28 64 62 69 3a id name). (dbi:
80a0: 67 65 74 2d 6f 6e 65 2d 72 6f 77 20 74 64 62 20 get-one-row tdb
80b0: 28 63 6f 6e 63 20 74 77 69 6b 69 3a 74 69 64 64 (conc twiki:tidd
80c0: 6c 65 72 2d 73 65 6c 65 63 74 6f 72 20 22 20 57 ler-selector " W
80d0: 48 45 52 45 20 74 2e 77 69 6b 69 5f 69 64 3d 3f HERE t.wiki_id=?
80e0: 20 41 4e 44 20 74 2e 6e 61 6d 65 3d 3f 20 4f 52 AND t.name=? OR
80f0: 44 45 52 20 42 59 20 63 72 65 61 74 65 64 5f 6f DER BY created_o
8100: 6e 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 22 n DESC LIMIT 1;"
8110: 29 20 77 69 64 20 6e 61 6d 65 29 29 0a 0a 28 64 ) wid name))..(d
8120: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 efine (twiki:tid
8130: 64 6c 65 72 2d 6e 61 6d 65 2d 3e 69 64 20 64 62 dler-name->id db
8140: 20 74 6e 61 6d 65 29 0a 20 20 28 64 62 69 3a 67 tname). (dbi:g
8150: 65 74 2d 6f 6e 65 20 64 62 20 22 53 45 4c 45 43 et-one db "SELEC
8160: 54 20 69 64 20 46 52 4f 4d 20 74 69 64 64 6c 65 T id FROM tiddle
8170: 72 73 20 57 48 45 52 45 20 6e 61 6d 65 3d 3f 3b rs WHERE name=?;
8180: 22 20 74 6e 61 6d 65 29 29 0a 0a 3b 3b 3d 3d 3d " tname))..;;===
8190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
81d0: 3d 3d 3d 0a 3b 3b 20 74 77 69 6b 69 20 74 65 78 ===.;; twiki tex
81e0: 74 20 66 6f 72 6d 61 74 69 6e 67 2c 20 70 61 72 t formating, par
81f0: 73 69 6e 67 20 61 6e 64 20 64 69 73 70 6c 61 79 sing and display
8200: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
8210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 74 77 =========..;; tw
8250: 69 6b 69 20 66 6f 72 6d 61 74 69 6e 67 20 72 6f iki formating ro
8260: 75 74 69 6e 65 73 20 28 6f 76 65 72 72 69 64 65 utines (override
8270: 20 74 68 65 73 65 20 74 6f 20 63 68 61 6e 67 65 these to change
8280: 20 79 6f 75 72 20 6c 6f 6f 6b 20 61 6e 64 20 66 your look and f
8290: 65 65 6c 0a 28 64 65 66 69 6e 65 20 74 77 69 6b eel.(define twik
82a0: 69 3a 74 77 69 6b 69 2d 74 61 67 20 20 73 3a 62 i:twiki-tag s:b
82b0: 29 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a ).(define twiki:
82c0: 68 33 20 20 20 20 20 20 20 20 20 73 3a 68 33 29 h3 s:h3)
82d0: 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 68 .(define twiki:h
82e0: 32 20 20 20 20 20 20 20 20 20 73 3a 68 32 29 0a 2 s:h2).
82f0: 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 68 31 (define twiki:h1
8300: 20 20 20 20 20 20 20 20 20 73 3a 68 31 29 0a 3b s:h1).;
8310: 3b 20 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a ; (define twiki:
8320: 6d 61 6b 65 2d 74 6c 69 6e 6b 20 73 3a 69 29 0a make-tlink s:i).
8330: 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 75 6c (define twiki:ul
8340: 20 20 20 20 20 20 20 20 20 73 3a 75 6c 29 0a 28 s:ul).(
8350: 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 6f 6c 20 define twiki:ol
8360: 20 20 20 20 20 20 20 20 73 3a 6f 6c 29 0a 28 64 s:ol).(d
8370: 65 66 69 6e 65 20 74 77 69 6b 69 3a 6c 69 20 20 efine twiki:li
8380: 20 20 20 20 20 20 20 73 3a 6c 69 29 0a 28 64 65 s:li).(de
8390: 66 69 6e 65 20 74 77 69 6b 69 3a 70 72 65 20 20 fine twiki:pre
83a0: 20 20 20 20 20 20 73 3a 70 72 65 29 0a 28 64 65 s:pre).(de
83b0: 66 69 6e 65 20 74 77 69 6b 69 3a 70 20 20 20 20 fine twiki:p
83c0: 20 20 20 20 20 20 73 3a 70 29 0a 28 64 65 66 69 s:p).(defi
83d0: 6e 65 20 74 77 69 6b 69 3a 75 20 20 20 20 20 20 ne twiki:u
83e0: 20 20 20 20 73 3a 75 29 0a 28 64 65 66 69 6e 65 s:u).(define
83f0: 20 74 77 69 6b 69 3a 74 64 20 20 20 20 20 20 20 twiki:td
8400: 20 20 73 3a 74 64 29 0a 28 64 65 66 69 6e 65 20 s:td).(define
8410: 74 77 69 6b 69 3a 74 72 20 20 20 20 20 20 20 20 twiki:tr
8420: 20 73 3a 74 72 29 0a 28 64 65 66 69 6e 65 20 74 s:tr).(define t
8430: 77 69 6b 69 3a 74 61 62 6c 65 20 20 20 20 20 20 wiki:table
8440: 73 3a 74 61 62 6c 65 29 0a 28 64 65 66 69 6e 65 s:table).(define
8450: 20 74 77 69 6b 69 3a 64 69 76 20 20 20 20 20 20 twiki:div
8460: 20 20 73 3a 64 69 76 29 0a 0a 28 64 65 66 69 6e s:div)..(defin
8470: 65 20 28 74 77 69 6b 69 3a 77 65 62 36 34 65 6e e (twiki:web64en
8480: 63 20 73 74 72 29 0a 20 20 28 73 74 72 69 6e 67 c str). (string
8490: 2d 73 75 62 73 74 69 74 75 74 65 20 22 3d 22 20 -substitute "="
84a0: 22 5f 22 20 28 62 61 73 65 36 34 3a 62 61 73 65 "_" (base64:base
84b0: 36 34 2d 65 6e 63 6f 64 65 20 73 74 72 29 20 23 64-encode str) #
84c0: 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 t))..(define (tw
84d0: 69 6b 69 3a 77 65 62 36 34 64 65 63 20 73 74 72 iki:web64dec str
84e0: 29 0a 20 20 28 62 61 73 65 36 34 3a 62 61 73 65 ). (base64:base
84f0: 36 34 2d 64 65 63 6f 64 65 20 28 73 74 72 69 6e 64-decode (strin
8500: 67 2d 73 75 62 73 74 69 74 75 74 65 20 22 5f 22 g-substitute "_"
8510: 20 22 3d 22 20 73 74 72 20 23 74 29 29 29 0a 20 "=" str #t))).
8520: 20 20 20 0a 28 64 65 66 69 6e 65 20 28 74 77 69 .(define (twi
8530: 6b 69 3a 6d 61 6b 65 2d 74 6c 69 6e 6b 20 74 65 ki:make-tlink te
8540: 78 74 20 74 69 64 64 6c 65 72 6e 61 6d 65 29 0a xt tiddlername).
8550: 20 20 28 73 3a 61 20 74 65 78 74 20 27 68 72 65 (s:a text 'hre
8560: 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 f (s:link-to (tw
8570: 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 iki:get-link-bac
8580: 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 76 k-to-current) 'v
8590: 69 65 77 5f 74 69 64 64 6c 65 72 20 28 74 77 69 iew_tiddler (twi
85a0: 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 69 64 64 ki:web64enc tidd
85b0: 6c 65 72 6e 61 6d 65 29 29 29 29 0a 0a 28 64 65 lername))))..(de
85c0: 66 69 6e 65 20 28 74 77 69 6b 69 3a 70 69 63 20 fine (twiki:pic
85d0: 70 69 63 2d 6e 61 6d 65 20 73 69 7a 65 20 77 69 pic-name size wi
85e0: 6b 69 29 0a 20 20 28 6c 65 74 2a 20 28 28 74 64 ki). (let* ((td
85f0: 62 20 20 20 20 28 74 77 69 6b 69 3a 77 69 6b 69 b (twiki:wiki
8600: 2d 67 65 74 2d 64 62 68 20 77 69 6b 69 29 29 0a -get-dbh wiki)).
8610: 09 20 28 74 6b 65 79 20 20 20 28 74 77 69 6b 69 . (tkey (twiki
8620: 3a 77 69 6b 69 2d 67 65 74 2d 6b 65 79 20 77 69 :wiki-get-key wi
8630: 6b 69 29 29 0a 09 20 28 78 79 20 20 20 20 20 28 ki)).. (xy (
8640: 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 73 69 7a string-split siz
8650: 65 20 22 78 22 29 29 0a 09 20 28 70 69 63 2d 69 e "x")).. (pic-i
8660: 64 20 28 74 77 69 6b 69 3a 67 65 74 2d 70 69 63 d (twiki:get-pic
8670: 2d 69 64 20 74 64 62 20 70 69 63 2d 6e 61 6d 65 -id tdb pic-name
8680: 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 67 65 74 (twiki:wiki-get
8690: 2d 77 69 64 20 77 69 6b 69 29 29 29 0a 09 20 28 -wid wiki))).. (
86a0: 69 6d 67 2d 6c 6e 6b 20 20 28 73 3a 6c 69 6e 6b img-lnk (s:link
86b0: 2d 74 6f 20 22 74 77 69 6b 69 22 20 27 77 69 6b -to "twiki" 'wik
86c0: 69 5f 6b 65 79 20 28 63 6f 6e 63 20 28 6e 75 6d i_key (conc (num
86d0: 62 65 72 2d 3e 73 74 72 69 6e 67 20 28 74 77 69 ber->string (twi
86e0: 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 77 69 64 20 ki:wiki-get-wid
86f0: 77 69 6b 69 29 29 20 22 2d 22 20 28 74 77 69 6b wiki)) "-" (twik
8700: 69 3a 77 65 62 36 34 65 6e 63 20 74 6b 65 79 29 i:web64enc tkey)
8710: 29 0a 09 09 09 20 20 20 20 20 20 27 69 6d 61 67 ).... 'imag
8720: 65 20 20 70 69 63 2d 69 64 29 29 29 0a 20 20 20 e pic-id))).
8730: 20 28 69 66 20 28 61 6e 64 20 28 3e 20 28 6c 65 (if (and (> (le
8740: 6e 67 74 68 20 78 79 29 20 31 29 0a 09 20 20 20 ngth xy) 1)..
8750: 20 20 28 63 61 72 20 78 79 29 0a 09 20 20 20 20 (car xy)..
8760: 20 28 63 61 64 72 20 78 79 29 29 20 3b 3b 20 79 (cadr xy)) ;; y
8770: 65 70 2c 20 68 61 76 65 20 74 77 6f 20 6e 75 6d ep, have two num
8780: 62 65 72 73 0a 09 28 73 3a 69 6d 67 20 27 74 69 bers..(s:img 'ti
8790: 74 6c 65 20 70 69 63 2d 6e 61 6d 65 20 27 61 6c tle pic-name 'al
87a0: 74 20 70 69 63 2d 6e 61 6d 65 20 27 77 69 64 74 t pic-name 'widt
87b0: 68 20 28 63 61 72 20 78 79 29 20 27 68 65 69 67 h (car xy) 'heig
87c0: 68 74 20 28 63 61 64 72 20 78 79 29 20 27 73 72 ht (cadr xy) 'sr
87d0: 63 20 69 6d 67 2d 6c 6e 6b 29 0a 09 28 73 3a 69 c img-lnk)..(s:i
87e0: 6d 67 20 27 74 69 74 6c 65 20 70 69 63 2d 6e 61 mg 'title pic-na
87f0: 6d 65 20 27 61 6c 74 20 70 69 63 2d 6e 61 6d 65 me 'alt pic-name
8800: 20 27 73 72 63 20 69 6d 67 2d 6c 6e 6b 29 29 29 'src img-lnk)))
8810: 29 0a 0a 3b 3b 20 6f 76 65 72 72 69 64 65 20 74 )..;; override t
8820: 68 65 73 65 20 61 6c 73 6f 0a 28 64 65 66 69 6e hese also.(defin
8830: 65 20 28 74 77 69 6b 69 3a 67 65 74 2d 69 64 29 e (twiki:get-id)
8840: 0a 20 20 28 73 3a 73 65 73 73 69 6f 6e 2d 76 61 . (s:session-va
8850: 72 2d 67 65 74 20 22 69 64 22 29 29 0a 0a 3b 3b r-get "id"))..;;
8860: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 74 override this t
8870: 6f 20 73 65 74 20 6c 69 6e 6b 73 20 69 6e 73 69 o set links insi
8880: 64 65 20 77 69 6b 69 27 73 0a 28 64 65 66 69 6e de wiki's.(defin
8890: 65 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e e (twiki:get-lin
88a0: 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e k-back-to-curren
88b0: 74 29 0a 20 20 28 73 3a 63 75 72 72 65 6e 74 2d t). (s:current-
88c0: 70 61 67 65 29 29 0a 0a 0a 3b 3b 20 72 65 67 65 page))...;; rege
88d0: 78 65 73 20 61 72 65 20 6c 69 73 74 65 64 20 69 xes are listed i
88e0: 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 n the order in w
88f0: 68 69 63 68 20 74 68 65 79 20 73 68 6f 75 6c 64 hich they should
8900: 20 62 65 20 63 68 65 63 6b 65 64 0a 0a 28 64 65 be checked..(de
8910: 66 69 6e 65 20 74 77 69 6b 69 3a 68 33 2d 70 61 fine twiki:h3-pa
8920: 74 74 20 28 72 65 67 65 78 70 20 22 5e 21 21 21 tt (regexp "^!!!
8930: 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 69 6e 65 (.*)$")).(define
8940: 20 74 77 69 6b 69 3a 68 32 2d 70 61 74 74 20 28 twiki:h2-patt (
8950: 72 65 67 65 78 70 20 22 5e 21 21 28 2e 2a 29 24 regexp "^!!(.*)$
8960: 22 29 29 0a 28 64 65 66 69 6e 65 20 74 77 69 6b ")).(define twik
8970: 69 3a 68 31 2d 70 61 74 74 20 28 72 65 67 65 78 i:h1-patt (regex
8980: 70 20 22 5e 21 28 2e 2a 29 24 22 29 29 0a 0a 28 p "^!(.*)$"))..(
8990: 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 74 6c 69 define twiki:tli
89a0: 6e 6b 2d 70 61 74 74 20 20 20 20 20 28 72 65 67 nk-patt (reg
89b0: 65 78 70 20 22 5e 28 2e 2a 29 5c 5c 5b 5c 5c 5b exp "^(.*)\\[\\[
89c0: 28 5b 5e 5c 5c 5b 5c 5c 5d 5d 2a 29 5c 5c 5d 5c ([^\\[\\]]*)\\]\
89d0: 5c 5d 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 69 \](.*)$")).(defi
89e0: 6e 65 20 74 77 69 6b 69 3a 70 69 63 2d 70 61 74 ne twiki:pic-pat
89f0: 74 20 20 20 20 20 20 20 28 72 65 67 65 78 70 20 t (regexp
8a00: 22 5e 28 2e 2a 29 5c 5c 5b 70 69 63 28 5b 30 2d "^(.*)\\[pic([0-
8a10: 39 25 5d 2a 78 2a 5b 30 2d 39 25 5d 2a 29 5c 5c 9%]*x*[0-9%]*)\\
8a20: 5b 28 5b 5e 5c 5c 5b 5c 5c 5d 5d 2b 29 5c 5c 5d [([^\\[\\]]+)\\]
8a30: 5c 5c 5d 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 \\](.*)$")).(def
8a40: 69 6e 65 20 74 77 69 6b 69 3a 75 6e 64 65 72 6c ine twiki:underl
8a50: 69 6e 65 2d 70 61 74 74 20 28 72 65 67 65 78 70 ine-patt (regexp
8a60: 20 22 5e 28 2e 2a 29 5f 5f 28 2e 2a 29 5f 5f 28 "^(.*)__(.*)__(
8a70: 2e 2a 29 24 22 29 29 0a 28 64 65 66 69 6e 65 20 .*)$")).(define
8a80: 74 77 69 6b 69 3a 74 61 62 6c 65 2d 70 61 74 74 twiki:table-patt
8a90: 20 20 20 20 20 28 72 65 67 65 78 70 20 22 5e 5c (regexp "^\
8aa0: 5c 7c 28 2e 2a 29 5c 5c 7c 24 22 29 29 0a 0a 3b \|(.*)\\|$"))..;
8ab0: 3b 20 74 68 65 73 65 20 61 72 65 20 66 6f 72 20 ; these are for
8ac0: 6d 75 6c 74 69 2d 6c 69 6e 65 20 66 6f 72 6d 61 multi-line forma
8ad0: 74 69 6e 67 0a 28 64 65 66 69 6e 65 20 74 77 69 ting.(define twi
8ae0: 6b 69 3a 6c 69 73 74 2d 70 61 74 74 20 20 20 20 ki:list-patt
8af0: 28 72 65 67 65 78 70 20 22 5e 28 5c 5c 2a 2b 7c (regexp "^(\\*+|
8b00: 5c 5c 23 2b 29 28 2e 2a 29 24 22 29 29 0a 28 64 \\#+)(.*)$")).(d
8b10: 65 66 69 6e 65 20 74 77 69 6b 69 3a 62 75 6c 6c efine twiki:bull
8b20: 65 74 2d 70 61 74 74 20 20 28 72 65 67 65 78 70 et-patt (regexp
8b30: 20 22 5e 28 5c 5c 2a 2b 29 28 2e 2a 29 24 22 29 "^(\\*+)(.*)$")
8b40: 29 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a ).(define twiki:
8b50: 6e 75 6d 62 65 72 2d 70 61 74 74 20 20 28 72 65 number-patt (re
8b60: 67 65 78 70 20 22 5e 28 5c 5c 23 2b 29 28 2e 2a gexp "^(\\#+)(.*
8b70: 29 24 22 29 29 0a 28 64 65 66 69 6e 65 20 74 77 )$")).(define tw
8b80: 69 6b 69 3a 70 72 65 66 6f 72 2d 70 61 74 74 20 iki:prefor-patt
8b90: 20 28 72 65 67 65 78 70 20 22 5e 5c 5c 7b 5c 5c (regexp "^\\{\\
8ba0: 7b 5c 5c 7b 24 22 29 29 0a 28 64 65 66 69 6e 65 {\\{$")).(define
8bb0: 20 74 77 69 6b 69 3a 70 72 65 66 6f 72 2d 65 6e twiki:prefor-en
8bc0: 64 2d 70 61 74 74 20 28 72 65 67 65 78 70 20 22 d-patt (regexp "
8bd0: 5e 5c 5c 7d 5c 5c 7d 5c 5c 7d 24 22 29 29 0a 0a ^\\}\\}\\}$"))..
8be0: 3b 3b 20 72 65 67 65 78 0a 28 64 65 66 69 6e 65 ;; regex.(define
8bf0: 20 74 3a 6d 61 74 63 68 20 20 23 66 29 0a 28 64 t:match #f).(d
8c00: 65 66 69 6e 65 20 28 74 2d 6d 61 74 63 68 20 72 efine (t-match r
8c10: 20 73 29 0a 20 20 28 6c 65 74 20 28 28 72 65 73 s). (let ((res
8c20: 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 72 (string-match r
8c30: 20 73 29 29 29 0a 20 20 20 20 28 73 65 74 21 20 s))). (set!
8c40: 74 3a 6d 61 74 63 68 20 72 65 73 29 0a 20 20 20 t:match res).
8c50: 20 72 65 73 29 29 0a 0a 3b 3b 20 73 68 6f 75 6c res))..;; shoul
8c60: 64 20 73 77 69 74 63 68 20 74 6f 20 72 65 63 75 d switch to recu
8c70: 72 73 69 76 65 6c 79 20 70 72 6f 63 65 73 73 69 rsively processi
8c80: 6e 67 20 62 79 20 62 6c 6f 63 6b 3f 0a 3b 3b 20 ng by block?.;;
8c90: 28 70 72 6f 63 65 73 73 2d 62 6c 6f 63 6b 20 64 (process-block d
8ca0: 61 74 29 0a 3b 3b 20 20 20 2e 2e 2e 0a 3b 3b 20 at).;; ....;;
8cb0: 20 20 28 70 72 6f 63 65 73 73 2d 62 6c 6f 63 6b (process-block
8cc0: 20 72 65 6d 64 61 74 29 0a 28 64 65 66 69 6e 65 remdat).(define
8cd0: 20 28 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 6d (twiki:dat->htm
8ce0: 6c 20 64 61 74 20 77 69 6b 69 29 0a 20 20 28 6c l dat wiki). (l
8cf0: 65 74 2a 20 28 28 69 6e 70 20 20 20 20 20 20 20 et* ((inp
8d00: 20 28 6f 70 65 6e 2d 69 6e 70 75 74 2d 73 74 72 (open-input-str
8d10: 69 6e 67 20 64 61 74 29 29 0a 09 20 28 6e 65 73 ing dat)).. (nes
8d20: 74 2d 64 65 70 74 68 20 30 29 20 3b 3b 20 64 65 t-depth 0) ;; de
8d30: 70 74 68 20 6f 66 20 6e 65 73 74 65 64 20 6c 69 pth of nested li
8d40: 73 74 73 0a 09 20 3b 3b 20 74 6f 6b 65 6e 20 28 sts.. ;; token (
8d50: 69 2e 65 2e 20 6c 69 6e 65 29 20 68 61 6e 64 6c i.e. line) handl
8d60: 69 6e 67 20 73 74 75 66 66 0a 09 20 28 6e 65 78 ing stuff.. (nex
8d70: 74 2d 6c 69 6e 65 20 20 23 66 29 0a 09 20 28 70 t-line #f).. (p
8d80: 65 65 6b 2d 6c 69 6e 65 20 20 28 6c 61 6d 62 64 eek-line (lambd
8d90: 61 20 28 29 0a 09 09 20 20 20 20 20 20 20 6e 65 a ()... ne
8da0: 78 74 2d 6c 69 6e 65 29 29 0a 09 20 28 67 65 74 xt-line)).. (get
8db0: 2d 6c 69 6e 65 20 20 20 28 6c 61 6d 62 64 61 20 -line (lambda
8dc0: 28 29 0a 09 09 20 20 20 20 20 20 20 28 6c 65 74 ()... (let
8dd0: 20 28 28 72 65 73 20 6e 65 78 74 2d 6c 69 6e 65 ((res next-line
8de0: 29 29 0a 09 09 09 20 28 73 65 74 21 20 6e 65 78 )).... (set! nex
8df0: 74 2d 6c 69 6e 65 20 28 72 65 61 64 2d 6c 69 6e t-line (read-lin
8e00: 65 20 69 6e 70 29 29 0a 09 09 09 20 3b 3b 20 28 e inp)).... ;; (
8e10: 70 72 69 6e 74 20 22 67 65 74 2d 6c 69 6e 65 3a print "get-line:
8e20: 20 70 72 65 76 3d 22 20 72 65 73 20 22 20 6e 65 prev=" res " ne
8e30: 78 74 3d 22 20 6e 65 78 74 2d 6c 69 6e 65 20 22 xt=" next-line "
8e40: 5c 6e 22 29 0a 09 09 09 20 72 65 73 29 29 29 0a \n").... res))).
8e50: 09 20 28 6c 20 20 20 20 20 20 20 20 20 20 28 67 . (l (g
8e60: 65 74 2d 6c 69 6e 65 29 29 29 20 3b 3b 20 64 69 et-line))) ;; di
8e70: 73 63 61 72 64 20 74 68 65 20 23 66 20 69 6e 20 scard the #f in
8e80: 6e 65 78 74 2d 6c 69 6e 65 0a 20 20 20 20 28 74 next-line. (t
8e90: 77 69 6b 69 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 wiki:read-block
8ea0: 70 65 65 6b 2d 6c 69 6e 65 20 67 65 74 2d 6c 69 peek-line get-li
8eb0: 6e 65 20 6e 65 73 74 2d 64 65 70 74 68 20 23 66 ne nest-depth #f
8ec0: 20 77 69 6b 69 29 29 29 0a 0a 3b 3b 20 62 6c 6b wiki)))..;; blk
8ed0: 2d 74 79 70 65 20 69 73 20 23 66 20 66 6f 72 20 -type is #f for
8ee0: 6e 6f 74 20 69 6e 20 61 20 62 6c 6f 63 6b 20 28 not in a block (
8ef0: 69 2e 65 2e 20 61 74 20 74 6f 70 20 6c 65 76 65 i.e. at top leve
8f00: 6c 29 2c 20 27 70 72 65 20 66 6f 72 20 70 72 65 l), 'pre for pre
8f10: 66 6f 72 6d 61 74 65 64 2c 20 27 75 6c 20 6f 72 formated, 'ul or
8f20: 20 27 6f 6c 0a 3b 3b 20 63 61 6c 6c 20 77 69 74 'ol.;; call wit
8f30: 68 20 66 69 72 73 74 20 6c 69 6e 65 20 61 73 20 h first line as
8f40: 6c 65 67 69 74 20 64 61 74 61 0a 3b 3b 20 69 2e legit data.;; i.
8f50: 65 2e 20 66 6f 72 20 70 72 65 66 6f 72 6d 20 2d e. for preform -
8f60: 20 73 6b 69 70 20 74 68 65 20 7b 7b 7b 20 6c 69 skip the {{{ li
8f70: 6e 65 20 74 68 65 6e 20 63 61 6c 6c 20 72 65 61 ne then call rea
8f80: 64 2d 62 6c 6f 63 6b 0a 3b 3b 20 20 20 20 20 20 d-block.;;
8f90: 66 6f 72 20 23 20 6f 72 20 2a 20 63 61 6c 6c 20 for # or * call
8fa0: 77 69 74 68 20 66 69 72 73 74 20 6c 69 6e 65 0a with first line.
8fb0: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 72 (define (twiki:r
8fc0: 65 61 64 2d 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c ead-block peek-l
8fd0: 69 6e 65 20 67 65 74 2d 6c 69 6e 65 20 6e 65 73 ine get-line nes
8fe0: 74 2d 64 65 70 74 68 20 62 6c 6b 2d 74 79 70 65 t-depth blk-type
8ff0: 20 77 69 6b 69 29 0a 20 20 28 6c 65 74 20 6c 6f wiki). (let lo
9000: 6f 70 20 28 28 72 65 73 20 27 28 29 29 0a 09 20 op ((res '())..
9010: 20 20 20 20 28 6c 20 20 20 28 70 65 65 6b 2d 6c (l (peek-l
9020: 69 6e 65 29 29 29 20 3b 3b 20 73 68 6f 75 6c 64 ine))) ;; should
9030: 20 74 68 69 73 20 62 65 20 61 20 70 65 65 6b 2d this be a peek-
9040: 6c 69 6e 65 3f 20 79 65 73 21 21 0a 20 20 20 20 line? yes!!.
9050: 3b 3b 20 28 70 72 69 6e 74 20 22 74 77 69 6b 69 ;; (print "twiki
9060: 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 6c 6f 6f 70 :read-block loop
9070: 20 6e 65 73 74 2d 64 65 70 74 68 3d 22 6e 65 73 nest-depth="nes
9080: 74 2d 64 65 70 74 68 20 22 20 62 6c 6b 2d 74 79 t-depth " blk-ty
9090: 70 65 3d 22 20 62 6c 6b 2d 74 79 70 65 20 22 20 pe=" blk-type "
90a0: 6c 3d 22 20 6c 20 22 5c 6e 20 20 72 65 73 3d 22 l=" l "\n res="
90b0: 20 72 65 73 29 0a 20 20 20 20 28 69 66 20 28 65 res). (if (e
90c0: 6f 66 2d 6f 62 6a 65 63 74 3f 20 6c 29 0a 09 3b of-object? l)..;
90d0: 3b 20 77 65 20 61 72 65 20 64 6f 6e 65 21 20 72 ; we are done! r
90e0: 65 74 75 72 6e 20 74 68 65 20 6c 69 73 74 0a 09 eturn the list..
90f0: 72 65 73 0a 09 3b 3b 20 70 72 6f 63 65 73 73 20 res..;; process
9100: 69 74 21 0a 09 28 63 6f 6e 64 0a 09 20 3b 3b 20 it!..(cond.. ;;
9110: 68 61 6e 64 6c 65 20 70 72 65 66 6f 72 6d 61 74 handle preformat
9120: 65 64 20 74 65 78 74 0a 09 20 28 28 65 71 3f 20 ed text.. ((eq?
9130: 62 6c 6b 2d 74 79 70 65 20 27 70 72 65 29 0a 09 blk-type 'pre)..
9140: 20 20 28 69 66 20 28 74 2d 6d 61 74 63 68 20 20 (if (t-match
9150: 74 77 69 6b 69 3a 70 72 65 66 6f 72 2d 65 6e 64 twiki:prefor-end
9160: 2d 70 61 74 74 20 6c 29 0a 09 20 20 20 20 20 20 -patt l)..
9170: 28 62 65 67 69 6e 0a 09 09 28 67 65 74 2d 6c 69 (begin...(get-li
9180: 6e 65 29 20 3b 3b 20 64 69 73 63 61 72 64 20 74 ne) ;; discard t
9190: 68 65 20 7d 7d 7d 0a 09 09 72 65 73 29 20 20 20 he }}}...res)
91a0: 20 20 20 20 3b 3b 20 65 6e 64 20 6f 66 20 70 72 ;; end of pr
91b0: 65 66 6f 72 6d 61 74 74 65 64 0a 09 20 20 20 20 eformatted..
91c0: 20 20 28 62 65 67 69 6e 0a 09 09 3b 3b 20 28 67 (begin...;; (g
91d0: 65 74 2d 6c 69 6e 65 29 20 3b 3b 20 64 69 73 63 et-line) ;; disc
91e0: 61 72 64 20 74 68 65 20 7b 7b 7b 0a 09 09 28 6c ard the {{{...(l
91f0: 6f 6f 70 20 28 61 70 70 65 6e 64 20 72 65 73 20 oop (append res
9200: 28 6c 69 73 74 20 28 67 65 74 2d 6c 69 6e 65 29 (list (get-line)
9210: 29 29 0a 09 09 20 20 20 20 20 20 28 70 65 65 6b ))... (peek
9220: 2d 6c 69 6e 65 29 29 29 29 29 0a 09 20 3b 3b 20 -line))))).. ;;
9230: 68 61 6e 64 6c 65 20 74 61 62 6c 65 73 0a 09 20 handle tables..
9240: 28 28 65 71 3f 20 62 6c 6b 2d 74 79 70 65 20 27 ((eq? blk-type '
9250: 74 61 62 6c 65 29 0a 09 20 20 28 69 66 20 28 74 table).. (if (t
9260: 2d 6d 61 74 63 68 20 74 77 69 6b 69 3a 74 61 62 -match twiki:tab
9270: 6c 65 2d 70 61 74 74 20 6c 29 0a 09 20 20 20 20 le-patt l)..
9280: 20 20 28 6c 65 74 20 28 28 63 65 6c 73 20 20 28 (let ((cels (
9290: 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 63 61 string-split (ca
92a0: 64 72 20 74 3a 6d 61 74 63 68 29 20 22 7c 22 29 dr t:match) "|")
92b0: 29 29 0a 09 09 28 67 65 74 2d 6c 69 6e 65 29 0a ))...(get-line).
92c0: 09 09 28 6c 6f 6f 70 20 28 61 70 70 65 6e 64 20 ..(loop (append
92d0: 72 65 73 20 28 74 77 69 6b 69 3a 74 72 20 28 6d res (twiki:tr (m
92e0: 61 70 20 74 77 69 6b 69 3a 74 64 20 0a 09 09 09 ap twiki:td ....
92f0: 09 09 09 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 ... (map (lambda
9300: 20 28 78 29 28 74 77 69 6b 69 3a 6c 69 6e 65 2d (x)(twiki:line-
9310: 3e 68 74 6d 6c 20 78 20 23 66 20 77 69 6b 69 29 >html x #f wiki)
9320: 29 20 63 65 6c 73 29 29 29 29 0a 09 09 20 20 20 ) cels))))...
9330: 20 20 20 28 67 65 74 2d 6c 69 6e 65 29 29 29 0a (get-line))).
9340: 09 20 20 20 20 20 20 72 65 73 29 29 0a 09 20 3b . res)).. ;
9350: 3b 20 68 61 6e 64 6c 65 20 6c 69 73 74 73 0a 09 ; handle lists..
9360: 20 28 28 6f 72 20 28 74 2d 6d 61 74 63 68 20 74 ((or (t-match t
9370: 77 69 6b 69 3a 62 75 6c 6c 65 74 2d 70 61 74 74 wiki:bullet-patt
9380: 20 6c 29 20 3b 3b 20 68 61 76 65 20 2a 0a 09 20 l) ;; have *..
9390: 20 20 20 20 20 28 74 2d 6d 61 74 63 68 20 74 77 (t-match tw
93a0: 69 6b 69 3a 6e 75 6d 62 65 72 2d 70 61 74 74 20 iki:number-patt
93b0: 6c 29 29 0a 09 20 20 28 6c 65 74 2a 20 28 28 64 l)).. (let* ((d
93c0: 69 72 65 63 74 69 76 65 20 28 63 61 64 72 20 74 irective (cadr t
93d0: 3a 6d 61 74 63 68 29 29 0a 09 09 20 28 6c 65 76 :match))... (lev
93e0: 65 6c 6e 75 6d 20 28 73 74 72 69 6e 67 2d 6c 65 elnum (string-le
93f0: 6e 67 74 68 20 64 69 72 65 63 74 69 76 65 29 29 ngth directive))
9400: 0a 09 09 20 28 74 65 78 74 20 20 20 20 20 28 74 ... (text (t
9410: 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 wiki:line->html
9420: 28 63 61 64 64 72 20 74 3a 6d 61 74 63 68 29 20 (caddr t:match)
9430: 23 74 20 77 69 6b 69 29 29 0a 09 09 20 28 62 74 #t wiki))... (bt
9440: 79 70 65 20 20 20 20 28 69 66 20 28 73 74 72 69 ype (if (stri
9450: 6e 67 3d 3f 20 22 23 22 20 28 73 75 62 73 74 72 ng=? "#" (substr
9460: 69 6e 67 20 64 69 72 65 63 74 69 76 65 20 30 20 ing directive 0
9470: 31 29 29 0a 09 09 09 20 20 20 20 20 20 20 27 6f 1)).... 'o
9480: 6c 0a 09 09 09 20 20 20 20 20 20 20 27 75 6c 29 l.... 'ul)
9490: 29 0a 09 09 20 28 66 75 6e 63 20 20 20 20 20 28 )... (func (
94a0: 69 66 20 28 65 71 3f 20 62 74 79 70 65 20 27 75 if (eq? btype 'u
94b0: 6c 29 0a 09 09 09 20 20 20 20 20 20 20 74 77 69 l).... twi
94c0: 6b 69 3a 75 6c 0a 09 09 09 20 20 20 20 20 20 20 ki:ul....
94d0: 74 77 69 6b 69 3a 6f 6c 29 29 29 0a 09 20 20 20 twiki:ol)))..
94e0: 20 3b 3b 20 28 70 72 69 6e 74 20 22 68 61 6e 64 ;; (print "hand
94f0: 6c 69 6e 67 20 22 20 62 74 79 70 65 20 22 3a 20 ling " btype ":
9500: 6c 65 76 65 6c 6e 75 6d 3d 22 20 6c 65 76 65 6c levelnum=" level
9510: 6e 75 6d 20 22 20 74 65 78 74 3d 22 20 74 65 78 num " text=" tex
9520: 74 20 22 20 6e 65 73 74 2d 64 65 70 74 68 3d 22 t " nest-depth="
9530: 20 6e 65 73 74 2d 64 65 70 74 68 20 22 20 62 6c nest-depth " bl
9540: 6b 2d 74 79 70 65 3d 22 20 62 6c 6b 2d 74 79 70 k-type=" blk-typ
9550: 65 29 0a 09 20 20 20 20 28 63 6f 6e 64 0a 09 20 e).. (cond..
9560: 20 20 20 20 28 28 6e 6f 74 20 62 6c 6b 2d 74 79 ((not blk-ty
9570: 70 65 29 20 3b 3b 20 69 2e 65 20 66 69 72 73 74 pe) ;; i.e first
9580: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 6c member of the l
9590: 69 73 74 21 0a 09 20 20 20 20 20 20 28 6c 6f 6f ist!.. (loo
95a0: 70 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 66 p (append res (f
95b0: 75 6e 63 20 28 74 77 69 6b 69 3a 72 65 61 64 2d unc (twiki:read-
95c0: 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c 69 6e 65 20 block peek-line
95d0: 67 65 74 2d 6c 69 6e 65 20 6c 65 76 65 6c 6e 75 get-line levelnu
95e0: 6d 20 62 74 79 70 65 20 77 69 6b 69 29 29 29 0a m btype wiki))).
95f0: 09 09 20 20 20 20 28 67 65 74 2d 6c 69 6e 65 29 .. (get-line)
9600: 29 29 0a 09 20 20 20 20 20 28 28 3e 20 6c 65 76 )).. ((> lev
9610: 65 6c 6e 75 6d 20 6e 65 73 74 2d 64 65 70 74 68 elnum nest-depth
9620: 29 0a 09 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 ).. (loop (
9630: 61 70 70 65 6e 64 20 72 65 73 20 28 66 75 6e 63 append res (func
9640: 20 28 74 77 69 6b 69 3a 72 65 61 64 2d 62 6c 6f (twiki:read-blo
9650: 63 6b 20 70 65 65 6b 2d 6c 69 6e 65 20 67 65 74 ck peek-line get
9660: 2d 6c 69 6e 65 20 28 2b 20 6e 65 73 74 2d 64 65 -line (+ nest-de
9670: 70 74 68 20 31 29 20 62 74 79 70 65 20 77 69 6b pth 1) btype wik
9680: 69 29 29 29 0a 09 09 20 20 20 20 28 70 65 65 6b i)))... (peek
9690: 2d 6c 69 6e 65 29 29 29 0a 09 20 20 20 20 20 28 -line))).. (
96a0: 28 3c 20 6c 65 76 65 6c 6e 75 6d 20 6e 65 73 74 (< levelnum nest
96b0: 2d 64 65 70 74 68 29 0a 09 20 20 20 20 20 20 28 -depth).. (
96c0: 61 70 70 65 6e 64 20 72 65 73 20 28 74 77 69 6b append res (twik
96d0: 69 3a 6c 69 20 74 65 78 74 29 29 29 20 3b 3b 20 i:li text))) ;;
96e0: 72 65 74 75 72 6e 20 74 68 65 20 62 75 6c 6c 65 return the bulle
96f0: 74 65 64 20 69 74 65 6d 2c 20 64 6f 6e 27 74 20 ted item, don't
9700: 67 65 74 20 74 68 65 20 6e 65 78 74 20 6c 69 6e get the next lin
9710: 65 3f 3f 0a 09 20 20 20 20 20 28 65 6c 73 65 0a e??.. (else.
9720: 09 20 20 20 20 20 20 28 67 65 74 2d 6c 69 6e 65 . (get-line
9730: 29 0a 09 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 ).. (loop (
9740: 61 70 70 65 6e 64 20 72 65 73 20 28 74 77 69 6b append res (twik
9750: 69 3a 6c 69 20 74 65 78 74 29 29 0a 09 09 20 20 i:li text))...
9760: 20 20 28 70 65 65 6b 2d 6c 69 6e 65 29 29 29 29 (peek-line))))
9770: 29 29 0a 09 20 28 28 74 2d 6d 61 74 63 68 20 74 )).. ((t-match t
9780: 77 69 6b 69 3a 70 72 65 66 6f 72 2d 70 61 74 74 wiki:prefor-patt
9790: 20 6c 29 0a 09 20 20 28 67 65 74 2d 6c 69 6e 65 l).. (get-line
97a0: 29 20 3b 3b 20 64 69 73 63 61 72 64 20 74 68 65 ) ;; discard the
97b0: 20 7b 7b 7b 0a 09 20 20 28 6c 6f 6f 70 20 28 61 {{{.. (loop (a
97c0: 70 70 65 6e 64 20 72 65 73 20 28 74 77 69 6b 69 ppend res (twiki
97d0: 3a 70 72 65 20 28 74 77 69 6b 69 3a 72 65 61 64 :pre (twiki:read
97e0: 2d 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c 69 6e 65 -block peek-line
97f0: 20 67 65 74 2d 6c 69 6e 65 20 6e 65 73 74 2d 64 get-line nest-d
9800: 65 70 74 68 20 27 70 72 65 20 77 69 6b 69 29 29 epth 'pre wiki))
9810: 29 0a 09 09 28 70 65 65 6b 2d 6c 69 6e 65 29 29 )...(peek-line))
9820: 29 0a 09 20 28 28 74 2d 6d 61 74 63 68 20 74 77 ).. ((t-match tw
9830: 69 6b 69 3a 74 61 62 6c 65 2d 70 61 74 74 20 6c iki:table-patt l
9840: 29 0a 09 20 20 28 67 65 74 2d 6c 69 6e 65 29 0a ).. (get-line).
9850: 09 20 20 28 6c 6f 6f 70 20 28 61 70 70 65 6e 64 . (loop (append
9860: 20 72 65 73 20 28 74 77 69 6b 69 3a 74 61 62 6c res (twiki:tabl
9870: 65 20 27 62 6f 72 64 65 72 20 31 20 27 63 65 6c e 'border 1 'cel
9880: 6c 73 70 61 63 69 6e 67 20 30 20 28 74 77 69 6b lspacing 0 (twik
9890: 69 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 70 65 65 i:read-block pee
98a0: 6b 2d 6c 69 6e 65 20 67 65 74 2d 6c 69 6e 65 20 k-line get-line
98b0: 30 20 27 74 61 62 6c 65 20 77 69 6b 69 29 29 29 0 'table wiki)))
98c0: 0a 09 09 28 70 65 65 6b 2d 6c 69 6e 65 29 29 29 ...(peek-line)))
98d0: 0a 09 20 28 65 6c 73 65 0a 09 20 20 28 67 65 74 .. (else.. (get
98e0: 2d 6c 69 6e 65 29 0a 09 20 20 28 6c 6f 6f 70 20 -line).. (loop
98f0: 28 61 70 70 65 6e 64 20 72 65 73 20 28 74 77 69 (append res (twi
9900: 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 6c 20 ki:line->html l
9910: 23 74 20 77 69 6b 69 29 29 0a 09 09 28 70 65 65 #t wiki))...(pee
9920: 6b 2d 6c 69 6e 65 29 29 29 29 29 29 29 0a 0a 28 k-line)))))))..(
9930: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 6c 69 define (twiki:li
9940: 6e 65 2d 3e 68 74 6d 6c 20 64 61 74 20 66 69 72 ne->html dat fir
9950: 73 74 63 61 6c 6c 20 77 69 6b 69 29 0a 20 20 28 stcall wiki). (
9960: 69 66 20 66 69 72 73 74 63 61 6c 6c 20 0a 20 20 if firstcall .
9970: 20 20 20 20 3b 3b 20 70 72 6f 63 65 73 73 20 74 ;; process t
9980: 68 65 20 70 61 74 74 65 72 6e 73 20 74 68 61 74 he patterns that
9990: 20 74 65 73 74 20 66 6f 72 20 62 65 67 69 6e 6e test for beginn
99a0: 69 6e 67 20 6f 66 20 6c 69 6e 65 20 6f 6e 6c 79 ing of line only
99b0: 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 on the first ca
99c0: 6c 6c 0a 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 ll. (cond.
99d0: 20 20 20 20 20 20 28 28 74 2d 6d 61 74 63 68 20 ((t-match
99e0: 74 77 69 6b 69 3a 68 33 2d 70 61 74 74 20 64 61 twiki:h3-patt da
99f0: 74 29 0a 09 28 74 77 69 6b 69 3a 68 33 20 28 74 t)..(twiki:h3 (t
9a00: 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 wiki:line->html
9a10: 28 63 61 64 72 20 74 3a 6d 61 74 63 68 29 20 23 (cadr t:match) #
9a20: 66 20 77 69 6b 69 29 29 29 0a 20 20 20 20 20 20 f wiki))).
9a30: 20 28 28 74 2d 6d 61 74 63 68 20 74 77 69 6b 69 ((t-match twiki
9a40: 3a 68 32 2d 70 61 74 74 20 64 61 74 29 0a 09 28 :h2-patt dat)..(
9a50: 74 77 69 6b 69 3a 68 32 20 28 74 77 69 6b 69 3a twiki:h2 (twiki:
9a60: 6c 69 6e 65 2d 3e 68 74 6d 6c 20 28 63 61 64 72 line->html (cadr
9a70: 20 74 3a 6d 61 74 63 68 29 20 23 66 20 77 69 6b t:match) #f wik
9a80: 69 29 29 29 0a 20 20 20 20 20 20 20 28 28 74 2d i))). ((t-
9a90: 6d 61 74 63 68 20 74 77 69 6b 69 3a 68 31 2d 70 match twiki:h1-p
9aa0: 61 74 74 20 64 61 74 29 0a 09 28 74 77 69 6b 69 att dat)..(twiki
9ab0: 3a 68 31 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d :h1 (twiki:line-
9ac0: 3e 68 74 6d 6c 20 28 63 61 64 72 20 74 3a 6d 61 >html (cadr t:ma
9ad0: 74 63 68 29 20 23 66 20 77 69 6b 69 29 29 29 0a tch) #f wiki))).
9ae0: 20 20 20 20 20 20 20 3b 3b 20 77 68 79 20 77 61 ;; why wa
9af0: 73 20 74 68 65 20 28 73 3a 62 72 29 20 68 65 72 s the (s:br) her
9b00: 65 3f 20 74 72 79 69 6e 67 20 77 69 74 68 6f 75 e? trying withou
9b10: 74 0a 20 20 20 20 20 20 20 28 65 6c 73 65 20 28 t. (else (
9b20: 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c twiki:line->html
9b30: 20 64 61 74 20 23 66 20 77 69 6b 69 29 29 29 0a dat #f wiki))).
9b40: 20 20 20 20 20 20 20 3b 3b 20 28 65 6c 73 65 20 ;; (else
9b50: 20 28 61 70 70 65 6e 64 20 28 74 77 69 6b 69 3a (append (twiki:
9b60: 6c 69 6e 65 2d 3e 68 74 6d 6c 20 64 61 74 20 23 line->html dat #
9b70: 66 20 77 69 6b 69 29 28 6c 69 73 74 20 28 73 3a f wiki)(list (s:
9b80: 62 72 29 29 29 29 29 3b 3b 20 28 73 3a 70 20 27 br)))));; (s:p '
9b90: 63 6c 61 73 73 20 22 74 69 64 64 6c 65 72 70 61 class "tiddlerpa
9ba0: 72 22 0a 20 20 20 20 20 20 3b 3b 20 6e 6f 74 20 r". ;; not
9bb0: 66 69 72 73 74 63 61 6c 6c 20 73 6f 20 70 72 6f firstcall so pro
9bc0: 63 65 73 73 20 6f 74 68 65 72 20 70 61 74 74 65 cess other patte
9bd0: 72 6e 73 0a 20 20 20 20 20 20 28 63 6f 6e 64 0a rns. (cond.
9be0: 20 20 20 20 20 20 20 28 28 74 2d 6d 61 74 63 68 ((t-match
9bf0: 20 74 77 69 6b 69 3a 74 6c 69 6e 6b 2d 70 61 74 twiki:tlink-pat
9c00: 74 20 64 61 74 29 0a 09 28 6c 65 74 20 28 28 70 t dat)..(let ((p
9c10: 72 65 20 20 28 63 61 64 72 20 20 20 74 3a 6d 61 re (cadr t:ma
9c20: 74 63 68 29 29 0a 09 20 20 20 20 20 20 28 6c 6e tch)).. (ln
9c30: 6b 20 20 28 63 61 64 64 72 20 20 74 3a 6d 61 74 k (caddr t:mat
9c40: 63 68 29 29 0a 09 20 20 20 20 20 20 28 70 6f 73 ch)).. (pos
9c50: 74 20 28 63 61 64 64 64 72 20 74 3a 6d 61 74 63 t (cadddr t:matc
9c60: 68 29 29 29 0a 09 20 20 28 6c 69 73 74 20 28 74 h))).. (list (t
9c70: 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 wiki:line->html
9c80: 70 72 65 20 23 66 20 77 69 6b 69 29 0a 09 09 28 pre #f wiki)...(
9c90: 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 6c 69 6e 6b twiki:make-tlink
9ca0: 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 (twiki:line->ht
9cb0: 6d 6c 20 6c 6e 6b 20 23 66 20 77 69 6b 69 29 20 ml lnk #f wiki)
9cc0: 6c 6e 6b 29 20 3b 3b 20 73 70 65 63 69 61 6c 20 lnk) ;; special
9cd0: 68 61 6e 64 6c 69 6e 67 0a 09 09 28 74 77 69 6b handling...(twik
9ce0: 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 70 6f 73 i:line->html pos
9cf0: 74 20 23 66 20 77 69 6b 69 29 29 29 29 0a 20 20 t #f wiki)))).
9d00: 20 20 20 20 20 28 28 74 2d 6d 61 74 63 68 20 74 ((t-match t
9d10: 77 69 6b 69 3a 70 69 63 2d 70 61 74 74 20 64 61 wiki:pic-patt da
9d20: 74 29 0a 09 28 6c 65 74 20 28 28 70 72 65 20 20 t)..(let ((pre
9d30: 28 63 61 64 72 20 20 20 20 74 3a 6d 61 74 63 68 (cadr t:match
9d40: 29 29 0a 09 20 20 20 20 20 20 28 73 69 7a 65 20 )).. (size
9d50: 28 63 61 64 64 72 20 20 20 74 3a 6d 61 74 63 68 (caddr t:match
9d60: 29 29 20 0a 09 20 20 20 20 20 20 28 70 69 63 20 )) .. (pic
9d70: 20 28 63 61 64 64 64 72 20 20 74 3a 6d 61 74 63 (cadddr t:matc
9d80: 68 29 29 0a 09 20 20 20 20 20 20 28 70 6f 73 74 h)).. (post
9d90: 20 28 6c 69 73 74 2d 72 65 66 20 74 3a 6d 61 74 (list-ref t:mat
9da0: 63 68 20 34 29 29 29 0a 09 20 20 28 6c 69 73 74 ch 4))).. (list
9db0: 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 (twiki:line->ht
9dc0: 6d 6c 20 70 72 65 20 23 66 20 77 69 6b 69 29 0a ml pre #f wiki).
9dd0: 09 09 28 74 77 69 6b 69 3a 70 69 63 20 70 69 63 ..(twiki:pic pic
9de0: 20 73 69 7a 65 20 77 69 6b 69 29 0a 09 09 28 74 size wiki)...(t
9df0: 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 wiki:line->html
9e00: 70 6f 73 74 20 23 74 20 77 69 6b 69 29 29 29 29 post #t wiki))))
9e10: 0a 20 20 20 20 20 20 20 28 28 74 2d 6d 61 74 63 . ((t-matc
9e20: 68 20 74 77 69 6b 69 3a 75 6e 64 65 72 6c 69 6e h twiki:underlin
9e30: 65 2d 70 61 74 74 20 64 61 74 29 0a 09 28 6c 65 e-patt dat)..(le
9e40: 74 20 28 28 70 72 65 20 20 28 63 61 64 72 20 20 t ((pre (cadr
9e50: 20 74 3a 6d 61 74 63 68 29 29 0a 09 20 20 20 20 t:match))..
9e60: 20 20 28 6c 6e 6b 20 20 28 63 61 64 64 72 20 20 (lnk (caddr
9e70: 74 3a 6d 61 74 63 68 29 29 0a 09 20 20 20 20 20 t:match))..
9e80: 20 28 70 6f 73 74 20 28 63 61 64 64 64 72 20 74 (post (cadddr t
9e90: 3a 6d 61 74 63 68 29 29 29 0a 09 20 20 28 6c 69 :match))).. (li
9ea0: 73 74 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e st (twiki:line->
9eb0: 68 74 6d 6c 20 70 72 65 20 23 66 20 77 69 6b 69 html pre #f wiki
9ec0: 29 0a 09 09 28 74 77 69 6b 69 3a 75 20 28 74 77 )...(twiki:u (tw
9ed0: 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 6c iki:line->html l
9ee0: 6e 6b 20 23 66 20 77 69 6b 69 29 29 0a 09 09 28 nk #f wiki))...(
9ef0: 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c twiki:line->html
9f00: 20 70 6f 73 74 20 23 66 20 77 69 6b 69 29 29 29 post #f wiki)))
9f10: 29 0a 20 20 20 20 20 20 20 28 28 74 2d 6d 61 74 ). ((t-mat
9f20: 63 68 20 74 77 69 6b 69 3a 74 61 62 6c 65 2d 70 ch twiki:table-p
9f30: 61 74 74 20 64 61 74 29 0a 09 28 6c 65 74 20 28 att dat)..(let (
9f40: 28 63 65 6c 73 20 20 28 73 74 72 69 6e 67 2d 73 (cels (string-s
9f50: 70 6c 69 74 20 28 63 61 64 72 20 74 3a 6d 61 74 plit (cadr t:mat
9f60: 63 68 29 20 22 7c 22 29 29 29 0a 09 20 20 28 74 ch) "|"))).. (t
9f70: 77 69 6b 69 3a 74 72 20 28 6d 61 70 20 74 77 69 wiki:tr (map twi
9f80: 6b 69 3a 74 64 20 28 74 77 69 6b 69 3a 6c 69 6e ki:td (twiki:lin
9f90: 65 2d 3e 68 74 6d 6c 20 63 65 6c 73 20 23 66 20 e->html cels #f
9fa0: 77 69 6b 69 29 29 29 29 29 0a 20 20 20 20 20 20 wiki))))).
9fb0: 20 28 65 6c 73 65 20 28 6c 69 73 74 20 64 61 74 (else (list dat
9fc0: 29 29 29 29 29 0a 0a 0a 23 7c 0a 28 74 77 69 6b )))))...#|.(twik
9fd0: 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 22 61 5c 6e i:dat->html "a\n
9fe0: 7b 7b 7b 5c 6e 62 5c 6e 63 5c 6e 64 5c 6e 7d 7d {{{\nb\nc\nd\n}}
9ff0: 7d 5c 6e 21 65 5c 6e 5b 5b 66 5d 5d 5c 6e 5b 5b }\n!e\n[[f]]\n[[
a000: 67 5d 5d 5c 6e 2a 68 22 20 77 69 6b 69 29 0a 28 g]]\n*h" wiki).(
a010: 73 3a 6f 75 74 70 75 74 20 28 63 75 72 72 65 6e s:output (curren
a020: 74 2d 6f 75 74 70 75 74 2d 70 6f 72 74 29 20 28 t-output-port) (
a030: 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 twiki:dat->html
a040: 22 21 54 65 73 74 69 6e 67 20 5b 5b 6d 79 20 66 "!Testing [[my f
a050: 69 72 73 74 20 6c 69 6e 6b 5d 5d 5c 6e 2a 20 54 irst link]]\n* T
a060: 65 73 74 5c 6e 2a 20 46 6f 6f 5c 6e 62 6c 61 68 est\n* Foo\nblah
a070: 22 20 77 69 6b 69 29 29 20 20 20 0a 28 73 3a 6f " wiki)) .(s:o
a080: 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d 6f utput (current-o
a090: 75 74 70 75 74 2d 70 6f 72 74 29 20 28 74 77 69 utput-port) (twi
a0a0: 6b 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 22 5b 5b ki:dat->html "[[
a0b0: 61 5d 5d 5c 6e 7b 7b 7b 5c 6e 62 5c 6e 20 20 63 a]]\n{{{\nb\n c
a0c0: 5c 6e 20 20 20 64 5c 6e 7d 7d 7d 5c 6e 2a 78 5c \n d\n}}}\n*x\
a0d0: 6e 5b 5b 66 5d 5d 5c 6e 5b 5b 67 5d 5d 5c 6e 2a n[[f]]\n[[g]]\n*
a0e0: 68 22 20 77 69 6b 69 29 29 0a 28 73 3a 6f 75 74 h" wiki)).(s:out
a0f0: 70 75 74 20 28 63 75 72 72 65 6e 74 2d 6f 75 74 put (current-out
a100: 70 75 74 2d 70 6f 72 74 29 0a 7c 23 0a 0a put-port).|#..