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 0a 3b 3b 20 54 d5 base64)..;; T
0190: 4f 44 4f 0a 3b 3b 0a 3b 3b 20 2a 20 49 6e 6c 69 ODO.;;.;; * Inli
01a0: 6e 65 20 74 69 64 64 6c 65 72 73 20 5b 69 6e 6c ne tiddlers [inl
01b0: 69 6e 65 5b 54 69 64 64 6c 65 72 4e 61 6d 65 5d ine[TiddlerName]
01c0: 5d 0a 3b 3b 20 2a 20 50 69 63 73 20 20 20 20 20 ].;; * Pics
01d0: 20 20 20 20 20 20 20 5b 70 69 63 20 58 20 59 5b [pic X Y[
01e0: 70 69 63 6e 61 6d 65 2e 6a 70 67 5d 5d 0a 3b 3b picname.jpg]].;;
01f0: 20 2a 20 4d 6f 76 65 20 74 77 69 6b 69 20 70 61 * Move twiki pa
0200: 72 73 69 6e 67 2f 65 78 70 61 6e 64 69 6e 67 20 rsing/expanding
0210: 74 6f 20 6d 61 74 74 73 75 74 69 6c 73 20 61 73 to mattsutils as
0220: 20 6c 6f 61 64 61 62 6c 65 20 6d 6f 64 75 6c 65 loadable module
0230: 0a 0a 3b 3b 20 52 6f 75 74 69 6e 65 73 20 69 6e ..;; Routines in
0240: 74 65 6e 64 65 64 20 74 6f 20 62 65 20 6f 76 65 tended to be ove
0250: 72 72 69 64 64 65 6e 20 62 79 20 65 6e 64 20 75 rridden by end u
0260: 73 65 72 73 0a 3b 3b 20 20 28 74 77 69 6b 69 3a sers.;; (twiki:
0270: 61 63 63 65 73 73 20 6b 65 79 73 20 77 69 6b 69 access keys wiki
0280: 2d 6e 61 6d 65 20 75 73 65 72 2d 69 64 29 0a 3b -name user-id).;
0290: 3b 20 73 65 61 72 63 68 20 74 68 65 20 63 6f 64 ; search the cod
02a0: 65 20 66 6f 72 20 22 6f 76 65 72 72 69 64 65 22 e for "override"
02b0: 20 66 6f 72 20 6d 6f 72 65 2e 0a 0a 3b 3b 20 54 for more...;; T
02c0: 68 69 73 20 69 73 20 74 68 65 20 63 75 72 72 65 his is the curre
02d0: 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6d ntly supported m
02e0: 65 63 68 61 6e 69 73 6d 2e 20 50 6f 73 74 67 72 echanism. Postgr
02f0: 65 73 20 77 69 6c 6c 20 62 65 20 61 64 64 65 64 es will be added
0300: 20 6c 61 74 65 72 20 2d 6d 72 77 2d 20 37 2f 32 later -mrw- 7/2
0310: 36 2f 32 30 30 39 0a 3b 3b 0a 28 64 65 66 69 6e 6/2009.;;.(defin
0320: 65 20 28 74 77 69 6b 69 3a 6f 70 65 6e 2d 64 62 e (twiki:open-db
0330: 20 6b 65 79 20 2e 20 63 72 65 61 74 65 2d 6e 6f key . create-no
0340: 74 2d 6f 6b 29 0a 20 20 3b 3b 20 28 73 3a 6c 6f t-ok). ;; (s:lo
0350: 67 20 22 47 6f 74 20 74 6f 20 74 77 69 6b 69 3a g "Got to twiki:
0360: 6f 70 65 6e 2d 64 62 20 77 69 74 68 20 6b 65 79 open-db with key
0370: 3a 20 22 20 6b 65 79 29 0a 20 20 28 6c 65 74 2a : " key). (let*
0380: 20 28 28 63 72 65 61 74 65 2d 6f 6b 20 28 69 66 ((create-ok (if
0390: 20 28 6e 75 6c 6c 3f 20 63 72 65 61 74 65 2d 6e (null? create-n
03a0: 6f 74 2d 6f 6b 29 20 23 74 20 28 63 61 72 20 63 ot-ok) #t (car c
03b0: 72 65 61 74 65 2d 6e 6f 74 2d 6f 6b 29 29 29 0a reate-not-ok))).
03c0: 09 20 28 66 64 61 74 20 20 20 20 20 20 28 74 77 . (fdat (tw
03d0: 69 6b 69 3a 6b 65 79 2d 3e 66 6e 61 6d 65 20 6b iki:key->fname k
03e0: 65 79 29 29 0a 09 20 28 62 61 73 65 70 61 74 68 ey)).. (basepath
03f0: 20 20 28 73 6c 6f 74 2d 72 65 66 20 73 3a 73 65 (slot-ref s:se
0400: 73 73 69 6f 6e 20 27 74 77 69 6b 69 64 69 72 29 ssion 'twikidir)
0410: 29 0a 09 20 28 66 70 61 74 68 20 20 20 20 20 28 ).. (fpath (
0420: 63 61 72 20 66 64 61 74 29 29 0a 09 20 28 66 6e car fdat)).. (fn
0430: 61 6d 65 20 20 20 20 20 28 63 61 64 72 20 66 64 ame (cadr fd
0440: 61 74 29 29 0a 09 20 28 66 75 6c 6c 6e 61 6d 65 at)).. (fullname
0450: 20 20 28 63 6f 6e 63 20 62 61 73 65 70 61 74 68 (conc basepath
0460: 20 22 2f 22 20 66 70 61 74 68 20 22 2f 22 20 66 "/" fpath "/" f
0470: 6e 61 6d 65 29 29 0a 09 20 28 66 65 78 69 73 74 name)).. (fexist
0480: 73 20 20 20 28 66 69 6c 65 2d 65 78 69 73 74 73 s (file-exists
0490: 3f 20 66 75 6c 6c 6e 61 6d 65 29 29 0a 09 20 28 ? fullname)).. (
04a0: 64 62 20 20 20 20 20 20 20 20 28 69 66 20 66 65 db (if fe
04b0: 78 69 73 74 73 20 28 64 62 69 3a 6f 70 65 6e 20 xists (dbi:open
04c0: 27 73 71 6c 69 74 65 33 20 28 6c 69 73 74 20 28 'sqlite3 (list (
04d0: 63 6f 6e 73 20 27 64 62 6e 61 6d 65 20 66 75 6c cons 'dbname ful
04e0: 6c 6e 61 6d 65 29 29 29 20 23 66 29 29 29 0a 20 lname))) #f))).
04f0: 20 20 20 28 69 66 20 28 61 6e 64 20 28 6e 6f 74 (if (and (not
0500: 20 64 62 29 0a 09 20 20 20 20 20 28 6e 6f 74 20 db).. (not
0510: 63 72 65 61 74 65 2d 6f 6b 29 29 0a 09 28 65 78 create-ok))..(ex
0520: 69 74 20 31 30 30 29 0a 09 28 62 65 67 69 6e 0a it 100)..(begin.
0530: 09 20 20 28 69 66 20 28 6e 6f 74 20 66 65 78 69 . (if (not fexi
0540: 73 74 73 29 0a 09 20 20 20 20 20 20 28 62 65 67 sts).. (beg
0550: 69 6e 0a 09 09 3b 3b 20 28 70 72 69 6e 74 20 22 in...;; (print "
0560: 66 75 6c 6c 6e 61 6d 65 3a 20 22 20 66 75 6c 6c fullname: " full
0570: 6e 61 6d 65 29 0a 09 09 28 74 77 69 6b 69 3a 72 name)...(twiki:r
0580: 65 67 69 73 74 65 72 2d 77 69 6b 69 20 6b 65 79 egister-wiki key
0590: 20 66 75 6c 6c 6e 61 6d 65 29 0a 09 09 28 73 79 fullname)...(sy
05a0: 73 74 65 6d 20 28 63 6f 6e 63 20 22 6d 6b 64 69 stem (conc "mkdi
05b0: 72 20 2d 70 20 22 20 66 70 61 74 68 29 29 20 3b r -p " fpath)) ;
05c0: 3b 20 63 72 65 61 74 65 20 74 68 65 20 70 61 74 ; create the pat
05d0: 68 0a 09 09 28 73 65 74 21 20 64 62 20 28 64 62 h...(set! db (db
05e0: 69 3a 6f 70 65 6e 20 27 73 71 6c 69 74 65 33 20 i:open 'sqlite3
05f0: 28 6c 69 73 74 20 28 63 6f 6e 73 20 27 64 62 6e (list (cons 'dbn
0600: 61 6d 65 20 66 75 6c 6c 6e 61 6d 65 29 29 29 29 ame fullname))))
0610: 0a 09 09 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 ...(for-each ...
0620: 20 28 6c 61 6d 62 64 61 20 28 73 71 72 79 29 0a (lambda (sqry).
0630: 09 09 20 20 20 3b 3b 20 28 70 72 69 6e 74 20 73 .. ;; (print s
0640: 71 72 79 29 0a 09 09 20 20 20 28 64 62 69 3a 65 qry)... (dbi:e
0650: 78 65 63 20 64 62 20 73 71 72 79 29 29 0a 09 09 xec db sqry))...
0660: 20 3b 3b 20 74 79 70 65 73 3a 20 30 20 74 65 78 ;; types: 0 tex
0670: 74 2c 20 31 20 6a 70 67 2c 20 32 20 70 6e 67 2c t, 1 jpg, 2 png,
0680: 20 33 20 73 76 67 2c 20 34 20 73 70 72 65 61 64 3 svg, 4 spread
0690: 73 68 65 65 74 2c 20 35 20 61 75 64 69 6f 2c 20 sheet, 5 audio,
06a0: 36 20 76 69 64 65 6f 20 3a 3a 20 62 65 74 74 65 6 video :: bette
06b0: 72 20 73 70 65 63 73 20 74 6f 20 63 6f 6d 65 2e r specs to come.
06c0: 2e 2e 0a 09 09 20 28 6c 69 73 74 0a 09 09 20 20 ..... (list...
06d0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 69 "CREATE TABLE pi
06e0: 63 73 20 20 20 20 20 20 28 69 64 20 49 4e 54 45 cs (id INTE
06f0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
0700: 6e 61 6d 65 20 54 45 58 54 2c 77 69 6b 69 5f 69 name TEXT,wiki_i
0710: 64 20 49 4e 54 45 47 45 52 2c 64 61 74 5f 69 64 d INTEGER,dat_id
0720: 20 49 4e 54 45 47 45 52 2c 74 68 75 6d 62 5f 64 INTEGER,thumb_d
0730: 61 74 5f 69 64 20 49 4e 54 45 47 45 52 2c 63 72 at_id INTEGER,cr
0740: 65 61 74 65 64 5f 6f 6e 20 49 4e 54 45 47 45 52 eated_on INTEGER
0750: 2c 6f 77 6e 65 72 5f 69 64 20 49 4e 54 45 47 45 ,owner_id INTEGE
0760: 52 29 3b 22 0a 09 09 20 20 22 43 52 45 41 54 45 R);"... "CREATE
0770: 20 54 41 42 4c 45 20 64 61 74 73 20 20 20 20 20 TABLE dats
0780: 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 (id INTEGER PRI
0790: 4d 41 52 59 20 4b 45 59 2c 6d 64 35 73 75 6d 20 MARY KEY,md5sum
07a0: 54 45 58 54 2c 64 61 74 20 42 4c 4f 42 2c 74 79 TEXT,dat BLOB,ty
07b0: 70 65 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 09 pe INTEGER);"...
07c0: 20 20 3b 3b 20 6f 6e 20 65 76 65 72 79 20 6d 6f ;; on every mo
07d0: 64 69 66 69 63 61 74 69 6f 6e 20 61 20 6e 65 77 dification a new
07e0: 20 74 69 64 64 6c 65 72 73 20 65 6e 74 72 79 20 tiddlers entry
07f0: 69 73 20 63 72 65 61 74 65 64 2e 20 57 68 65 6e is created. When
0800: 20 64 69 73 70 6c 61 79 69 6e 67 20 74 68 65 20 displaying the
0810: 74 69 64 64 6c 65 72 73 20 64 6f 3a 0a 09 09 20 tiddlers do:...
0820: 20 3b 3b 20 20 20 20 73 65 6c 65 63 74 20 77 68 ;; select wh
0830: 65 72 65 20 63 72 65 61 74 65 64 5f 6f 6e 20 3c ere created_on <
0840: 20 73 6f 6d 65 64 61 74 65 20 6f 72 64 65 72 20 somedate order
0850: 62 79 20 63 72 65 61 74 65 64 5f 6f 6e 20 64 65 by created_on de
0860: 73 63 20 6c 69 6d 69 74 20 31 0a 09 09 20 20 22 sc limit 1... "
0870: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 69 64 CREATE TABLE tid
0880: 64 6c 65 72 73 20 28 69 64 20 49 4e 54 45 47 45 dlers (id INTEGE
0890: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 77 69 R PRIMARY KEY,wi
08a0: 6b 69 5f 69 64 20 49 4e 54 45 47 45 52 2c 6e 61 ki_id INTEGER,na
08b0: 6d 65 20 54 45 58 54 2c 72 65 76 20 49 4e 54 45 me TEXT,rev INTE
08c0: 47 45 52 2c 64 61 74 5f 69 64 20 49 4e 54 45 47 GER,dat_id INTEG
08d0: 45 52 2c 63 72 65 61 74 65 64 5f 6f 6e 20 49 4e ER,created_on IN
08e0: 54 45 47 45 52 2c 6f 77 6e 65 72 5f 69 64 20 49 TEGER,owner_id I
08f0: 4e 54 45 47 45 52 29 3b 22 0a 09 09 20 20 3b 3b NTEGER);"... ;;
0900: 20 72 65 76 20 61 6e 64 20 74 61 67 20 6f 6e 6c rev and tag onl
0910: 79 20 75 74 69 6c 69 7a 65 64 20 77 68 65 6e 20 y utilized when
0920: 75 73 65 72 20 73 65 74 73 20 61 20 74 61 67 2e user sets a tag.
0930: 20 41 6c 6c 20 72 65 73 75 6c 74 73 20 66 72 6f All results fro
0940: 6d 20 61 20 73 65 6c 65 63 74 20 61 73 20 61 62 m a select as ab
0950: 6f 76 65 20 66 6f 72 20 74 69 64 64 6c 65 72 73 ove for tiddlers
0960: 20 61 72 65 20 73 65 74 20 74 6f 20 74 68 65 20 are set to the
0970: 74 61 67 0a 09 09 20 20 22 43 52 45 41 54 45 20 tag... "CREATE
0980: 54 41 42 4c 45 20 72 65 76 73 20 20 20 20 20 28 TABLE revs (
0990: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA
09a0: 52 59 20 4b 45 59 2c 74 61 67 20 54 45 58 54 29 RY KEY,tag TEXT)
09b0: 3b 22 0a 09 09 20 20 3b 3b 20 77 69 6b 69 73 20 ;"... ;; wikis
09c0: 69 73 20 68 65 72 65 20 66 6f 72 20 77 68 65 6e is here for when
09d0: 20 70 6f 73 74 67 72 65 73 71 6c 20 73 75 70 70 postgresql supp
09e0: 6f 72 74 20 69 73 20 61 64 64 65 64 20 6f 72 20 ort is added or
09f0: 69 66 20 61 20 73 75 62 20 77 69 6b 69 20 69 73 if a sub wiki is
0a00: 20 63 72 65 61 74 65 64 2e 20 0a 09 09 20 20 22 created. ... "
0a10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 77 69 6b CREATE TABLE wik
0a20: 69 73 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 is (id INTEGE
0a30: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 6e 61 R PRIMARY KEY,na
0a40: 6d 65 20 54 45 58 54 2c 63 72 65 61 74 65 64 5f me TEXT,created_
0a50: 6f 6e 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 09 on INTEGER);"...
0a60: 20 20 3b 3b 20 61 63 63 65 73 73 20 63 6f 6e 74 ;; access cont
0a70: 72 6f 6c 2c 20 6e 65 67 61 74 69 76 65 20 6e 75 rol, negative nu
0a80: 6d 62 65 72 65 64 20 67 72 6f 75 70 73 20 61 72 mbered groups ar
0a90: 65 20 70 72 69 76 61 74 65 20 67 72 6f 75 70 73 e private groups
0aa0: 2c 20 70 6f 73 74 69 76 65 20 6e 75 6d 62 65 72 , postive number
0ab0: 65 64 20 67 72 6f 75 70 73 20 61 72 65 20 73 79 ed groups are sy
0ac0: 73 74 65 6d 20 67 72 6f 75 70 73 0a 09 09 20 20 stem groups...
0ad0: 3b 3b 20 70 65 72 6d 69 73 73 69 6f 6e 73 20 61 ;; permissions a
0ae0: 72 65 20 6f 6e 20 61 20 70 65 72 2d 77 69 6b 69 re on a per-wiki
0af0: 20 67 72 61 6e 75 6c 61 72 69 74 79 0a 09 09 20 granularity...
0b00: 20 3b 3b 20 61 63 63 65 73 73 3b 20 30 3d 6e 6f ;; access; 0=no
0b10: 6e 65 2c 31 3d 72 65 61 64 2c 32 3d 72 65 61 64 ne,1=read,2=read
0b20: 2f 77 72 69 74 65 0a 09 09 20 20 22 43 52 45 41 /write... "CREA
0b30: 54 45 20 54 41 42 4c 45 20 70 65 72 6d 73 20 20 TE TABLE perms
0b40: 20 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 (id INTEGER PR
0b50: 49 4d 41 52 59 20 4b 45 59 2c 77 69 6b 69 5f 69 IMARY KEY,wiki_i
0b60: 64 20 49 4e 54 45 47 45 52 2c 67 72 6f 75 70 5f d INTEGER,group_
0b70: 69 64 20 49 4e 54 45 47 45 52 2c 61 63 63 65 73 id INTEGER,acces
0b80: 73 20 49 4e 54 45 47 45 52 29 3b 22 0a 09 09 20 s INTEGER);"...
0b90: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 67 "CREATE TABLE g
0ba0: 72 6f 75 70 73 20 20 20 28 69 64 20 49 4e 54 45 roups (id INTE
0bb0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
0bc0: 6e 61 6d 65 20 54 45 58 54 29 3b 22 0a 09 09 20 name TEXT);"...
0bd0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 6d "CREATE TABLE m
0be0: 65 6d 62 65 72 73 20 20 28 69 64 20 49 4e 54 45 embers (id INTE
0bf0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY,
0c00: 70 65 72 73 6f 6e 5f 69 64 20 49 4e 54 45 47 45 person_id INTEGE
0c10: 52 2c 67 72 6f 75 70 5f 69 64 20 49 4e 54 45 47 R,group_id INTEG
0c20: 45 52 29 3b 22 0a 09 09 20 20 3b 3b 20 73 65 74 ER);"... ;; set
0c30: 75 70 20 61 6e 64 20 63 6f 6e 66 69 67 75 72 61 up and configura
0c40: 74 69 6f 6e 20 64 61 74 61 0a 09 09 20 20 22 43 tion data... "C
0c50: 52 45 41 54 45 20 54 41 42 4c 45 20 6d 65 74 61 REATE TABLE meta
0c60: 20 20 20 20 20 28 69 64 20 49 4e 54 45 47 45 52 (id INTEGER
0c70: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 6b 65 79 PRIMARY KEY,key
0c80: 20 54 45 58 54 2c 76 61 6c 20 54 45 58 54 29 3b TEXT,val TEXT);
0c90: 22 0a 09 09 20 20 3b 3b 20 6e 65 65 64 20 74 6f "... ;; need to
0ca0: 20 63 72 65 61 74 65 20 61 6e 20 65 6e 74 72 79 create an entry
0cb0: 20 66 6f 72 20 2a 74 68 69 73 2a 20 74 77 69 6b for *this* twik
0cc0: 69 0a 09 09 20 20 28 63 6f 6e 63 20 22 49 4e 53 i... (conc "INS
0cd0: 45 52 54 20 49 4e 54 4f 20 77 69 6b 69 73 20 28 ERT INTO wikis (
0ce0: 69 64 2c 6e 61 6d 65 2c 63 72 65 61 74 65 64 5f id,name,created_
0cf0: 6f 6e 29 20 56 41 4c 55 45 53 20 28 31 2c 27 6d on) VALUES (1,'m
0d00: 61 69 6e 27 2c 22 20 28 63 75 72 72 65 6e 74 2d ain'," (current-
0d10: 73 65 63 6f 6e 64 73 29 20 22 29 3b 22 29 29 29 seconds) ");")))
0d20: 0a 09 09 3b 3b 20 20 20 20 20 28 63 6f 6e 63 20 ...;; (conc
0d30: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 69 64 "INSERT INTO tid
0d40: 64 6c 65 72 73 20 28 77 69 6b 69 5f 69 64 2c 6e dlers (wiki_id,n
0d50: 61 6d 65 2c 63 72 65 61 74 65 64 5f 6f 6e 29 20 ame,created_on)
0d60: 56 41 4c 55 45 53 28 31 2c 27 4d 61 69 6e 4d 65 VALUES(1,'MainMe
0d70: 6e 75 27 2c 22 20 28 63 75 72 72 65 6e 74 2d 73 nu'," (current-s
0d80: 65 63 6f 6e 64 73 29 20 22 29 3b 22 29 29 29 29 econds) ");"))))
0d90: 29 0a 09 09 28 74 77 69 6b 69 3a 73 61 76 65 2d )...(twiki:save-
0da0: 74 69 64 64 6c 65 72 20 64 62 20 22 4d 61 69 6e tiddler db "Main
0db0: 4d 65 6e 75 22 20 22 5b 5b 46 69 72 73 74 54 69 Menu" "[[FirstTi
0dc0: 64 64 6c 65 72 5d 5d 22 20 22 22 20 31 20 31 29 ddler]]" "" 1 1)
0dd0: 29 29 0a 09 20 20 28 73 71 6c 69 74 65 33 3a 73 )).. (sqlite3:s
0de0: 65 74 2d 62 75 73 79 2d 74 69 6d 65 6f 75 74 21 et-busy-timeout!
0df0: 28 64 62 69 3a 64 62 2d 63 6f 6e 6e 20 64 62 29 (dbi:db-conn db)
0e00: 20 31 30 30 30 30 30 30 29 0a 09 20 20 64 62 29 1000000).. db)
0e10: 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d )))..;;=========
0e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
0e60: 20 74 77 69 6b 69 73 20 28 64 62 20 6e 61 6d 69 twikis (db nami
0e70: 6e 67 2c 20 73 71 6c 69 74 65 20 76 73 20 70 6f ng, sqlite vs po
0e80: 73 74 67 72 65 73 71 6c 2c 20 6b 65 79 73 20 65 stgresql, keys e
0e90: 74 63 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d tc..;;==========
0ea0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0eb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b ============..;;
0ee0: 20 41 20 77 69 6b 69 20 69 73 20 73 70 65 63 69 A wiki is speci
0ef0: 66 69 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f fied by a list o
0f00: 66 20 6b 65 79 73 2c 20 68 65 72 65 20 77 65 20 f keys, here we
0f10: 63 6f 6e 76 65 72 74 20 74 68 61 74 20 6c 69 73 convert that lis
0f20: 74 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 73 74 t to a single st
0f30: 72 69 6e 67 0a 28 64 65 66 69 6e 65 20 28 74 77 ring.(define (tw
0f40: 69 6b 69 3a 6b 65 79 73 2d 3e 6b 65 79 20 6b 65 iki:keys->key ke
0f50: 79 73 29 0a 20 20 28 69 66 20 28 6e 6f 74 20 28 ys). (if (not (
0f60: 6e 75 6c 6c 3f 20 6b 65 79 73 29 29 0a 20 20 20 null? keys)).
0f70: 20 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 (string-inter
0f80: 73 70 65 72 73 65 20 28 6d 61 70 20 63 6f 6e 63 sperse (map conc
0f90: 20 6b 65 79 73 29 20 22 20 22 29 0a 20 20 20 20 keys) " ").
0fa0: 20 20 22 20 22 29 29 0a 0a 28 64 65 66 69 6e 65 " "))..(define
0fb0: 20 28 74 77 69 6b 69 3a 6b 65 79 2d 3e 66 6e 61 (twiki:key->fna
0fc0: 6d 65 20 6b 65 79 29 0a 20 20 28 6c 65 74 2a 20 me key). (let*
0fd0: 28 3b 3b 20 28 6d 64 35 6b 65 79 70 61 74 68 20 (;; (md5keypath
0fe0: 28 6d 64 35 3a 64 69 67 65 73 74 20 6b 65 79 29 (md5:digest key)
0ff0: 29 20 3b 3b 20 28 74 77 69 6b 69 3a 6b 65 79 73 ) ;; (twiki:keys
1000: 2d 3e 6b 65 79 20 6b 65 79 73 29 29 29 0a 09 20 ->key keys)))..
1010: 28 6b 65 79 70 61 74 68 20 20 20 20 28 74 77 69 (keypath (twi
1020: 6b 69 3a 77 65 62 36 34 65 6e 63 20 6b 65 79 29 ki:web64enc key)
1030: 29 0a 09 20 28 64 65 6c 74 61 20 20 20 20 20 20 ).. (delta
1040: 28 71 75 6f 74 69 65 6e 74 20 28 73 74 72 69 6e (quotient (strin
1050: 67 2d 6c 65 6e 67 74 68 20 6b 65 79 70 61 74 68 g-length keypath
1060: 29 20 33 29 29 20 3b 3b 20 0a 09 20 28 70 31 20 ) 3)) ;; .. (p1
1070: 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 (substri
1080: 6e 67 20 6b 65 79 70 61 74 68 20 30 20 20 20 20 ng keypath 0
1090: 20 20 20 20 20 20 20 64 65 6c 74 61 29 29 20 3b delta)) ;
10a0: 3b 20 20 30 20 20 38 29 29 0a 09 20 28 70 32 20 ; 0 8)).. (p2
10b0: 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 (substri
10c0: 6e 67 20 6b 65 79 70 61 74 68 20 64 65 6c 74 61 ng keypath delta
10d0: 20 20 20 20 20 20 20 28 2a 20 64 65 6c 74 61 20 (* delta
10e0: 32 29 29 29 3b 3b 20 20 38 20 31 36 29 29 0a 09 2)));; 8 16))..
10f0: 20 28 70 33 20 20 20 20 20 20 20 20 20 28 73 75 (p3 (su
1100: 62 73 74 72 69 6e 67 20 6b 65 79 70 61 74 68 20 bstring keypath
1110: 28 2a 20 64 65 6c 74 61 20 32 29 20 28 2a 20 64 (* delta 2) (* d
1120: 65 6c 74 61 20 33 29 29 29 29 20 3b 3b 20 31 36 elta 3)))) ;; 16
1130: 20 32 34 29 29 0a 20 20 20 20 28 6c 69 73 74 20 24)). (list
1140: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
1150: 72 73 65 20 28 6c 69 73 74 20 22 74 77 69 6b 69 rse (list "twiki
1160: 73 22 20 70 31 20 70 32 20 70 33 29 20 22 2f 22 s" p1 p2 p3) "/"
1170: 29 20 6b 65 79 70 61 74 68 29 29 29 0a 0a 3b 3b ) keypath)))..;;
1180: 20 6c 6f 6f 6b 20 75 70 20 74 68 65 20 77 69 64 look up the wid
1190: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6b 65 based on the ke
11a0: 79 73 2c 20 74 68 69 73 20 69 73 20 75 73 65 64 ys, this is used
11b0: 20 66 6f 72 20 73 75 62 20 77 69 6b 69 73 20 6f for sub wikis o
11c0: 6e 6c 79 2e 20 49 2e 65 2e 20 61 20 77 69 6b 69 nly. I.e. a wiki
11d0: 20 69 6e 73 74 61 6e 74 69 61 74 65 64 20 69 6e instantiated in
11e0: 73 69 64 65 20 61 6e 6f 74 68 65 72 20 77 69 6b side another wik
11f0: 69 20 0a 3b 3b 20 67 69 76 69 6e 67 20 61 20 73 i .;; giving a s
1200: 65 70 61 72 61 74 65 20 6e 61 6d 65 73 70 61 63 eparate namespac
1210: 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 74 69 64 e to all the tid
1220: 64 6c 65 72 73 0a 28 64 65 66 69 6e 65 20 28 74 dlers.(define (t
1230: 77 69 6b 69 3a 6e 61 6d 65 2d 3e 77 69 64 20 64 wiki:name->wid d
1240: 62 20 6e 61 6d 65 29 20 3b 3b 20 28 73 6c 6f 74 b name) ;; (slot
1250: 2d 72 65 66 20 73 3a 73 65 73 73 69 6f 6e 20 27 -ref s:session '
1260: 63 6f 6e 6e 29 0a 20 20 28 6c 65 74 20 28 28 77 conn). (let ((w
1270: 69 64 20 28 64 62 69 3a 67 65 74 2d 6f 6e 65 20 id (dbi:get-one
1280: 64 62 20 22 53 45 4c 45 43 54 20 69 64 20 46 52 db "SELECT id FR
1290: 4f 4d 20 77 69 6b 69 73 20 57 48 45 52 45 20 6e OM wikis WHERE n
12a0: 61 6d 65 3d 3f 3b 22 20 6e 61 6d 65 29 29 29 0a ame=?;" name))).
12b0: 20 20 20 20 28 69 66 20 77 69 64 20 77 69 64 0a (if wid wid.
12c0: 09 28 62 65 67 69 6e 0a 09 20 20 28 64 62 69 3a .(begin.. (dbi:
12d0: 65 78 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 exec db "INSERT
12e0: 49 4e 54 4f 20 77 69 6b 69 73 20 28 6e 61 6d 65 INTO wikis (name
12f0: 2c 63 72 65 61 74 65 64 5f 6f 6e 29 20 56 41 4c ,created_on) VAL
1300: 55 45 53 28 3f 2c 3f 29 3b 22 20 6e 61 6d 65 20 UES(?,?);" name
1310: 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 (current-seconds
1320: 29 29 0a 09 20 20 28 74 77 69 6b 69 3a 6e 61 6d )).. (twiki:nam
1330: 65 2d 3e 77 69 64 20 64 62 20 6e 61 6d 65 29 29 e->wid db name))
1340: 29 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d )))..;;=========
1350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b =============.;;
1390: 20 74 77 69 6b 69 20 72 65 63 6f 72 64 0a 3b 3b twiki record.;;
13a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
13e0: 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 6d 61 6b 65 2d ======..;; make-
13f0: 76 65 63 74 6f 72 2d 72 65 63 6f 72 64 20 74 77 vector-record tw
1400: 69 6b 69 20 77 69 6b 69 20 77 69 64 20 6e 61 6d iki wiki wid nam
1410: 65 20 6b 65 79 20 64 62 68 0a 28 64 65 66 69 6e e key dbh.(defin
1420: 65 20 28 6d 61 6b 65 2d 74 77 69 6b 69 3a 77 69 e (make-twiki:wi
1430: 6b 69 29 28 6d 61 6b 65 2d 76 65 63 74 6f 72 20 ki)(make-vector
1440: 35 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 5)).(define-inli
1450: 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 67 ne (twiki:wiki-g
1460: 65 74 2d 77 69 64 20 20 20 20 76 65 63 29 20 20 et-wid vec)
1470: 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 76 (vector-ref v
1480: 65 63 20 30 29 29 0a 28 64 65 66 69 6e 65 2d 69 ec 0)).(define-i
1490: 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b nline (twiki:wik
14a0: 69 2d 67 65 74 2d 6e 61 6d 65 20 20 20 76 65 63 i-get-name vec
14b0: 29 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 ) (vector-ref
14c0: 20 20 76 65 63 20 31 29 29 0a 28 64 65 66 69 6e vec 1)).(defin
14d0: 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a e-inline (twiki:
14e0: 77 69 6b 69 2d 67 65 74 2d 6b 65 79 20 20 20 20 wiki-get-key
14f0: 76 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 2d vec) (vector-
1500: 72 65 66 20 20 76 65 63 20 32 29 29 0a 28 64 65 ref vec 2)).(de
1510: 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 fine-inline (twi
1520: 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 64 62 68 20 ki:wiki-get-dbh
1530: 20 20 20 76 65 63 29 20 20 20 20 28 76 65 63 74 vec) (vect
1540: 6f 72 2d 72 65 66 20 20 76 65 63 20 33 29 29 0a or-ref vec 3)).
1550: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
1560: 74 77 69 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 70 twiki:wiki-get-p
1570: 65 72 6d 73 20 20 76 65 63 29 20 20 20 20 28 76 erms vec) (v
1580: 65 63 74 6f 72 2d 72 65 66 20 20 76 65 63 20 34 ector-ref vec 4
1590: 29 29 0a 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 ))..(define-inli
15a0: 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 73 ne (twiki:wiki-s
15b0: 65 74 2d 77 69 64 21 20 20 20 76 65 63 20 76 61 et-wid! vec va
15c0: 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 l)(vector-set! v
15d0: 65 63 20 30 20 76 61 6c 29 29 0a 28 64 65 66 69 ec 0 val)).(defi
15e0: 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 ne-inline (twiki
15f0: 3a 77 69 6b 69 2d 73 65 74 2d 6e 61 6d 65 21 20 :wiki-set-name!
1600: 20 76 65 63 20 76 61 6c 29 28 76 65 63 74 6f 72 vec val)(vector
1610: 2d 73 65 74 21 20 76 65 63 20 31 20 76 61 6c 29 -set! vec 1 val)
1620: 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 ).(define-inline
1630: 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 (twiki:wiki-set
1640: 2d 6b 65 79 21 20 20 20 76 65 63 20 76 61 6c 29 -key! vec val)
1650: 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 65 63 (vector-set! vec
1660: 20 32 20 76 61 6c 29 29 0a 28 64 65 66 69 6e 65 2 val)).(define
1670: 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a 77 -inline (twiki:w
1680: 69 6b 69 2d 73 65 74 2d 64 62 68 21 20 20 20 76 iki-set-dbh! v
1690: 65 63 20 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 ec val)(vector-s
16a0: 65 74 21 20 76 65 63 20 33 20 76 61 6c 29 29 0a et! vec 3 val)).
16b0: 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 (define-inline (
16c0: 74 77 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 70 twiki:wiki-set-p
16d0: 65 72 6d 73 21 20 76 65 63 20 76 61 6c 29 28 76 erms! vec val)(v
16e0: 65 63 74 6f 72 2d 73 65 74 21 20 76 65 63 20 34 ector-set! vec 4
16f0: 20 76 61 6c 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d val))..;;======
1700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1740: 0a 3b 3b 20 74 77 69 6b 69 20 6d 69 73 63 0a 3b .;; twiki misc.;
1750: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
1760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1790: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 72 65 74 75 =======..;; retu
17a0: 72 6e 73 20 68 65 6c 70 20 68 74 6d 6c 0a 28 64 rns help html.(d
17b0: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 68 65 6c efine (twiki:hel
17c0: 70 20 73 65 63 74 69 6f 6e 29 0a 20 20 28 6c 65 p section). (le
17d0: 74 20 28 28 6d 61 69 6e 20 28 74 77 69 6b 69 3a t ((main (twiki:
17e0: 64 69 76 20 0a 09 20 20 20 20 20 20 20 27 6e 6f div .. 'no
17f0: 64 65 20 22 74 77 69 6b 69 2d 68 65 6c 70 22 0a de "twiki-help".
1800: 09 20 20 20 20 20 20 20 28 6c 69 73 74 20 0a 09 . (list ..
1810: 09 28 74 77 69 6b 69 3a 68 33 20 22 48 65 6c 70 .(twiki:h3 "Help
1820: 20 73 74 75 66 66 22 29 0a 09 09 28 74 77 69 6b stuff")...(twik
1830: 69 3a 70 72 65 20 22 0a 4c 69 6e 6b 20 74 6f 20 i:pre ".Link to
1840: 70 61 67 65 3a 20 20 20 20 20 20 5b 5b 50 61 67 page: [[Pag
1850: 65 20 54 69 74 6c 65 5d 5d 0a 48 65 61 64 69 6e e Title]].Headin
1860: 67 33 3a 20 20 20 20 20 20 20 20 20 20 21 21 21 g3: !!!
1870: 20 54 68 65 20 68 65 61 64 69 6e 67 0a 55 6e 64 The heading.Und
1880: 65 72 6c 69 6e 65 3a 20 20 20 20 20 20 20 20 20 erline:
1890: 5f 5f 75 6e 64 65 72 6c 69 6e 65 64 5f 5f 0a 54 __underlined__.T
18a0: 61 62 6c 65 3a 20 20 20 20 20 20 20 20 20 20 20 able:
18b0: 20 20 7c 20 63 65 6c 6c 31 20 7c 20 63 65 6c 6c | cell1 | cell
18c0: 32 20 7c 0a 4c 69 73 74 3a 20 20 20 20 20 20 20 2 |.List:
18d0: 20 20 20 20 20 20 20 23 20 69 74 65 6d 31 0a 20 # item1.
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f0: 20 20 23 23 20 69 74 65 6d 32 0a 42 75 6c 6c 65 ## item2.Bulle
1900: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 t: *
1910: 69 74 65 6d 31 0a 20 20 20 20 20 20 20 20 20 20 item1.
1920: 20 20 20 20 20 20 20 20 20 2a 2a 20 69 74 65 6d ** item
1930: 32 0a 50 72 65 66 6f 72 6d 61 74 74 65 64 3a 20 2.Preformatted:
1940: 20 20 20 20 20 7b 7b 7b 73 74 75 66 66 20 68 65 {{{stuff he
1950: 72 65 7d 7d 7d 0a 49 6e 73 65 72 74 20 61 20 70 re}}}.Insert a p
1960: 69 63 74 75 72 65 3a 20 20 5b 70 69 63 5b 50 69 icture: [pic[Pi
1970: 63 4e 61 6d 65 5d 5d 0a 4f 72 20 77 69 74 68 20 cName]].Or with
1980: 73 69 7a 65 3a 20 20 20 20 20 20 5b 70 69 63 31 size: [pic1
1990: 30 30 78 31 30 30 5b 50 69 63 4e 61 6d 65 5d 5d 00x100[PicName]]
19a0: 0a 55 70 6c 6f 61 64 20 74 68 65 20 70 69 63 74 .Upload the pict
19b0: 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 5c 22 ure using the \"
19c0: 50 69 63 5c 22 20 6c 69 6e 6b 20 66 69 72 73 74 Pic\" link first
19d0: 22 29 29 29 29 29 0a 09 3b 3b 28 63 61 73 65 20 ")))))..;;(case
19e0: 73 65 63 74 69 6f 6e 0a 20 20 20 20 6d 61 69 6e section. main
19f0: 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ))..;;==========
1a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 ============.;;
1a40: 74 77 69 6b 69 20 61 63 63 65 73 73 20 63 6f 6e twiki access con
1a50: 74 72 6f 6c 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d trol.;;=========
1a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b =============..;
1aa0: 3b 20 69 64 65 61 20 68 65 72 65 20 69 73 20 66 ; idea here is f
1ab0: 6f 72 20 74 68 65 20 65 6e 64 20 75 73 65 72 20 or the end user
1ac0: 74 6f 20 72 65 64 65 66 69 6e 65 20 74 68 69 73 to redefine this
1ad0: 20 72 6f 75 74 69 6e 65 2c 0a 3b 3b 20 61 6e 64 routine,.;; and
1ae0: 20 63 61 6c 6c 20 74 77 69 6b 69 3a 69 6e 74 65 call twiki:inte
1af0: 72 61 6c 2d 61 63 63 65 73 73 20 69 66 20 64 65 ral-access if de
1b00: 73 69 72 65 64 0a 3b 3b 20 0a 3b 3b 20 69 66 20 sired.;; .;; if
1b10: 6f 76 65 72 72 69 64 65 20 69 73 20 23 74 20 74 override is #t t
1b20: 68 65 6e 20 67 69 76 65 20 61 63 63 65 73 73 20 hen give access
1b30: 6e 6f 20 6d 61 74 74 65 72 20 77 68 61 74 0a 28 no matter what.(
1b40: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 61 63 define (twiki:ac
1b50: 63 65 73 73 20 6b 65 79 73 20 77 69 6b 69 2d 6e cess keys wiki-n
1b60: 61 6d 65 20 75 73 65 72 2d 69 64 29 0a 20 20 27 ame user-id). '
1b70: 28 72 20 77 29 29 0a 0a 3b 3b 20 41 64 64 20 73 (r w))..;; Add s
1b80: 75 70 70 6f 72 74 20 66 6f 72 20 73 74 6f 72 69 upport for stori
1b90: 6e 67 20 67 72 6f 75 70 73 2c 20 75 73 65 72 73 ng groups, users
1ba0: 20 61 6e 64 20 61 63 63 65 73 73 20 69 6e 74 65 and access inte
1bb0: 72 6e 61 6c 6c 79 0a 3b 3b 20 0a 28 64 65 66 69 rnally.;; .(defi
1bc0: 6e 65 20 28 74 77 69 6b 69 3a 69 6e 74 65 72 6e ne (twiki:intern
1bd0: 61 6c 2d 61 63 63 65 73 73 20 6b 65 79 73 20 77 al-access keys w
1be0: 69 6b 69 2d 6e 61 6d 65 20 75 73 65 72 2d 69 64 iki-name user-id
1bf0: 29 0a 20 20 23 66 29 0a 0a 3b 3b 3d 3d 3d 3d 3d ). #f)..;;=====
1c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c40: 3d 0a 3b 3b 20 74 77 69 6b 69 20 72 65 67 69 73 =.;; twiki regis
1c50: 74 72 79 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d try.;;==========
1c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b ============..;;
1ca0: 20 74 68 65 73 65 20 63 61 6e 20 62 65 20 6f 76 these can be ov
1cb0: 65 72 72 69 64 64 65 6e 20 62 79 20 65 6e 64 20 erridden by end
1cc0: 75 73 65 72 20 28 6a 75 73 74 20 63 72 65 61 74 user (just creat
1cd0: 65 20 61 20 6e 65 77 20 72 6f 75 74 69 6e 65 20 e a new routine
1ce0: 62 79 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 by the same name
1cf0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b )..(define (twik
1d00: 69 3a 6f 70 65 6e 2d 72 65 67 69 73 74 72 79 29 i:open-registry)
1d10: 0a 20 20 28 6c 65 74 2a 20 28 28 62 61 73 65 70 . (let* ((basep
1d20: 61 74 68 20 20 28 73 6c 6f 74 2d 72 65 66 20 73 ath (slot-ref s
1d30: 3a 73 65 73 73 69 6f 6e 20 27 73 72 6f 6f 74 29 :session 'sroot)
1d40: 29 0a 09 20 28 72 65 67 66 69 6c 65 20 20 20 28 ).. (regfile (
1d50: 63 6f 6e 63 20 62 61 73 65 70 61 74 68 20 22 2f conc basepath "/
1d60: 74 77 69 6b 69 73 2f 72 65 67 69 73 74 72 79 2e twikis/registry.
1d70: 64 62 22 29 29 0a 09 20 28 72 65 67 65 78 69 73 db")).. (regexis
1d80: 74 73 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f ts (file-exists?
1d90: 20 72 65 67 66 69 6c 65 29 29 0a 09 20 28 64 62 regfile)).. (db
1da0: 20 20 20 20 20 20 20 20 28 64 62 69 3a 6f 70 65 (dbi:ope
1db0: 6e 20 27 73 71 6c 69 74 65 33 20 28 6c 69 73 74 n 'sqlite3 (list
1dc0: 20 28 63 6f 6e 73 20 27 64 62 6e 61 6d 65 20 72 (cons 'dbname r
1dd0: 65 67 66 69 6c 65 29 29 29 29 29 0a 20 20 20 20 egfile))))).
1de0: 28 69 66 20 72 65 67 65 78 69 73 74 73 0a 09 64 (if regexists..d
1df0: 62 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 66 6f b..(begin.. (fo
1e00: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda (
1e10: 73 74 6d 74 29 28 64 62 69 3a 65 78 65 63 20 64 stmt)(dbi:exec d
1e20: 62 20 73 74 6d 74 29 29 0a 09 09 20 20 20 20 28 b stmt))... (
1e30: 6c 69 73 74 20 22 43 52 45 41 54 45 20 54 41 42 list "CREATE TAB
1e40: 4c 45 20 77 69 6b 69 73 20 28 6b 65 79 20 54 45 LE wikis (key TE
1e50: 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 70 XT PRIMARY KEY,p
1e60: 61 74 68 20 54 45 58 54 2c 63 72 65 61 74 69 6f ath TEXT,creatio
1e70: 6e 5f 64 61 74 65 20 49 4e 54 45 47 45 52 2c 63 n_date INTEGER,c
1e80: 72 65 61 74 6f 72 5f 69 64 20 49 4e 54 45 47 45 reator_id INTEGE
1e90: 52 29 3b 22 29 29 0a 09 20 20 64 62 29 29 29 29 R);")).. db))))
1ea0: 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 ..(define (twiki
1eb0: 3a 72 65 67 69 73 74 65 72 2d 77 69 6b 69 20 6b :register-wiki k
1ec0: 65 79 20 70 61 74 68 29 0a 20 20 28 6c 65 74 20 ey path). (let
1ed0: 28 28 64 62 20 28 74 77 69 6b 69 3a 6f 70 65 6e ((db (twiki:open
1ee0: 2d 72 65 67 69 73 74 72 79 29 29 29 0a 20 20 20 -registry))).
1ef0: 20 28 64 62 69 3a 65 78 65 63 20 64 62 20 0a 09 (dbi:exec db ..
1f00: 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 4f 52 "INSERT OR
1f10: 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 77 69 REPLACE INTO wi
1f20: 6b 69 73 20 28 6b 65 79 2c 70 61 74 68 2c 63 72 kis (key,path,cr
1f30: 65 61 74 69 6f 6e 5f 64 61 74 65 2c 63 72 65 61 eation_date,crea
1f40: 74 6f 72 5f 69 64 29 20 56 41 4c 55 45 53 28 3f tor_id) VALUES(?
1f50: 2c 3f 2c 3f 2c 3f 29 3b 22 0a 09 20 20 20 20 20 ,?,?,?);"..
1f60: 20 6b 65 79 20 70 61 74 68 20 28 63 75 72 72 65 key path (curre
1f70: 6e 74 2d 73 65 63 6f 6e 64 73 29 20 28 74 77 69 nt-seconds) (twi
1f80: 6b 69 3a 67 65 74 2d 69 64 29 29 0a 20 20 20 20 ki:get-id)).
1f90: 28 64 62 69 3a 63 6c 6f 73 65 20 64 62 29 29 29 (dbi:close db)))
1fa0: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..;;============
1fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 74 69 ==========.;; ti
1ff0: 64 64 6c 65 72 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d ddlers.;;=======
2000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
2040: 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 74 .(define twiki:t
2050: 69 64 64 6c 65 72 2d 73 65 6c 65 63 74 6f 72 20 iddler-selector
2060: 22 53 45 4c 45 43 54 20 74 2e 69 64 2c 74 2e 6e "SELECT t.id,t.n
2070: 61 6d 65 2c 74 2e 72 65 76 2c 74 2e 64 61 74 5f ame,t.rev,t.dat_
2080: 69 64 2c 74 2e 63 72 65 61 74 65 64 5f 6f 6e 2c id,t.created_on,
2090: 74 2e 6f 77 6e 65 72 5f 69 64 20 46 52 4f 4d 20 t.owner_id FROM
20a0: 74 69 64 64 6c 65 72 73 20 41 53 20 74 20 49 4e tiddlers AS t IN
20b0: 4e 45 52 20 4a 4f 49 4e 20 64 61 74 73 20 41 53 NER JOIN dats AS
20c0: 20 64 20 4f 4e 20 74 2e 64 61 74 5f 69 64 3d 64 d ON t.dat_id=d
20d0: 2e 69 64 22 29 0a 28 64 65 66 69 6e 65 20 28 74 .id").(define (t
20e0: 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 6d 61 6b wiki:tiddler-mak
20f0: 65 29 28 6d 61 6b 65 2d 76 65 63 74 6f 72 20 38 e)(make-vector 8
2100: 20 23 66 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e #f)).(define-in
2110: 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 line (twiki:tidd
2120: 6c 65 72 2d 67 65 74 2d 69 64 20 20 20 20 20 20 ler-get-id
2130: 20 20 20 20 20 76 65 63 29 20 20 20 20 28 76 65 vec) (ve
2140: 63 74 6f 72 2d 72 65 66 20 20 76 65 63 20 30 29 ctor-ref vec 0)
2150: 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 ).(define-inline
2160: 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d (twiki:tiddler-
2170: 67 65 74 2d 6e 61 6d 65 20 20 20 20 20 20 20 20 get-name
2180: 20 76 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 vec) (vector
2190: 2d 72 65 66 20 20 76 65 63 20 31 29 29 0a 28 64 -ref vec 1)).(d
21a0: 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 efine-inline (tw
21b0: 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d iki:tiddler-get-
21c0: 72 65 76 20 20 20 20 20 20 20 20 20 20 76 65 63 rev vec
21d0: 29 20 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 ) (vector-ref
21e0: 20 20 76 65 63 20 32 29 29 0a 28 64 65 66 69 6e vec 2)).(defin
21f0: 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a e-inline (twiki:
2200: 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 2d tiddler-get-dat-
2210: 69 64 20 20 20 20 20 20 20 76 65 63 29 20 20 20 id vec)
2220: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 20 76 65 (vector-ref ve
2230: 63 20 33 29 29 0a 28 64 65 66 69 6e 65 2d 69 6e c 3)).(define-in
2240: 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 line (twiki:tidd
2250: 6c 65 72 2d 67 65 74 2d 63 72 65 61 74 65 64 5f ler-get-created_
2260: 6f 6e 20 20 20 76 65 63 29 20 20 20 20 28 76 65 on vec) (ve
2270: 63 74 6f 72 2d 72 65 66 20 20 76 65 63 20 34 29 ctor-ref vec 4)
2280: 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 ).(define-inline
2290: 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d (twiki:tiddler-
22a0: 67 65 74 2d 6f 77 6e 65 72 5f 69 64 20 20 20 20 get-owner_id
22b0: 20 76 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 vec) (vector
22c0: 2d 72 65 66 20 20 76 65 63 20 35 29 29 0a 3b 3b -ref vec 5)).;;
22d0: 20 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 (define-inline
22e0: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
22f0: 65 74 2d 64 61 74 2d 74 79 70 65 20 20 20 20 20 et-dat-type
2300: 76 65 63 29 20 20 20 20 28 76 65 63 74 6f 72 2d vec) (vector-
2310: 72 65 66 20 20 76 65 63 20 36 29 29 0a 0a 28 64 ref vec 6))..(d
2320: 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 efine-inline (tw
2330: 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 74 2d iki:tiddler-set-
2340: 69 64 21 20 20 20 20 20 20 20 20 20 20 76 65 63 id! vec
2350: 20 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 val)(vector-set
2360: 21 20 76 65 63 20 30 20 76 61 6c 29 20 76 65 63 ! vec 0 val) vec
2370: 29 0a 28 64 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 ).(define-inline
2380: 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d (twiki:tiddler-
2390: 73 65 74 2d 6e 61 6d 65 21 20 20 20 20 20 20 20 set-name!
23a0: 20 76 65 63 20 76 61 6c 29 28 76 65 63 74 6f 72 vec val)(vector
23b0: 2d 73 65 74 21 20 76 65 63 20 31 20 76 61 6c 29 -set! vec 1 val)
23c0: 20 76 65 63 29 0a 28 64 65 66 69 6e 65 2d 69 6e vec).(define-in
23d0: 6c 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 line (twiki:tidd
23e0: 6c 65 72 2d 73 65 74 2d 72 65 76 21 20 20 20 20 ler-set-rev!
23f0: 20 20 20 20 20 76 65 63 20 76 61 6c 29 28 76 65 vec val)(ve
2400: 63 74 6f 72 2d 73 65 74 21 20 76 65 63 20 32 20 ctor-set! vec 2
2410: 76 61 6c 29 20 76 65 63 29 0a 28 64 65 66 69 6e val) vec).(defin
2420: 65 2d 69 6e 6c 69 6e 65 20 28 74 77 69 6b 69 3a e-inline (twiki:
2430: 74 69 64 64 6c 65 72 2d 73 65 74 2d 64 61 74 2d tiddler-set-dat-
2440: 69 64 21 20 20 20 20 20 20 76 65 63 20 76 61 6c id! vec val
2450: 29 28 76 65 63 74 6f 72 2d 73 65 74 21 20 76 65 )(vector-set! ve
2460: 63 20 33 20 76 61 6c 29 20 76 65 63 29 0a 28 64 c 3 val) vec).(d
2470: 65 66 69 6e 65 2d 69 6e 6c 69 6e 65 20 28 74 77 efine-inline (tw
2480: 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 74 2d iki:tiddler-set-
2490: 63 72 65 61 74 65 64 5f 6f 6e 21 20 20 76 65 63 created_on! vec
24a0: 20 76 61 6c 29 28 76 65 63 74 6f 72 2d 73 65 74 val)(vector-set
24b0: 21 20 76 65 63 20 34 20 76 61 6c 29 20 76 65 63 ! vec 4 val) vec
24c0: 29 0a 3b 3b 20 28 64 65 66 69 6e 65 2d 69 6e 6c ).;; (define-inl
24d0: 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 64 64 6c ine (twiki:tiddl
24e0: 65 72 2d 73 65 74 2d 6f 77 6e 65 72 5f 69 64 21 er-set-owner_id!
24f0: 20 20 20 20 76 65 63 20 76 61 6c 29 28 76 65 63 vec val)(vec
2500: 74 6f 72 2d 73 65 74 21 20 76 65 63 20 35 20 76 tor-set! vec 5 v
2510: 61 6c 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d al))..;;========
2520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b ==============.;
2560: 3b 20 52 6f 75 74 69 6e 65 73 20 66 6f 72 20 64 ; Routines for d
2570: 69 73 70 6c 61 79 69 6e 67 2c 20 65 64 69 74 69 isplaying, editi
2580: 6e 67 2c 20 62 72 6f 77 73 69 6e 67 20 65 74 63 ng, browsing etc
2590: 2e 20 74 69 64 64 6c 65 72 73 0a 3b 3b 3d 3d 3d . tiddlers.;;===
25a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
25b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
25c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
25d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
25e0: 3d 3d 3d 09 0a 0a 3b 3b 20 73 68 6f 75 6c 64 20 ===...;; should
25f0: 63 68 61 6e 67 65 20 74 68 69 73 20 74 6f 20 74 change this to t
2600: 61 6b 65 20 61 20 74 69 64 64 6c 65 72 20 73 74 ake a tiddler st
2610: 72 75 63 74 75 72 65 3f 0a 28 64 65 66 69 6e 65 ructure?.(define
2620: 20 28 74 77 69 6b 69 3a 76 69 65 77 20 64 61 74 (twiki:view dat
2630: 20 20 74 6b 65 79 20 77 69 64 20 74 69 64 64 6c tkey wid tiddl
2640: 65 72 20 77 69 6b 69 29 20 3b 3b 20 63 6c 6f 73 er wiki) ;; clos
2650: 65 2c 20 63 6c 6f 73 65 20 6f 74 68 65 72 73 2c e, close others,
2660: 20 65 64 69 74 2c 20 6d 6f 72 65 0a 20 20 28 6c edit, more. (l
2670: 65 74 20 28 28 69 73 2d 6e 6f 74 2d 6d 61 69 6e et ((is-not-main
2680: 20 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 22 (not (equal? "
2690: 4d 61 69 6e 4d 65 6e 75 22 20 28 74 77 69 6b 69 MainMenu" (twiki
26a0: 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 6e 61 6d :tiddler-get-nam
26b0: 65 20 74 69 64 64 6c 65 72 29 29 29 29 0a 09 28 e tiddler))))..(
26c0: 65 64 69 74 2d 61 6c 6c 6f 77 65 64 20 28 6d 65 edit-allowed (me
26d0: 6d 62 65 72 20 27 77 20 28 74 77 69 6b 69 3a 77 mber 'w (twiki:w
26e0: 69 6b 69 2d 67 65 74 2d 70 65 72 6d 73 20 77 69 iki-get-perms wi
26f0: 6b 69 29 29 29 29 0a 20 20 20 20 28 73 3a 64 69 ki)))). (s:di
2700: 76 20 27 63 6c 61 73 73 20 22 6e 6f 64 65 22 20 v 'class "node"
2710: 3b 3b 20 22 6e 6f 64 65 22 0a 09 20 20 20 3b 3b ;; "node".. ;;
2720: 20 28 73 3a 68 72 20 20 22 20 22 29 0a 09 20 20 (s:hr " ")..
2730: 20 3b 3b 20 28 73 3a 70 20 27 63 6c 61 73 73 20 ;; (s:p 'class
2740: 28 69 66 20 69 73 2d 6e 6f 74 2d 6d 61 69 6e 20 (if is-not-main
2750: 22 66 6c 6f 61 74 2d 6c 65 66 74 22 20 22 66 6c "float-left" "fl
2760: 6f 61 74 2d 6c 65 66 74 2d 6d 65 6e 75 22 29 0a oat-left-menu").
2770: 09 3b 3b 20 20 20 20 28 73 3a 70 20 27 63 6c 61 .;; (s:p 'cla
2780: 73 73 20 28 69 66 20 69 73 2d 6e 6f 74 2d 6d 61 ss (if is-not-ma
2790: 69 6e 20 22 66 6c 6f 61 74 2d 6c 65 66 74 22 20 in "float-left"
27a0: 22 66 6c 6f 61 74 2d 72 69 67 68 74 22 29 0a 09 "float-right")..
27b0: 3b 3b 20 09 28 69 66 20 69 73 2d 6e 6f 74 2d 6d ;; .(if is-not-m
27c0: 61 69 6e 0a 09 3b 3b 20 09 20 20 20 20 28 73 3a ain..;; . (s:
27d0: 62 69 67 20 28 73 3a 62 20 28 74 77 69 6b 69 3a big (s:b (twiki:
27e0: 74 69 64 64 6c 65 72 2d 67 65 74 2d 6e 61 6d 65 tiddler-get-name
27f0: 20 74 69 64 64 6c 65 72 29 29 29 0a 09 3b 3b 20 tiddler)))..;;
2800: 09 20 20 20 20 28 73 3a 73 6d 61 6c 6c 20 3b 3b . (s:small ;;
2810: 20 28 73 3a 62 20 22 4d 65 6e 75 22 29 0a 09 3b (s:b "Menu")..;
2820: 3b 20 09 09 20 20 20 20 20 28 69 66 20 65 64 69 ; .. (if edi
2830: 74 2d 61 6c 6c 6f 77 65 64 0a 09 3b 3b 20 09 09 t-allowed..;; ..
2840: 09 20 28 6c 69 73 74 20 22 28 22 0a 09 3b 3b 20 . (list "("..;;
2850: 09 09 09 20 20 20 20 20 20 20 28 73 3a 61 20 22 ... (s:a "
2860: 65 64 69 74 22 20 27 68 72 65 66 0a 09 3b 3b 20 edit" 'href..;;
2870: 09 09 09 09 20 20 20 20 28 73 3a 6c 69 6e 6b 2d .... (s:link-
2880: 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 to (twiki:get-li
2890: 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 nk-back-to-curre
28a0: 6e 74 29 0a 09 3b 3b 20 09 09 09 09 09 20 20 20 nt)..;; .....
28b0: 20 20 20 20 27 65 64 69 74 5f 74 69 64 64 6c 65 'edit_tiddle
28c0: 72 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 r (twiki:tiddler
28d0: 2d 67 65 74 2d 69 64 20 74 69 64 64 6c 65 72 29 -get-id tiddler)
28e0: 29 29 20 22 29 22 29 0a 09 3b 3b 20 09 09 09 20 )) ")")..;; ...
28f0: 27 28 29 29 29 29 29 0a 09 20 20 20 28 73 3a 64 '())))).. (s:d
2900: 69 76 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c iv 'class "tiddl
2910: 65 72 22 0a 09 20 20 20 20 28 73 3a 70 20 27 63 er".. (s:p 'c
2920: 6c 61 73 73 20 22 74 69 64 64 6c 65 72 63 6f 6d lass "tiddlercom
2930: 6d 61 6e 64 73 22 0a 09 09 20 20 20 20 28 69 66 mands"... (if
2940: 20 28 65 71 75 61 6c 3f 20 22 4d 61 69 6e 4d 65 (equal? "MainMe
2950: 6e 75 22 20 28 74 77 69 6b 69 3a 74 69 64 64 6c nu" (twiki:tiddl
2960: 65 72 2d 67 65 74 2d 6e 61 6d 65 20 74 69 64 64 er-get-name tidd
2970: 6c 65 72 29 29 0a 09 09 09 28 69 66 20 65 64 69 ler))....(if edi
2980: 74 2d 61 6c 6c 6f 77 65 64 0a 09 09 09 20 20 20 t-allowed....
2990: 20 28 6c 69 73 74 20 28 73 3a 61 20 22 65 64 69 (list (s:a "edi
29a0: 74 22 20 27 68 72 65 66 0a 09 09 09 09 20 20 20 t" 'href.....
29b0: 20 20 20 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 (s:link-to (
29c0: 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 twiki:get-link-b
29d0: 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 0a ack-to-current).
29e0: 09 09 09 09 09 09 20 20 27 65 64 69 74 5f 74 69 ...... 'edit_ti
29f0: 64 64 6c 65 72 20 28 74 77 69 6b 69 3a 74 69 64 ddler (twiki:tid
2a00: 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 dler-get-id tidd
2a10: 6c 65 72 29 29 29 29 0a 09 09 09 20 20 20 20 27 ler)))).... '
2a20: 28 29 29 0a 09 09 09 28 6c 69 73 74 20 0a 09 09 ())....(list ...
2a30: 09 20 28 73 3a 61 20 22 63 6c 6f 73 65 22 20 27 . (s:a "close" '
2a40: 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 href (s:link-to
2a50: 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d (twiki:get-link-
2a60: 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 back-to-current)
2a70: 20 27 63 6c 6f 73 65 5f 74 69 64 64 6c 65 72 20 'close_tiddler
2a80: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
2a90: 65 74 2d 69 64 20 74 69 64 64 6c 65 72 29 29 29 et-id tiddler)))
2aa0: 20 22 2e 22 0a 09 09 09 20 28 73 3a 61 20 22 63 ".".... (s:a "c
2ab0: 6c 6f 73 65 20 6f 74 68 65 72 73 22 20 27 68 72 lose others" 'hr
2ac0: 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 ef (s:link-to (t
2ad0: 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 wiki:get-link-ba
2ae0: 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 ck-to-current) '
2af0: 63 6c 6f 73 65 5f 6f 74 68 65 72 5f 74 69 64 64 close_other_tidd
2b00: 6c 65 72 73 20 28 74 77 69 6b 69 3a 74 69 64 64 lers (twiki:tidd
2b10: 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 6c ler-get-id tiddl
2b20: 65 72 29 29 29 20 22 2e 22 0a 09 09 09 20 28 69 er))) ".".... (i
2b30: 66 20 65 64 69 74 2d 61 6c 6c 6f 77 65 64 0a 09 f edit-allowed..
2b40: 09 09 20 20 20 20 20 28 73 3a 61 20 22 65 64 69 .. (s:a "edi
2b50: 74 22 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e t" 'href (s:lin
2b60: 6b 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d k-to (twiki:get-
2b70: 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 link-back-to-cur
2b80: 72 65 6e 74 29 20 27 65 64 69 74 5f 74 69 64 64 rent) 'edit_tidd
2b90: 6c 65 72 20 28 74 77 69 6b 69 3a 74 69 64 64 6c ler (twiki:tiddl
2ba0: 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 6c 65 er-get-id tiddle
2bb0: 72 29 29 29 0a 09 09 09 20 20 20 20 20 27 28 29 r))).... '()
2bc0: 29 29 29 29 0a 09 20 20 20 20 3b 3b 20 28 73 3a )))).. ;; (s:
2bd0: 70 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c 65 p 'class "tiddle
2be0: 72 2d 73 6b 69 70 2d 70 61 72 22 20 22 2d 22 29 r-skip-par" "-")
2bf0: 0a 09 20 20 20 20 3b 3b 20 28 73 3a 70 20 22 2e .. ;; (s:p ".
2c00: 22 29 0a 09 20 20 20 20 3b 3b 20 28 73 3a 70 20 ").. ;; (s:p
2c10: 20 28 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 6d (twiki:dat->htm
2c20: 6c 20 64 61 74 20 77 69 6b 69 29 20 28 73 3a 62 l dat wiki) (s:b
2c30: 72 29 29 29 29 29 29 0a 09 20 20 20 20 28 73 3a r)))))).. (s:
2c40: 70 20 28 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 p (twiki:dat->ht
2c50: 6d 6c 20 64 61 74 20 77 69 6b 69 29 29 29 29 29 ml dat wiki)))))
2c60: 29 0a 3b 3b 20 09 20 20 20 20 20 28 6c 65 74 20 ).;; . (let
2c70: 28 28 74 77 68 74 6d 6c 20 28 74 77 69 6b 69 3a ((twhtml (twiki:
2c80: 64 61 74 2d 3e 68 74 6d 6c 20 64 61 74 20 77 69 dat->html dat wi
2c90: 6b 69 29 29 29 20 3b 3b 20 6c 65 74 27 73 20 74 ki))) ;; let's t
2ca0: 72 79 20 74 6f 20 66 6f 72 63 65 20 61 20 6d 69 ry to force a mi
2cb0: 6e 69 6d 75 6d 20 6f 66 20 6f 6e 65 20 70 61 72 nimum of one par
2cc0: 61 67 72 61 70 68 0a 3b 3b 20 09 20 20 20 20 20 agraph.;; .
2cd0: 20 28 69 66 20 28 3c 20 28 6c 65 6e 67 74 68 20 (if (< (length
2ce0: 74 77 68 74 6d 6c 29 20 32 29 0a 3b 3b 20 09 09 twhtml) 2).;; ..
2cf0: 20 20 28 73 3a 70 20 74 77 68 74 6d 6c 20 28 73 (s:p twhtml (s
2d00: 3a 62 72 29 29 0a 3b 3b 20 09 09 20 20 74 77 68 :br)).;; .. twh
2d10: 74 6d 6c 29 29 29 29 29 29 0a 0a 28 64 65 66 69 tml))))))..(defi
2d20: 6e 65 20 28 74 77 69 6b 69 3a 76 69 65 77 2d 74 ne (twiki:view-t
2d30: 69 64 64 6c 65 72 20 64 62 20 20 74 6b 65 79 20 iddler db tkey
2d40: 77 69 64 20 74 69 64 64 6c 65 72 20 77 69 6b 69 wid tiddler wiki
2d50: 29 0a 20 20 28 6c 65 74 2a 20 28 28 64 61 74 2d ). (let* ((dat-
2d60: 69 64 20 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 id (twiki:tiddle
2d70: 72 2d 67 65 74 2d 64 61 74 2d 69 64 20 74 69 64 r-get-dat-id tid
2d80: 64 6c 65 72 29 29 0a 09 20 28 64 61 74 20 20 20 dler)).. (dat
2d90: 20 28 74 77 69 6b 69 3a 67 65 74 2d 64 61 74 20 (twiki:get-dat
2da0: 64 62 20 64 61 74 2d 69 64 29 29 0a 09 20 28 74 db dat-id)).. (t
2db0: 6e 75 6d 20 20 20 28 74 77 69 6b 69 3a 74 69 64 num (twiki:tid
2dc0: 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 69 64 64 dler-get-id tidd
2dd0: 6c 65 72 29 29 29 0a 20 20 20 20 3b 3b 20 28 73 ler))). ;; (s
2de0: 3a 6c 6f 67 20 22 74 77 69 64 3a 20 22 20 64 61 :log "twid: " da
2df0: 74 2d 69 64 20 22 20 64 61 74 3a 20 22 20 64 61 t-id " dat: " da
2e00: 74 29 0a 20 20 20 20 28 74 77 69 6b 69 3a 76 69 t). (twiki:vi
2e10: 65 77 20 64 61 74 20 20 74 6b 65 79 20 77 69 64 ew dat tkey wid
2e20: 20 74 69 64 64 6c 65 72 20 77 69 6b 69 29 29 29 tiddler wiki)))
2e30: 0a 0a 3b 3b 20 63 61 6c 6c 20 77 69 74 68 20 70 ..;; call with p
2e40: 61 72 61 6d 20 3d 3e 20 61 63 74 69 6f 6e 2d 6e aram => action-n
2e50: 61 6d 65 2d 6b 65 79 20 65 2e 67 2e 20 73 61 76 ame-key e.g. sav
2e60: 65 2d 62 57 46 70 62 67 5f 5f 2d 61 47 56 73 62 e-bWFpbg__-aGVsb
2e70: 47 38 67 62 6e 56 79 63 32 55 5f 20 28 73 61 76 G8gbnVyc2U_ (sav
2e80: 65 20 6d 61 69 6e 20 22 68 65 6c 6c 6f 20 6e 75 e main "hello nu
2e90: 72 73 65 22 29 0a 3b 3b 20 74 68 69 73 20 6f 6e rse").;; this on
2ea0: 65 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e e is called when
2eb0: 20 61 6e 20 65 64 69 74 20 66 6f 72 6d 20 69 73 an edit form is
2ec0: 20 73 75 62 6d 69 74 74 65 64 20 28 69 2e 65 2e submitted (i.e.
2ed0: 20 50 4f 53 54 29 0a 28 64 65 66 69 6e 65 20 28 POST).(define (
2ee0: 74 77 69 6b 69 3a 61 63 74 69 6f 6e 20 70 61 72 twiki:action par
2ef0: 61 6d 73 29 0a 20 20 28 69 66 20 28 61 6e 64 20 ams). (if (and
2f00: 28 6c 69 73 74 3f 20 70 61 72 61 6d 73 29 0a 09 (list? params)..
2f10: 20 20 20 28 3e 20 28 6c 65 6e 67 74 68 20 70 61 (> (length pa
2f20: 72 61 6d 73 29 20 30 29 29 0a 20 20 20 20 20 20 rams) 0)).
2f30: 28 6c 65 74 2a 20 28 28 63 6d 64 6c 6e 20 28 73 (let* ((cmdln (s
2f40: 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 63 61 72 tring-split (car
2f50: 20 70 61 72 61 6d 73 29 20 22 2d 22 29 29 0a 09 params) "-"))..
2f60: 20 20 20 20 20 28 63 6d 64 20 20 20 28 73 74 72 (cmd (str
2f70: 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 63 61 72 ing->symbol (car
2f80: 20 63 6d 64 6c 6e 29 29 29 0a 09 20 20 20 20 20 cmdln)))..
2f90: 28 74 6b 65 79 20 20 28 74 77 69 6b 69 3a 77 65 (tkey (twiki:we
2fa0: 62 36 34 64 65 63 20 28 63 61 64 64 72 20 63 6d b64dec (caddr cm
2fb0: 64 6c 6e 29 29 29 0a 09 20 20 20 20 20 28 77 69 dln))).. (wi
2fc0: 64 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d d (string->num
2fd0: 62 65 72 20 28 63 61 64 72 20 63 6d 64 6c 6e 29 ber (cadr cmdln)
2fe0: 29 29 0a 09 20 20 20 20 20 28 74 64 62 20 20 20 )).. (tdb
2ff0: 28 74 77 69 6b 69 3a 6f 70 65 6e 2d 64 62 20 74 (twiki:open-db t
3000: 6b 65 79 29 29 29 0a 09 28 73 3a 6c 6f 67 20 22 key)))..(s:log "
3010: 63 6d 64 6c 6e 3a 20 22 20 63 6d 64 6c 6e 20 22 cmdln: " cmdln "
3020: 20 63 6d 64 3a 20 22 20 63 6d 64 20 22 20 74 6b cmd: " cmd " tk
3030: 65 79 3a 20 22 20 74 6b 65 79 20 22 20 77 69 64 ey: " tkey " wid
3040: 3a 20 22 20 77 69 64 29 0a 09 28 63 61 73 65 20 : " wid)..(case
3050: 63 6d 64 0a 09 20 20 28 28 73 61 76 65 29 0a 09 cmd.. ((save)..
3060: 20 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 63 (twiki:save-c
3070: 75 72 72 2d 74 69 64 64 6c 65 72 20 74 64 62 20 urr-tiddler tdb
3080: 77 69 64 29 29 0a 09 20 20 28 28 73 61 76 65 70 wid)).. ((savep
3090: 69 63 29 0a 09 20 20 20 28 73 3a 6c 6f 67 20 22 ic).. (s:log "
30a0: 74 77 69 6b 69 3a 61 63 74 69 6f 6e 20 67 6f 74 twiki:action got
30b0: 20 74 6f 20 73 61 76 65 70 69 63 22 29 0a 09 20 to savepic")..
30c0: 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 70 69 (twiki:save-pi
30d0: 63 2d 66 72 6f 6d 2d 66 6f 72 6d 20 74 64 62 20 c-from-form tdb
30e0: 77 69 64 29 29 0a 09 20 20 28 28 63 61 6e 63 65 wid)).. ((cance
30f0: 6c 29 20 3b 3b 20 64 65 70 72 65 63 61 74 65 64 l) ;; deprecated
3100: 2e 20 55 73 65 20 61 20 6c 69 6e 6b 20 66 6f 72 . Use a link for
3110: 20 74 68 69 73 20 28 69 2e 65 20 69 6e 20 74 68 this (i.e in th
3120: 65 20 74 77 69 6b 69 3a 74 77 69 6b 69 20 70 72 e twiki:twiki pr
3130: 6f 63 0a 09 20 20 20 28 73 3a 64 65 6c 21 20 28 oc.. (s:del! (
3140: 63 6f 6e 63 20 22 43 55 52 52 45 4e 54 5f 54 57 conc "CURRENT_TW
3150: 49 44 4c 45 52 5f 55 4e 44 45 52 5f 45 44 49 54 IDLER_UNDER_EDIT
3160: 3a 22 20 77 69 64 29 29 0a 09 20 20 20 29 29 29 :" wid)).. )))
3170: 29 29 0a 0a 3b 3b 20 67 65 6e 65 72 61 74 65 20 ))..;; generate
3180: 61 20 66 6f 72 6d 20 66 6f 72 20 65 64 69 74 69 a form for editi
3190: 6e 67 20 61 20 74 77 69 64 64 6c 65 72 20 74 6e ng a twiddler tn
31a0: 75 6d 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b um.(define (twik
31b0: 69 3a 65 64 69 74 2d 74 69 64 64 6c 65 72 20 64 i:edit-tiddler d
31c0: 62 20 74 6b 65 79 20 77 69 64 20 74 6e 75 6d 29 b tkey wid tnum)
31d0: 0a 20 20 28 73 3a 6c 6f 67 20 22 74 77 69 6b 69 . (s:log "twiki
31e0: 3a 65 64 69 74 2d 74 69 64 64 6c 65 72 3a 20 74 :edit-tiddler: t
31f0: 6b 65 79 3d 22 20 74 6b 65 79 20 22 20 77 69 64 key=" tkey " wid
3200: 3a 20 22 20 77 69 64 29 0a 20 20 28 6c 65 74 2a : " wid). (let*
3210: 20 28 28 65 6e 63 2d 6b 65 79 20 20 28 74 77 69 ((enc-key (twi
3220: 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 6b 65 79 ki:web64enc tkey
3230: 29 29 0a 09 20 28 74 69 64 64 61 74 73 20 20 28 )).. (tiddats (
3240: 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 twiki:get-tiddle
3250: 72 73 2d 62 79 2d 6e 75 6d 20 64 62 20 77 69 64 rs-by-num db wid
3260: 20 28 6c 69 73 74 20 74 6e 75 6d 29 29 29 29 0a (list tnum)))).
3270: 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 74 (if (null? t
3280: 69 64 64 61 74 73 29 0a 09 28 6c 65 74 2a 20 28 iddats)..(let* (
3290: 28 74 69 64 20 20 20 20 30 29 0a 09 20 20 20 20 (tid 0)..
32a0: 20 20 20 28 64 61 74 2d 69 64 20 30 29 29 0a 09 (dat-id 0))..
32b0: 20 20 28 73 3a 73 65 74 21 20 22 74 77 69 6b 69 (s:set! "twiki
32c0: 5f 74 69 74 6c 65 22 20 22 22 29 0a 09 20 20 28 _title" "").. (
32d0: 73 3a 73 65 74 21 20 22 74 77 69 6b 69 5f 62 6f s:set! "twiki_bo
32e0: 64 79 22 20 20 22 22 29 29 0a 09 28 6c 65 74 2a dy" ""))..(let*
32f0: 20 28 28 74 69 64 20 20 20 20 28 63 61 72 20 74 ((tid (car t
3300: 69 64 64 61 74 73 29 29 0a 09 20 20 20 20 20 20 iddats))..
3310: 20 28 64 61 74 2d 69 64 20 28 74 77 69 6b 69 3a (dat-id (twiki:
3320: 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 2d tiddler-get-dat-
3330: 69 64 20 74 69 64 29 29 29 0a 09 20 20 3b 3b 20 id tid))).. ;;
3340: 28 73 3a 6c 6f 67 20 22 74 69 64 3a 20 22 20 74 (s:log "tid: " t
3350: 69 64 20 22 20 64 61 74 2d 69 64 3a 20 22 20 64 id " dat-id: " d
3360: 61 74 2d 69 64 29 0a 09 20 20 28 73 3a 73 65 74 at-id).. (s:set
3370: 21 20 22 74 77 69 6b 69 5f 74 69 74 6c 65 22 20 ! "twiki_title"
3380: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 (twiki:tiddler-g
3390: 65 74 2d 6e 61 6d 65 20 74 69 64 29 29 0a 09 20 et-name tid))..
33a0: 20 28 73 3a 73 65 74 21 20 22 74 77 69 6b 69 5f (s:set! "twiki_
33b0: 62 6f 64 79 22 20 20 28 74 77 69 6b 69 3a 67 65 body" (twiki:ge
33c0: 74 2d 64 61 74 20 64 62 20 64 61 74 2d 69 64 29 t-dat db dat-id)
33d0: 29 29 29 0a 20 20 20 20 28 73 3a 66 6f 72 6d 20 ))). (s:form
33e0: 27 61 63 74 69 6f 6e 20 28 73 3a 6c 69 6e 6b 2d 'action (s:link-
33f0: 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 to (twiki:get-li
3400: 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 nk-back-to-curre
3410: 6e 74 29 0a 09 09 09 20 20 20 20 20 20 20 27 61 nt).... 'a
3420: 63 74 69 6f 6e 20 28 63 6f 6e 63 20 22 74 77 69 ction (conc "twi
3430: 6b 69 2e 73 61 76 65 2d 22 20 28 6e 75 6d 62 65 ki.save-" (numbe
3440: 72 2d 3e 73 74 72 69 6e 67 20 77 69 64 29 20 22 r->string wid) "
3450: 2d 22 20 65 6e 63 2d 6b 65 79 29 29 0a 09 20 20 -" enc-key))..
3460: 20 20 27 6d 65 74 68 6f 64 20 22 70 6f 73 74 22 'method "post"
3470: 20 3b 3b 20 27 74 77 69 6b 69 6e 61 6d 65 20 74 ;; 'twikiname t
3480: 6b 65 79 20 3b 3b 20 64 6f 6e 65 2c 20 63 61 6e key ;; done, can
3490: 63 65 6c 2c 20 64 65 6c 65 74 65 0a 09 20 20 20 cel, delete..
34a0: 20 28 73 3a 69 6e 70 75 74 20 27 74 79 70 65 20 (s:input 'type
34b0: 22 73 75 62 6d 69 74 22 20 20 20 27 6e 61 6d 65 "submit" 'name
34c0: 20 22 66 6f 72 6d 2d 6e 61 6d 65 22 20 27 76 61 "form-name" 'va
34d0: 6c 75 65 20 22 73 61 76 65 22 20 27 74 77 69 6b lue "save" 'twik
34e0: 69 6e 61 6d 65 20 74 6b 65 79 29 0a 09 20 20 20 iname tkey)..
34f0: 20 3b 3b 20 28 73 3a 61 20 22 64 6f 6e 65 22 20 ;; (s:a "done"
3500: 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 'href (s:link-to
3510: 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b (twiki:get-link
3520: 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 -back-to-current
3530: 29 20 27 73 61 76 65 5f 74 6d 65 6e 75 20 74 6e ) 'save_tmenu tn
3540: 75 6d 29 29 0a 09 20 20 20 20 28 73 3a 61 20 22 um)).. (s:a "
3550: 63 61 6e 63 65 6c 22 20 27 68 72 65 66 20 28 73 cancel" 'href (s
3560: 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a :link-to (twiki:
3570: 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f get-link-back-to
3580: 2d 63 75 72 72 65 6e 74 29 20 27 63 61 6e 63 65 -current) 'cance
3590: 6c 5f 74 65 64 69 74 20 74 6e 75 6d 29 29 20 22 l_tedit tnum)) "
35a0: 2e 22 0a 09 20 20 20 20 28 73 3a 61 20 22 64 65 .".. (s:a "de
35b0: 6c 65 74 65 22 20 27 68 72 65 66 20 28 73 3a 6c lete" 'href (s:l
35c0: 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 ink-to (twiki:ge
35d0: 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 t-link-back-to-c
35e0: 75 72 72 65 6e 74 29 20 27 64 65 6c 65 74 65 5f urrent) 'delete_
35f0: 74 69 64 64 6c 65 72 20 74 6e 75 6d 29 29 28 73 tiddler tnum))(s
3600: 3a 62 72 29 0a 09 20 20 20 20 28 73 3a 69 6e 70 :br).. (s:inp
3610: 75 74 2d 70 72 65 73 65 72 76 65 20 27 74 79 70 ut-preserve 'typ
3620: 65 20 22 74 65 78 74 22 20 27 6e 61 6d 65 20 22 e "text" 'name "
3630: 74 77 69 6b 69 5f 74 69 74 6c 65 22 20 27 73 69 twiki_title" 'si
3640: 7a 65 20 22 35 38 22 20 27 6d 61 78 6c 65 6e 67 ze "58" 'maxleng
3650: 74 68 20 22 31 35 30 22 29 0a 09 20 20 20 20 28 th "150").. (
3660: 73 3a 74 65 78 74 61 72 65 61 2d 70 72 65 73 65 s:textarea-prese
3670: 72 76 65 20 27 74 79 70 65 20 22 74 65 78 74 61 rve 'type "texta
3680: 72 65 61 22 20 27 6e 61 6d 65 20 22 74 77 69 6b rea" 'name "twik
3690: 69 5f 62 6f 64 79 22 20 27 72 6f 77 73 20 22 31 i_body" 'rows "1
36a0: 30 22 20 27 63 6f 6c 73 20 22 36 35 22 29 0a 09 0" 'cols "65")..
36b0: 20 20 20 20 28 73 3a 70 20 22 54 61 67 73 22 20 (s:p "Tags"
36c0: 28 73 3a 69 6e 70 75 74 2d 70 72 65 73 65 72 76 (s:input-preserv
36d0: 65 20 27 74 79 70 65 20 22 74 65 78 74 22 20 27 e 'type "text" '
36e0: 6e 61 6d 65 20 22 74 77 69 6b 69 5f 74 61 67 73 name "twiki_tags
36f0: 22 20 27 73 69 7a 65 20 22 35 35 22 20 27 6d 61 " 'size "55" 'ma
3700: 78 6c 65 6e 67 74 68 20 22 31 35 30 22 29 29 29 xlength "150")))
3710: 29 29 0a 0a 3b 3b 20 73 61 76 65 20 61 20 74 69 ))..;; save a ti
3720: 64 64 6c 65 72 20 74 6f 20 74 68 65 20 64 62 20 ddler to the db
3730: 66 6f 72 20 74 68 65 20 74 77 69 6b 69 20 74 77 for the twiki tw
3740: 69 6b 2c 20 67 65 74 74 69 6e 67 20 64 61 74 61 ik, getting data
3750: 20 66 72 6f 6d 20 74 68 65 20 49 4e 50 55 54 0a from the INPUT.
3760: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 73 (define (twiki:s
3770: 61 76 65 2d 63 75 72 72 2d 74 69 64 64 6c 65 72 ave-curr-tiddler
3780: 20 74 64 62 20 77 69 64 29 0a 20 20 28 66 6f 72 tdb wid). (for
3790: 6d 64 61 74 3a 70 72 69 6e 74 61 6c 6c 20 28 73 mdat:printall (s
37a0: 6c 6f 74 2d 72 65 66 20 73 3a 73 65 73 73 69 6f lot-ref s:sessio
37b0: 6e 20 27 66 6f 72 6d 64 61 74 29 20 73 3a 6c 6f n 'formdat) s:lo
37c0: 67 29 0a 20 20 28 6c 65 74 2a 20 28 28 68 65 61 g). (let* ((hea
37d0: 64 69 6e 67 20 28 73 3a 67 65 74 2d 69 6e 70 75 ding (s:get-inpu
37e0: 74 20 27 74 77 69 6b 69 5f 74 69 74 6c 65 29 29 t 'twiki_title))
37f0: 0a 09 20 28 62 6f 64 79 20 20 20 20 28 73 3a 67 .. (body (s:g
3800: 65 74 2d 69 6e 70 75 74 20 27 74 77 69 6b 69 5f et-input 'twiki_
3810: 62 6f 64 79 29 29 0a 09 20 28 74 61 67 73 20 20 body)).. (tags
3820: 20 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 20 27 (s:get-input '
3830: 74 77 69 6b 69 5f 74 61 67 73 29 29 0a 09 20 28 twiki_tags)).. (
3840: 75 69 64 20 20 20 20 20 28 74 77 69 6b 69 3a 67 uid (twiki:g
3850: 65 74 2d 69 64 29 29 29 0a 20 20 20 20 3b 3b 20 et-id))). ;;
3860: 28 73 3a 6c 6f 67 20 22 74 77 69 6b 69 3a 73 61 (s:log "twiki:sa
3870: 76 65 2d 63 75 72 72 2d 74 69 64 64 6c 65 72 20 ve-curr-tiddler
3880: 68 65 61 64 69 6e 67 3a 20 22 20 68 65 61 64 69 heading: " headi
3890: 6e 67 20 22 20 62 6f 64 79 3a 20 22 20 62 6f 64 ng " body: " bod
38a0: 79 20 22 20 74 61 67 73 3a 20 22 20 74 61 67 73 y " tags: " tags
38b0: 29 0a 20 20 20 20 28 73 3a 73 65 74 21 20 27 74 ). (s:set! 't
38c0: 77 69 6b 69 5f 74 69 74 6c 65 20 68 65 61 64 69 wiki_title headi
38d0: 6e 67 29 0a 20 20 20 20 28 69 66 20 62 6f 64 79 ng). (if body
38e0: 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 73 65 74 ..(begin.. (set
38f0: 21 20 62 6f 64 79 20 28 73 74 72 69 6e 67 2d 63 ! body (string-c
3900: 68 6f 6d 70 20 62 6f 64 79 29 29 0a 09 20 20 28 homp body)).. (
3910: 73 3a 73 65 74 21 20 27 74 77 69 6b 69 5f 62 6f s:set! 'twiki_bo
3920: 64 79 20 20 62 6f 64 79 29 29 29 0a 20 20 20 20 dy body))).
3930: 28 73 3a 73 65 74 21 20 27 74 77 69 6b 69 5f 74 (s:set! 'twiki_t
3940: 61 67 73 20 20 74 61 67 73 29 0a 20 20 20 20 28 ags tags). (
3950: 73 3a 64 65 6c 21 20 28 63 6f 6e 63 20 22 43 55 s:del! (conc "CU
3960: 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 5f 55 4e RRENT_TWIDLER_UN
3970: 44 45 52 5f 45 44 49 54 3a 22 20 77 69 64 29 29 DER_EDIT:" wid))
3980: 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 20 . (let ((res
3990: 28 74 77 69 6b 69 3a 73 61 76 65 2d 74 69 64 64 (twiki:save-tidd
39a0: 6c 65 72 20 74 64 62 20 68 65 61 64 69 6e 67 20 ler tdb heading
39b0: 62 6f 64 79 20 74 61 67 73 20 77 69 64 20 75 69 body tags wid ui
39c0: 64 29 29 29 0a 20 20 20 20 20 20 3b 3b 20 4e 6f d))). ;; No
39d0: 77 2c 20 72 65 70 6c 61 63 65 20 74 68 69 73 20 w, replace this
39e0: 74 77 69 64 64 6c 65 72 20 6e 75 6d 62 65 72 20 twiddler number
39f0: 69 6e 20 74 68 65 20 76 69 65 77 20 6c 69 73 74 in the view list
3a00: 20 77 69 74 68 20 0a 20 20 20 20 20 20 3b 3b 20 with . ;;
3a10: 74 68 65 20 6e 65 77 20 6e 75 6d 62 65 72 20 66 the new number f
3a20: 72 6f 6d 20 74 68 65 20 64 62 0a 20 20 20 20 20 rom the db.
3a30: 20 28 74 77 69 6b 69 3a 6e 6f 72 6d 61 6c 69 7a (twiki:normaliz
3a40: 65 2d 63 75 72 72 65 6e 74 2d 74 77 69 64 64 6c e-current-twiddl
3a50: 65 72 73 20 74 64 62 20 77 69 64 29 0a 20 20 20 ers tdb wid).
3a60: 20 20 20 28 73 3a 64 65 6c 21 20 27 74 77 69 6b (s:del! 'twik
3a70: 69 5f 74 69 74 6c 65 29 0a 20 20 20 20 20 20 28 i_title). (
3a80: 73 3a 64 65 6c 21 20 27 74 77 69 6b 69 5f 62 6f s:del! 'twiki_bo
3a90: 64 79 29 0a 20 20 20 20 20 20 28 73 3a 64 65 6c dy). (s:del
3aa0: 21 20 27 74 77 69 6b 69 5f 74 61 67 73 29 0a 20 ! 'twiki_tags).
3ab0: 20 20 20 20 20 72 65 73 29 0a 20 20 20 20 29 29 res). ))
3ac0: 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 ..(define (twiki
3ad0: 3a 6e 6f 72 6d 61 6c 69 7a 65 2d 63 75 72 72 65 :normalize-curre
3ae0: 6e 74 2d 74 77 69 64 64 6c 65 72 73 20 74 64 62 nt-twiddlers tdb
3af0: 20 77 69 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 wid). (let* ((
3b00: 63 76 61 72 20 20 20 20 20 20 28 63 6f 6e 63 20 cvar (conc
3b10: 22 43 55 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 "CURRENT_TWIDLER
3b20: 53 3a 22 20 77 69 64 29 29 0a 09 20 28 63 75 72 S:" wid)).. (cur
3b30: 72 2d 73 6c 73 74 20 28 73 3a 67 65 74 20 63 76 r-slst (s:get cv
3b40: 61 72 29 29 0a 09 20 28 63 75 72 72 2d 6c 73 74 ar)).. (curr-lst
3b50: 20 20 28 6d 61 70 20 73 74 72 69 6e 67 2d 3e 6e (map string->n
3b60: 75 6d 62 65 72 20 28 73 74 72 69 6e 67 2d 73 70 umber (string-sp
3b70: 6c 69 74 20 63 75 72 72 2d 73 6c 73 74 20 22 2c lit curr-slst ",
3b80: 22 29 29 29 0a 09 20 28 74 64 6c 72 73 20 20 20 "))).. (tdlrs
3b90: 20 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 (twiki:get-tid
3ba0: 64 6c 65 72 73 2d 62 79 2d 6e 75 6d 20 74 64 62 dlers-by-num tdb
3bb0: 20 77 69 64 20 63 75 72 72 2d 6c 73 74 29 29 0a wid curr-lst)).
3bc0: 09 20 28 6e 61 6d 65 73 20 20 20 20 20 28 72 65 . (names (re
3bd0: 6d 6f 76 65 20 28 6c 61 6d 62 64 61 20 28 74 29 move (lambda (t)
3be0: 28 73 74 72 69 6e 67 3d 3f 20 22 4d 61 69 6e 4d (string=? "MainM
3bf0: 65 6e 75 22 20 74 29 29 0a 09 09 09 20 20 20 20 enu" t))....
3c00: 28 6d 61 70 20 74 77 69 6b 69 3a 74 69 64 64 6c (map twiki:tiddl
3c10: 65 72 2d 67 65 74 2d 6e 61 6d 65 20 74 64 6c 72 er-get-name tdlr
3c20: 73 29 29 29 0a 09 20 28 6e 65 77 6e 75 6d 73 20 s))).. (newnums
3c30: 20 20 28 6d 61 70 20 74 77 69 6b 69 3a 74 69 64 (map twiki:tid
3c40: 64 6c 65 72 2d 67 65 74 2d 69 64 20 0a 09 09 09 dler-get-id ....
3c50: 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 74 (map (lambda (t
3c60: 6e 29 0a 09 09 09 09 28 74 77 69 6b 69 3a 67 65 n).....(twiki:ge
3c70: 74 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d t-tiddler-by-nam
3c80: 65 20 74 64 62 20 77 69 64 20 74 6e 29 29 0a 09 e tdb wid tn))..
3c90: 09 09 20 20 20 20 20 20 6e 61 6d 65 73 29 29 29 .. names)))
3ca0: 29 0a 20 20 20 20 28 73 3a 73 65 74 21 20 63 76 ). (s:set! cv
3cb0: 61 72 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 ar (string-inter
3cc0: 73 70 65 72 73 65 20 28 6d 61 70 20 6e 75 6d 62 sperse (map numb
3cd0: 65 72 2d 3e 73 74 72 69 6e 67 20 6e 65 77 6e 75 er->string newnu
3ce0: 6d 73 29 0a 09 09 09 09 20 20 20 20 20 22 2c 22 ms)..... ","
3cf0: 29 29 29 29 0a 20 20 20 20 0a 3b 3b 20 67 65 6e )))). .;; gen
3d00: 65 72 69 63 20 73 61 76 65 20 74 69 64 64 6c 65 eric save tiddle
3d10: 72 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 r.(define (twiki
3d20: 3a 73 61 76 65 2d 74 69 64 64 6c 65 72 20 74 64 :save-tiddler td
3d30: 62 20 68 65 61 64 69 6e 67 20 62 6f 64 79 20 74 b heading body t
3d40: 61 67 73 20 77 69 64 20 75 69 64 29 0a 20 20 20 ags wid uid).
3d50: 20 28 69 66 20 28 6d 69 73 63 3a 6e 6f 6e 2d 7a (if (misc:non-z
3d60: 65 72 6f 2d 73 74 72 69 6e 67 20 68 65 61 64 69 ero-string headi
3d70: 6e 67 29 0a 09 28 6c 65 74 2a 20 28 28 70 72 65 ng)..(let* ((pre
3d80: 76 2d 74 69 64 20 28 74 77 69 6b 69 3a 67 65 74 v-tid (twiki:get
3d90: 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d 65 -tiddler-by-name
3da0: 20 74 64 62 20 77 69 64 20 68 65 61 64 69 6e 67 tdb wid heading
3db0: 29 29 0a 09 20 20 20 20 20 20 20 28 70 72 65 76 )).. (prev
3dc0: 2d 64 61 74 2d 69 64 20 28 69 66 20 70 72 65 76 -dat-id (if prev
3dd0: 2d 74 69 64 20 0a 09 09 09 09 28 74 77 69 6b 69 -tid .....(twiki
3de0: 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 64 61 74 :tiddler-get-dat
3df0: 2d 69 64 20 70 72 65 76 2d 74 69 64 29 0a 09 09 -id prev-tid)...
3e00: 09 09 2d 31 29 29 0a 09 20 20 20 20 20 20 20 28 ..-1)).. (
3e10: 64 61 74 2d 69 64 20 28 74 77 69 6b 69 3a 73 61 dat-id (twiki:sa
3e20: 76 65 2d 64 61 74 20 74 64 62 20 62 6f 64 79 20 ve-dat tdb body
3e30: 30 29 29 29 20 3b 3b 20 30 3d 74 65 78 74 0a 09 0))) ;; 0=text..
3e40: 20 20 3b 3b 20 28 73 3a 6c 6f 67 20 22 74 77 69 ;; (s:log "twi
3e50: 6b 69 3a 73 61 76 65 2d 74 69 64 64 6c 65 72 20 ki:save-tiddler
3e60: 64 61 74 2d 69 64 3a 20 22 20 64 61 74 2d 69 64 dat-id: " dat-id
3e70: 20 22 20 62 6f 64 79 3a 20 22 20 62 6f 64 79 29 " body: " body)
3e80: 0a 09 20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 .. (if (equal?
3e90: 70 72 65 76 2d 64 61 74 2d 69 64 20 64 61 74 2d prev-dat-id dat-
3ea0: 69 64 29 20 3b 3b 20 6e 6f 20 6e 65 65 64 20 74 id) ;; no need t
3eb0: 6f 20 69 6e 73 65 72 74 20 61 20 6e 65 77 20 72 o insert a new r
3ec0: 65 63 6f 72 64 20 69 66 20 74 68 65 20 64 61 74 ecord if the dat
3ed0: 20 64 69 64 6e 27 74 20 63 68 61 6e 67 65 0a 09 didn't change..
3ee0: 20 20 20 20 20 20 23 74 0a 09 20 20 20 20 20 20 #t..
3ef0: 28 64 62 69 3a 65 78 65 63 20 74 64 62 20 0a 09 (dbi:exec tdb ..
3f00: 09 09 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 .."INSERT INTO t
3f10: 69 64 64 6c 65 72 73 20 28 77 69 6b 69 5f 69 64 iddlers (wiki_id
3f20: 2c 6e 61 6d 65 2c 64 61 74 5f 69 64 2c 63 72 65 ,name,dat_id,cre
3f30: 61 74 65 64 5f 6f 6e 2c 6f 77 6e 65 72 5f 69 64 ated_on,owner_id
3f40: 29 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f ) VALUES(?,?,?,?
3f50: 2c 3f 29 3b 22 0a 09 09 09 77 69 64 20 68 65 61 ,?);"....wid hea
3f60: 64 69 6e 67 20 64 61 74 2d 69 64 20 28 63 75 72 ding dat-id (cur
3f70: 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 75 69 rent-seconds) ui
3f80: 64 29 29 0a 09 20 20 23 74 29 20 3b 3b 20 73 75 d)).. #t) ;; su
3f90: 63 63 65 73 73 0a 09 23 66 29 29 20 20 3b 3b 20 ccess..#f)) ;;
3fa0: 6e 6f 6e 2d 73 75 63 63 65 73 73 0a 0a 3b 3b 20 non-success..;;
3fb0: 74 65 78 74 3d 30 2c 20 6a 70 67 3d 31 2c 20 70 text=0, jpg=1, p
3fc0: 6e 67 3d 32 0a 28 64 65 66 69 6e 65 20 28 74 77 ng=2.(define (tw
3fd0: 69 6b 69 3a 73 61 76 65 2d 64 61 74 20 64 62 20 iki:save-dat db
3fe0: 64 61 74 20 74 79 70 65 29 0a 20 20 28 6c 65 74 dat type). (let
3ff0: 2a 20 28 28 6d 64 35 73 75 6d 20 28 6d 64 35 3a * ((md5sum (md5:
4000: 64 69 67 65 73 74 20 64 61 74 29 29 0a 09 20 28 digest dat)).. (
4010: 64 61 74 69 64 20 20 28 74 77 69 6b 69 3a 64 61 datid (twiki:da
4020: 74 2d 65 78 69 73 74 73 3f 20 64 62 20 6d 64 35 t-exists? db md5
4030: 73 75 6d 20 74 79 70 65 29 29 0a 09 20 28 64 61 sum type)).. (da
4040: 74 62 6c 6f 62 20 28 69 66 20 28 73 74 72 69 6e tblob (if (strin
4050: 67 3f 20 64 61 74 29 0a 09 09 20 20 20 20 20 20 g? dat)...
4060: 28 73 74 72 69 6e 67 2d 3e 62 6c 6f 62 20 64 61 (string->blob da
4070: 74 29 0a 09 09 20 20 20 20 20 20 64 61 74 29 29 t)... dat))
4080: 29 0a 20 20 20 20 28 69 66 20 64 61 74 69 64 0a ). (if datid.
4090: 09 64 61 74 69 64 0a 09 28 62 65 67 69 6e 0a 09 .datid..(begin..
40a0: 20 20 28 63 61 73 65 20 74 79 70 65 0a 09 20 20 (case type..
40b0: 20 20 28 28 30 29 20 20 20 28 64 62 69 3a 65 78 ((0) (dbi:ex
40c0: 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e ec db "INSERT IN
40d0: 54 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c TO dats (md5sum,
40e0: 64 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 dat,type) VALUES
40f0: 28 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d (?,?,?);" md5sum
4100: 20 64 61 74 62 6c 6f 62 20 30 29 29 0a 09 20 20 datblob 0))..
4110: 20 20 28 28 31 29 20 20 20 28 64 62 69 3a 65 78 ((1) (dbi:ex
4120: 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e ec db "INSERT IN
4130: 54 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c TO dats (md5sum,
4140: 64 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 dat,type) VALUES
4150: 28 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d (?,?,?);" md5sum
4160: 20 64 61 74 62 6c 6f 62 20 31 29 29 0a 09 20 20 datblob 1))..
4170: 20 20 28 65 6c 73 65 20 20 28 64 62 69 3a 65 78 (else (dbi:ex
4180: 65 63 20 64 62 20 22 49 4e 53 45 52 54 20 49 4e ec db "INSERT IN
4190: 54 4f 20 64 61 74 73 20 28 6d 64 35 73 75 6d 2c TO dats (md5sum,
41a0: 64 61 74 2c 74 79 70 65 29 20 56 41 4c 55 45 53 dat,type) VALUES
41b0: 28 3f 2c 3f 2c 3f 29 3b 22 20 6d 64 35 73 75 6d (?,?,?);" md5sum
41c0: 20 64 61 74 62 6c 6f 62 20 74 79 70 65 29 29 29 datblob type)))
41d0: 0a 09 20 20 28 74 77 69 6b 69 3a 64 61 74 2d 65 .. (twiki:dat-e
41e0: 78 69 73 74 73 3f 20 64 62 20 6d 64 35 73 75 6d xists? db md5sum
41f0: 20 74 79 70 65 29 29 29 29 29 0a 20 20 20 20 20 type))))).
4200: 20 20 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b .(define (twik
4210: 69 3a 64 61 74 2d 65 78 69 73 74 73 3f 20 64 62 i:dat-exists? db
4220: 20 6d 64 35 73 75 6d 20 74 79 70 65 29 0a 20 20 md5sum type).
4230: 28 64 62 69 3a 67 65 74 2d 6f 6e 65 20 64 62 20 (dbi:get-one db
4240: 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 "SELECT id FROM
4250: 64 61 74 73 20 57 48 45 52 45 20 6d 64 35 73 75 dats WHERE md5su
4260: 6d 3d 3f 20 41 4e 44 20 74 79 70 65 3d 3f 3b 22 m=? AND type=?;"
4270: 20 6d 64 35 73 75 6d 20 74 79 70 65 29 29 0a 0a md5sum type))..
4280: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 (define (twiki:g
4290: 65 74 2d 64 61 74 20 64 62 20 69 64 29 0a 20 20 et-dat db id).
42a0: 28 69 66 20 28 61 6e 64 20 69 64 20 28 6e 75 6d (if (and id (num
42b0: 62 65 72 3f 20 69 64 29 29 0a 20 20 20 20 20 20 ber? id)).
42c0: 28 69 66 20 28 3c 20 69 64 20 30 29 0a 09 20 20 (if (< id 0)..
42d0: 22 22 0a 09 20 20 28 6c 65 74 20 28 28 72 65 73 "".. (let ((res
42e0: 20 28 64 62 69 3a 67 65 74 2d 6f 6e 65 2d 72 6f (dbi:get-one-ro
42f0: 77 20 64 62 20 22 53 45 4c 45 43 54 20 64 61 74 w db "SELECT dat
4300: 2c 74 79 70 65 20 46 52 4f 4d 20 64 61 74 73 20 ,type FROM dats
4310: 57 48 45 52 45 20 69 64 3d 3f 3b 22 20 69 64 29 WHERE id=?;" id)
4320: 29 29 0a 09 20 20 20 20 28 69 66 20 72 65 73 0a )).. (if res.
4330: 09 09 28 63 61 73 65 20 28 76 65 63 74 6f 72 2d ..(case (vector-
4340: 72 65 66 20 72 65 73 20 31 29 0a 09 09 20 20 28 ref res 1)... (
4350: 28 30 29 28 62 6c 6f 62 2d 3e 73 74 72 69 6e 67 (0)(blob->string
4360: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 73 (vector-ref res
4370: 20 30 29 29 29 0a 09 09 20 20 28 65 6c 73 65 20 0)))... (else
4380: 28 76 65 63 74 6f 72 2d 72 65 66 20 72 65 73 20 (vector-ref res
4390: 30 29 29 29 0a 09 09 23 66 29 29 29 0a 20 20 20 0)))...#f))).
43a0: 20 20 20 23 66 29 29 0a 0a 28 64 65 66 69 6e 65 #f))..(define
43b0: 20 28 74 77 69 6b 69 3a 6d 61 69 6e 74 5f 61 72 (twiki:maint_ar
43c0: 65 61 20 74 64 62 20 77 69 64 20 74 6b 65 79 20 ea tdb wid tkey
43d0: 77 69 6b 69 29 0a 20 20 28 6c 65 74 20 28 28 6d wiki). (let ((m
43e0: 61 69 6e 74 20 28 73 3a 67 65 74 2d 70 61 72 61 aint (s:get-para
43f0: 6d 20 27 74 77 69 6b 69 5f 6d 61 69 6e 74 29 29 m 'twiki_maint))
4400: 0a 09 28 77 72 69 74 65 2d 70 65 72 6d 20 28 6d ..(write-perm (m
4410: 65 6d 62 65 72 20 27 77 20 28 74 77 69 6b 69 3a ember 'w (twiki:
4420: 77 69 6b 69 2d 67 65 74 2d 70 65 72 6d 73 20 77 wiki-get-perms w
4430: 69 6b 69 29 29 29 29 0a 20 20 20 20 28 73 3a 64 iki)))). (s:d
4440: 69 76 20 3b 3b 20 27 63 6c 61 73 73 20 22 6e 6f iv ;; 'class "no
4450: 64 65 22 20 0a 20 20 20 20 20 28 69 66 20 77 72 de" . (if wr
4460: 69 74 65 2d 70 65 72 6d 0a 09 20 28 6c 69 73 74 ite-perm.. (list
4470: 20 28 73 3a 61 20 22 4f 72 70 68 61 6e 73 22 20 (s:a "Orphans"
4480: 20 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 'href (s:link-t
4490: 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e o (twiki:get-lin
44a0: 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e k-back-to-curren
44b0: 74 29 20 27 74 77 69 6b 69 5f 6d 61 69 6e 74 20 t) 'twiki_maint
44c0: 31 29 29 28 73 3a 62 72 29 0a 09 20 20 20 20 20 1))(s:br)..
44d0: 20 20 28 73 3a 61 20 22 50 69 63 73 22 20 20 20 (s:a "Pics"
44e0: 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 'href (s:link-
44f0: 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 to (twiki:get-li
4500: 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 nk-back-to-curre
4510: 6e 74 29 20 27 74 77 69 6b 69 5f 6d 61 69 6e 74 nt) 'twiki_maint
4520: 20 32 29 29 28 73 3a 62 72 29 0a 09 20 20 20 20 2))(s:br)..
4530: 20 20 20 28 73 3a 61 20 22 48 65 6c 70 22 20 20 (s:a "Help"
4540: 20 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e 6b 'href (s:link
4550: 2d 74 6f 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c -to (twiki:get-l
4560: 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 ink-back-to-curr
4570: 65 6e 74 29 20 27 74 77 69 6b 69 5f 6d 61 69 6e ent) 'twiki_main
4580: 74 20 34 29 29 28 73 3a 62 72 29 29 0a 09 20 27 t 4))(s:br)).. '
4590: 28 29 29 0a 20 20 20 20 20 28 73 3a 61 20 22 53 ()). (s:a "S
45a0: 65 61 72 63 68 22 20 20 20 27 68 72 65 66 20 28 earch" 'href (
45b0: 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 77 69 6b 69 s:link-to (twiki
45c0: 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 63 6b 2d 74 :get-link-back-t
45d0: 6f 2d 63 75 72 72 65 6e 74 29 20 27 74 77 69 6b o-current) 'twik
45e0: 69 5f 6d 61 69 6e 74 20 33 29 29 28 73 3a 62 72 i_maint 3))(s:br
45f0: 29 0a 20 20 20 20 20 28 63 61 73 65 20 6d 61 69 ). (case mai
4600: 6e 74 0a 20 20 20 20 20 20 20 28 28 31 29 0a 09 nt. ((1)..
4610: 28 74 77 69 6b 69 3a 6c 69 73 74 2d 6f 72 70 68 (twiki:list-orph
4620: 61 6e 73 20 74 64 62 29 29 0a 20 20 20 20 20 20 ans tdb)).
4630: 20 28 65 6c 73 65 0a 09 20 27 28 29 29 29 29 29 (else.. '()))))
4640: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d )..;;===========
4650: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 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 0a 3b 3b 20 4f ===========.;; O
4690: 72 70 68 61 6e 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d rphans.;;=======
46a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
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 0a ===============.
46e0: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 6d (define (twiki:m
46f0: 61 6b 65 2d 74 69 64 64 6c 65 72 2d 6c 69 73 74 ake-tiddler-list
4700: 20 74 64 6c 72 73 20 2e 20 74 6e 75 6d 73 29 0a tdlrs . tnums).
4710: 20 20 28 63 6f 6e 63 20 28 73 74 72 69 6e 67 2d (conc (string-
4720: 69 6e 74 65 72 73 70 65 72 73 65 20 0a 09 20 28 intersperse .. (
4730: 6d 61 70 20 63 6f 6e 63 20 28 64 65 6c 65 74 65 map conc (delete
4740: 2d 64 75 70 6c 69 63 61 74 65 73 0a 09 09 20 20 -duplicates...
4750: 20 20 28 61 70 70 65 6e 64 20 28 6d 61 70 20 74 (append (map t
4760: 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 wiki:tiddler-get
4770: 2d 69 64 20 74 64 6c 72 73 29 20 74 6e 75 6d 73 -id tdlrs) tnums
4780: 29 29 29 0a 09 20 22 2c 22 29 29 29 0a 0a 28 64 ))).. ",")))..(d
4790: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 efine (twiki:get
47a0: 2d 6f 72 70 68 61 6e 73 20 74 64 62 29 0a 20 20 -orphans tdb).
47b0: 27 28 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 '())..(define (t
47c0: 77 69 6b 69 3a 6c 69 73 74 2d 6f 72 70 68 61 6e wiki:list-orphan
47d0: 73 20 74 64 62 29 0a 20 20 27 28 29 29 0a 0a 3b s tdb). '())..;
47e0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
47f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4820: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 50 69 63 74 75 =======.;; Pictu
4830: 72 65 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d res.;;==========
4840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4860: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4870: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 28 64 65 ============.(de
4880: 66 69 6e 65 20 28 74 77 69 6b 69 3a 70 69 63 5f fine (twiki:pic_
4890: 6d 67 6d 74 20 74 64 62 20 77 69 64 20 74 6b 65 mgmt tdb wid tke
48a0: 79 29 0a 20 20 28 73 3a 64 69 76 20 0a 20 20 20 y). (s:div .
48b0: 28 73 3a 61 20 22 41 64 64 20 70 69 63 22 20 27 (s:a "Add pic" '
48c0: 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 href (s:link-to
48d0: 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d (twiki:get-link-
48e0: 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 back-to-current)
48f0: 20 27 74 77 69 6b 69 5f 6d 61 69 6e 74 20 32 20 'twiki_maint 2
4900: 27 74 77 69 6b 69 5f 6d 61 69 6e 74 5f 61 64 64 'twiki_maint_add
4910: 5f 70 69 63 73 20 31 29 29 28 73 3a 62 72 29 0a _pics 1))(s:br).
4920: 20 20 20 28 69 66 20 28 73 3a 67 65 74 2d 70 61 (if (s:get-pa
4930: 72 61 6d 20 22 74 77 69 6b 69 5f 6d 61 69 6e 74 ram "twiki_maint
4940: 5f 61 64 64 5f 70 69 63 73 22 29 0a 20 20 20 20 _add_pics").
4950: 20 20 20 28 73 3a 66 6f 72 6d 20 27 65 6e 63 74 (s:form 'enct
4960: 79 70 65 20 22 6d 75 6c 74 69 70 61 72 74 2f 66 ype "multipart/f
4970: 6f 72 6d 2d 64 61 74 61 22 20 3b 3b 20 27 6e 61 orm-data" ;; 'na
4980: 6d 65 20 22 64 6f 65 73 2d 61 2d 66 6f 72 6d 2d me "does-a-form-
4990: 68 61 76 65 2d 61 2d 6e 61 6d 65 22 0a 09 20 20 have-a-name"..
49a0: 20 20 20 20 20 28 73 3a 69 6e 70 75 74 20 27 74 (s:input 't
49b0: 79 70 65 20 22 66 69 6c 65 22 20 27 6e 61 6d 65 ype "file" 'name
49c0: 20 22 69 6e 70 75 74 2d 70 69 63 74 75 72 65 22 "input-picture"
49d0: 20 27 76 61 6c 75 65 20 22 55 70 6c 6f 61 64 20 'value "Upload
49e0: 70 69 63 22 29 0a 09 20 20 20 20 20 20 20 28 73 pic").. (s
49f0: 3a 69 6e 70 75 74 20 27 74 79 70 65 20 22 73 75 :input 'type "su
4a00: 62 6d 69 74 22 20 27 6e 61 6d 65 20 22 73 75 62 bmit" 'name "sub
4a10: 6d 69 74 2d 70 69 63 74 75 72 65 22 20 27 76 61 mit-picture" 'va
4a20: 6c 75 65 20 22 53 75 62 6d 69 74 22 29 0a 09 20 lue "Submit")..
4a30: 20 20 20 20 20 20 27 6d 65 74 68 6f 64 20 22 70 'method "p
4a40: 6f 73 74 22 20 0a 09 20 20 20 20 20 20 20 27 61 ost" .. 'a
4a50: 63 74 69 6f 6e 20 28 73 3a 6c 69 6e 6b 2d 74 6f ction (s:link-to
4a60: 20 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b (twiki:get-link
4a70: 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 -back-to-current
4a80: 29 20 27 61 63 74 69 6f 6e 20 28 63 6f 6e 63 20 ) 'action (conc
4a90: 22 74 77 69 6b 69 2e 73 61 76 65 70 69 63 2d 22 "twiki.savepic-"
4aa0: 20 28 6e 75 6d 62 65 72 2d 3e 73 74 72 69 6e 67 (number->string
4ab0: 20 77 69 64 29 20 22 2d 22 20 28 74 77 69 6b 69 wid) "-" (twiki
4ac0: 3a 77 65 62 36 34 65 6e 63 20 74 6b 65 79 29 29 :web64enc tkey))
4ad0: 29 0a 09 20 20 20 20 20 20 20 28 73 3a 69 6e 70 ).. (s:inp
4ae0: 75 74 20 27 74 79 70 65 20 22 74 65 78 74 22 20 ut 'type "text"
4af0: 27 6e 61 6d 65 20 22 70 69 63 74 75 72 65 2d 6e 'name "picture-n
4b00: 61 6d 65 22 20 27 76 61 6c 75 65 20 22 22 29 29 ame" 'value ""))
4b10: 0a 20 20 20 20 20 20 20 27 28 29 29 0a 20 20 20 . '()).
4b20: 28 6c 65 74 20 28 28 70 69 63 73 20 28 64 62 69 (let ((pics (dbi
4b30: 3a 67 65 74 2d 72 6f 77 73 20 74 64 62 20 22 53 :get-rows tdb "S
4b40: 45 4c 45 43 54 20 69 64 2c 6e 61 6d 65 2c 64 61 ELECT id,name,da
4b50: 74 5f 69 64 2c 74 68 75 6d 62 5f 64 61 74 5f 69 t_id,thumb_dat_i
4b60: 64 20 46 52 4f 4d 20 70 69 63 73 20 57 48 45 52 d FROM pics WHER
4b70: 45 20 77 69 6b 69 5f 69 64 3d 3f 3b 22 20 77 69 E wiki_id=?;" wi
4b80: 64 29 29 29 0a 20 20 20 20 20 28 6d 61 70 20 28 d))). (map (
4b90: 6c 61 6d 62 64 61 20 28 70 69 63 29 0a 09 20 20 lambda (pic)..
4ba0: 20 20 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 (s:div 'class
4bb0: 22 74 69 64 64 6c 65 72 74 68 75 6d 62 22 0a 09 "tiddlerthumb"..
4bc0: 09 20 20 20 28 73 3a 69 6d 67 20 27 74 69 74 6c . (s:img 'titl
4bd0: 65 20 28 76 65 63 74 6f 72 2d 72 65 66 20 70 69 e (vector-ref pi
4be0: 63 20 31 29 20 27 61 6c 74 20 28 76 65 63 74 6f c 1) 'alt (vecto
4bf0: 72 2d 72 65 66 20 70 69 63 20 31 29 0a 09 09 20 r-ref pic 1)...
4c00: 09 20 20 3b 3b 20 27 73 72 63 20 28 73 3a 6c 69 . ;; 'src (s:li
4c10: 6e 6b 2d 74 6f 20 22 74 77 69 6b 69 22 20 27 77 nk-to "twiki" 'w
4c20: 69 6b 69 5f 6b 65 79 20 28 74 77 69 6b 69 3a 77 iki_key (twiki:w
4c30: 65 62 36 34 65 6e 63 20 74 6b 65 79 29 20 27 69 eb64enc tkey) 'i
4c40: 6d 61 67 65 20 20 28 76 65 63 74 6f 72 2d 72 65 mage (vector-re
4c50: 66 20 70 69 63 20 30 29 29 29 0a 09 09 20 09 20 f pic 0)))... .
4c60: 20 27 73 72 63 20 28 73 3a 6c 69 6e 6b 2d 74 6f 'src (s:link-to
4c70: 20 22 74 77 69 6b 69 22 20 27 77 69 6b 69 5f 6b "twiki" 'wiki_k
4c80: 65 79 20 28 63 6f 6e 63 20 28 6e 75 6d 62 65 72 ey (conc (number
4c90: 2d 3e 73 74 72 69 6e 67 20 77 69 64 29 20 22 2d ->string wid) "-
4ca0: 22 20 28 74 77 69 6b 69 3a 77 65 62 36 34 65 6e " (twiki:web64en
4cb0: 63 20 74 6b 65 79 29 29 0a 09 09 09 09 09 20 20 c tkey))......
4cc0: 27 74 68 75 6d 62 20 20 28 76 65 63 74 6f 72 2d 'thumb (vector-
4cd0: 72 65 66 20 70 69 63 20 30 29 29 29 0a 09 09 20 ref pic 0)))...
4ce0: 20 20 3b 3b 20 20 20 20 20 20 20 28 63 6f 6e 63 ;; (conc
4cf0: 20 22 74 77 69 6b 69 2f 22 20 77 69 64 20 22 2f "twiki/" wid "/
4d00: 74 68 75 6d 62 73 2f 22 20 28 76 65 63 74 6f 72 thumbs/" (vector
4d10: 2d 72 65 66 20 70 69 63 20 30 29 29 29 29 0a 09 -ref pic 0))))..
4d20: 09 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 . (vector-ref
4d30: 70 69 63 20 30 29 20 28 76 65 63 74 6f 72 2d 72 pic 0) (vector-r
4d40: 65 66 20 70 69 63 20 31 29 29 29 0a 09 20 20 70 ef pic 1))).. p
4d50: 69 63 73 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 ics))))..(define
4d60: 20 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 70 69 (twiki:save-pi
4d70: 63 2d 66 72 6f 6d 2d 66 6f 72 6d 20 74 64 62 20 c-from-form tdb
4d80: 77 69 64 29 0a 20 20 28 6c 65 74 2a 20 28 28 70 wid). (let* ((p
4d90: 69 63 2d 64 61 74 20 20 28 73 3a 67 65 74 2d 69 ic-dat (s:get-i
4da0: 6e 70 75 74 20 27 69 6e 70 75 74 2d 70 69 63 74 nput 'input-pict
4db0: 75 72 65 29 29 0a 09 20 28 61 6c 74 2d 6e 61 6d ure)).. (alt-nam
4dc0: 65 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 20 27 e (s:get-input '
4dd0: 70 69 63 74 75 72 65 2d 6e 61 6d 65 29 29 29 0a picture-name))).
4de0: 20 20 20 20 28 69 66 20 70 69 63 2d 64 61 74 0a (if pic-dat.
4df0: 09 28 62 65 67 69 6e 0a 09 20 20 28 73 3a 6c 6f .(begin.. (s:lo
4e00: 67 20 22 74 77 69 6b 69 3a 73 61 76 65 2d 70 69 g "twiki:save-pi
4e10: 63 2d 66 72 6f 6d 2d 66 6f 72 6d 20 77 69 74 68 c-from-form with
4e20: 20 70 69 63 2d 64 61 74 3d 22 20 70 69 63 2d 64 pic-dat=" pic-d
4e30: 61 74 20 22 20 61 6e 64 20 61 6c 74 2d 6e 61 6d at " and alt-nam
4e40: 65 3d 22 20 61 6c 74 2d 6e 61 6d 65 29 0a 09 20 e=" alt-name)..
4e50: 20 28 74 77 69 6b 69 3a 73 61 76 65 2d 70 69 63 (twiki:save-pic
4e60: 20 74 64 62 20 70 69 63 2d 64 61 74 20 77 69 64 tdb pic-dat wid
4e70: 20 61 6c 74 2d 6e 61 6d 65 29 29 0a 09 23 66 29 alt-name))..#f)
4e80: 29 29 0a 0a 3b 3b 20 67 65 74 20 70 69 63 20 69 ))..;; get pic i
4e90: 64 20 66 6f 72 20 61 20 70 69 63 20 6e 61 6d 65 d for a pic name
4ea0: 2c 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 61 , returns the la
4eb0: 74 65 73 74 0a 28 64 65 66 69 6e 65 20 28 74 77 test.(define (tw
4ec0: 69 6b 69 3a 67 65 74 2d 70 69 63 2d 69 64 20 74 iki:get-pic-id t
4ed0: 64 62 20 70 69 63 2d 6e 61 6d 65 20 77 69 64 29 db pic-name wid)
4ee0: 0a 20 20 28 64 62 69 3a 67 65 74 2d 6f 6e 65 20 . (dbi:get-one
4ef0: 74 64 62 20 22 53 45 4c 45 43 54 20 70 69 63 73 tdb "SELECT pics
4f00: 2e 69 64 20 46 52 4f 4d 20 70 69 63 73 20 57 48 .id FROM pics WH
4f10: 45 52 45 20 70 69 63 73 2e 6e 61 6d 65 3d 3f 20 ERE pics.name=?
4f20: 41 4e 44 20 70 69 63 73 2e 77 69 6b 69 5f 69 64 AND pics.wiki_id
4f30: 3d 3f 20 4f 52 44 45 52 20 42 59 20 70 69 63 73 =? ORDER BY pics
4f40: 2e 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31 .id DESC LIMIT 1
4f50: 3b 22 20 70 69 63 2d 6e 61 6d 65 20 77 69 64 29 ;" pic-name wid)
4f60: 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b )..(define (twik
4f70: 69 3a 73 61 76 65 2d 70 69 63 20 74 64 62 20 70 i:save-pic tdb p
4f80: 69 63 2d 64 61 74 20 77 69 64 20 61 6c 74 29 0a ic-dat wid alt).
4f90: 20 20 28 6c 65 74 20 28 28 70 69 63 2d 6e 61 6d (let ((pic-nam
4fa0: 65 20 28 63 61 72 20 70 69 63 2d 64 61 74 29 29 e (car pic-dat))
4fb0: 0a 09 28 70 69 63 2d 74 79 70 65 20 28 63 61 64 ..(pic-type (cad
4fc0: 72 20 70 69 63 2d 64 61 74 29 29 0a 09 28 70 69 r pic-dat))..(pi
4fd0: 63 2d 64 61 74 61 20 28 63 61 64 64 72 20 70 69 c-data (caddr pi
4fe0: 63 2d 64 61 74 29 29 0a 09 3b 3b 20 49 27 6d 20 c-dat))..;; I'm
4ff0: 6e 6f 74 20 74 6f 6f 20 68 61 70 70 79 20 77 69 not too happy wi
5000: 74 68 20 74 68 69 73 20 73 6f 6c 75 74 69 6f 6e th this solution
5010: 20 62 75 74 20 49 20 63 61 6e 27 74 20 73 65 65 but I can't see
5020: 6d 20 74 6f 20 63 68 6f 6d 70 20 74 68 65 20 5c m to chomp the \
5030: 6e 5c 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 n\d from the end
5040: 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 0a 09 of the string..
5050: 28 61 6c 74 2d 6e 61 6d 65 20 28 69 66 20 61 6c (alt-name (if al
5060: 74 20 28 73 74 72 69 6e 67 2d 73 75 62 73 74 69 t (string-substi
5070: 74 75 74 65 20 28 72 65 67 65 78 70 20 22 5b 5e tute (regexp "[^
5080: 5c 5c 77 20 5d 22 29 20 22 22 20 61 6c 74 20 23 \\w ]") "" alt #
5090: 74 29 20 23 66 29 29 29 0a 20 20 20 20 28 69 66 t) #f))). (if
50a0: 20 28 61 6e 64 20 61 6c 74 2d 6e 61 6d 65 0a 09 (and alt-name..
50b0: 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 (string-mat
50c0: 63 68 20 28 72 65 67 65 78 70 20 22 5c 5c 77 2b ch (regexp "\\w+
50d0: 22 29 20 61 6c 74 2d 6e 61 6d 65 29 29 0a 09 28 ") alt-name))..(
50e0: 73 65 74 21 20 70 69 63 2d 6e 61 6d 65 20 61 6c set! pic-name al
50f0: 74 2d 6e 61 6d 65 29 29 0a 20 20 20 20 28 73 3a t-name)). (s:
5100: 6c 6f 67 20 22 61 6c 74 3a 20 22 20 61 6c 74 20 log "alt: " alt
5110: 22 20 61 6c 74 2d 6e 61 6d 65 3a 20 22 20 61 6c " alt-name: " al
5120: 74 2d 6e 61 6d 65 29 0a 20 20 20 20 28 69 66 20 t-name). (if
5130: 70 69 63 2d 64 61 74 61 0a 09 28 6c 65 74 20 28 pic-data..(let (
5140: 28 64 61 74 2d 69 64 20 28 74 77 69 6b 69 3a 73 (dat-id (twiki:s
5150: 61 76 65 2d 64 61 74 20 74 64 62 20 70 69 63 2d ave-dat tdb pic-
5160: 64 61 74 61 20 28 74 77 69 6b 69 3a 6d 69 6d 65 data (twiki:mime
5170: 2d 3e 74 77 69 6b 69 2d 74 79 70 65 20 70 69 63 ->twiki-type pic
5180: 2d 74 79 70 65 29 29 29 0a 09 20 20 20 20 20 20 -type)))..
5190: 28 63 72 65 61 74 69 6f 6e 2d 74 69 6d 65 20 28 (creation-time (
51a0: 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 current-seconds)
51b0: 29 29 0a 09 20 20 3b 3b 20 28 74 77 69 6b 69 3a )).. ;; (twiki:
51c0: 64 65 6c 65 74 65 2d 70 69 63 2d 62 79 2d 6e 61 delete-pic-by-na
51d0: 6d 65 20 74 64 62 20 70 69 63 2d 6e 61 6d 65 29 me tdb pic-name)
51e0: 0a 09 20 20 28 64 62 69 3a 65 78 65 63 20 74 64 .. (dbi:exec td
51f0: 62 20 0a 09 09 20 20 20 20 22 49 4e 53 45 52 54 b ... "INSERT
5200: 20 49 4e 54 4f 20 70 69 63 73 20 28 6e 61 6d 65 INTO pics (name
5210: 2c 77 69 6b 69 5f 69 64 2c 64 61 74 5f 69 64 2c ,wiki_id,dat_id,
5220: 63 72 65 61 74 65 64 5f 6f 6e 2c 6f 77 6e 65 72 created_on,owner
5230: 5f 69 64 29 20 56 41 4c 55 45 53 28 3f 2c 3f 2c _id) VALUES(?,?,
5240: 3f 2c 3f 2c 3f 29 3b 22 0a 09 09 20 20 20 20 70 ?,?,?);"... p
5250: 69 63 2d 6e 61 6d 65 20 77 69 64 20 64 61 74 2d ic-name wid dat-
5260: 69 64 20 63 72 65 61 74 69 6f 6e 2d 74 69 6d 65 id creation-time
5270: 20 28 74 77 69 6b 69 3a 67 65 74 2d 69 64 29 29 (twiki:get-id))
5280: 0a 09 20 20 28 6c 65 74 20 28 28 70 69 63 2d 69 .. (let ((pic-i
5290: 64 20 28 74 77 69 6b 69 3a 67 65 74 2d 70 69 63 d (twiki:get-pic
52a0: 2d 69 64 20 74 64 62 20 70 69 63 2d 6e 61 6d 65 -id tdb pic-name
52b0: 20 77 69 64 29 29 29 0a 09 20 20 20 20 28 74 77 wid))).. (tw
52c0: 69 6b 69 3a 6d 61 6b 65 2d 74 68 75 6d 62 6e 61 iki:make-thumbna
52d0: 69 6c 20 74 64 62 20 70 69 63 2d 69 64 20 77 69 il tdb pic-id wi
52e0: 64 29 29 0a 09 20 20 23 74 29 0a 09 23 66 29 29 d)).. #t)..#f))
52f0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b )..(define (twik
5300: 69 3a 67 65 74 2d 70 69 63 2d 64 61 74 20 74 64 i:get-pic-dat td
5310: 62 20 77 69 64 20 70 69 63 2d 69 64 29 0a 20 20 b wid pic-id).
5320: 28 64 62 69 3a 67 65 74 2d 6f 6e 65 20 74 64 62 (dbi:get-one tdb
5330: 20 22 53 45 4c 45 43 54 20 64 61 74 20 46 52 4f "SELECT dat FRO
5340: 4d 20 70 69 63 73 20 49 4e 4e 45 52 20 4a 4f 49 M pics INNER JOI
5350: 4e 20 64 61 74 73 20 4f 4e 20 70 69 63 73 2e 64 N dats ON pics.d
5360: 61 74 5f 69 64 3d 64 61 74 73 2e 69 64 20 57 48 at_id=dats.id WH
5370: 45 52 45 20 70 69 63 73 2e 69 64 3d 3f 20 41 4e ERE pics.id=? AN
5380: 44 20 77 69 6b 69 5f 69 64 3d 3f 3b 22 20 70 69 D wiki_id=?;" pi
5390: 63 2d 69 64 20 77 69 64 29 29 0a 0a 28 64 65 66 c-id wid))..(def
53a0: 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 ine (twiki:get-t
53b0: 68 75 6d 62 2d 64 61 74 20 74 64 62 20 77 69 64 humb-dat tdb wid
53c0: 20 70 69 63 2d 69 64 29 0a 20 20 28 64 62 69 3a pic-id). (dbi:
53d0: 67 65 74 2d 6f 6e 65 20 74 64 62 20 22 53 45 4c get-one tdb "SEL
53e0: 45 43 54 20 64 61 74 20 46 52 4f 4d 20 70 69 63 ECT dat FROM pic
53f0: 73 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 64 61 74 s INNER JOIN dat
5400: 73 20 4f 4e 20 70 69 63 73 2e 74 68 75 6d 62 5f s ON pics.thumb_
5410: 64 61 74 5f 69 64 3d 64 61 74 73 2e 69 64 20 57 dat_id=dats.id W
5420: 48 45 52 45 20 70 69 63 73 2e 69 64 3d 3f 20 41 HERE pics.id=? A
5430: 4e 44 20 77 69 6b 69 5f 69 64 3d 3f 3b 22 20 70 ND wiki_id=?;" p
5440: 69 63 2d 69 64 20 77 69 64 29 29 0a 0a 3b 3b 20 ic-id wid))..;;
5450: 74 68 69 73 20 6f 6e 65 20 73 65 74 73 20 75 70 this one sets up
5460: 20 74 68 65 20 43 6f 6e 74 65 6e 74 20 74 79 70 the Content typ
5470: 65 2c 20 70 75 74 73 20 74 68 65 20 64 61 74 61 e, puts the data
5480: 20 69 6e 74 6f 20 70 61 67 65 2d 64 61 74 20 61 into page-dat a
5490: 6e 64 20 69 73 20 64 6f 6e 65 0a 28 64 65 66 69 nd is done.(defi
54a0: 6e 65 20 28 74 77 69 6b 69 3a 72 65 74 75 72 6e ne (twiki:return
54b0: 2d 69 6d 61 67 65 2d 64 61 74 20 74 64 62 20 77 -image-dat tdb w
54c0: 69 64 20 70 69 63 2d 69 64 29 0a 20 20 28 6c 65 id pic-id). (le
54d0: 74 20 28 28 64 61 74 20 20 28 74 77 69 6b 69 3a t ((dat (twiki:
54e0: 67 65 74 2d 70 69 63 2d 64 61 74 20 74 64 62 20 get-pic-dat tdb
54f0: 77 69 64 20 70 69 63 2d 69 64 29 29 29 0a 20 20 wid pic-id))).
5500: 20 20 28 73 3a 6c 6f 67 20 22 74 77 69 6b 69 3a (s:log "twiki:
5510: 72 65 74 75 72 6e 2d 69 6d 61 67 65 2d 64 61 74 return-image-dat
5520: 20 64 61 74 20 69 73 3a 20 22 20 64 61 74 20 22 dat is: " dat "
5530: 20 6f 66 20 73 69 7a 65 3a 20 22 20 28 69 66 20 of size: " (if
5540: 28 62 6c 6f 62 3f 20 64 61 74 29 28 62 6c 6f 62 (blob? dat)(blob
5550: 2d 73 69 7a 65 20 64 61 74 29 20 22 5b 6e 6f 74 -size dat) "[not
5560: 20 61 20 62 6c 6f 62 5d 22 29 29 0a 20 20 20 20 a blob]")).
5570: 28 73 6c 6f 74 2d 73 65 74 21 20 73 3a 73 65 73 (slot-set! s:ses
5580: 73 69 6f 6e 20 27 70 61 67 65 2d 74 79 70 65 20 sion 'page-type
5590: 27 69 6d 61 67 65 29 0a 20 20 20 20 28 73 6c 6f 'image). (slo
55a0: 74 2d 73 65 74 21 20 73 3a 73 65 73 73 69 6f 6e t-set! s:session
55b0: 20 27 63 6f 6e 74 65 6e 74 2d 74 79 70 65 20 22 'content-type "
55c0: 69 6d 61 67 65 2f 6a 70 65 67 22 29 0a 20 20 20 image/jpeg").
55d0: 20 28 73 6c 6f 74 2d 73 65 74 21 20 73 3a 73 65 (slot-set! s:se
55e0: 73 73 69 6f 6e 20 27 61 6c 74 2d 70 61 67 65 2d ssion 'alt-page-
55f0: 64 61 74 20 64 61 74 29 29 29 0a 20 20 20 20 3b dat dat))). ;
5600: 3b 20 28 73 65 73 73 69 6f 6e 3a 61 6c 74 2d 6f ; (session:alt-o
5610: 75 74 20 73 3a 73 65 73 73 69 6f 6e 29 29 29 0a ut s:session))).
5620: 0a 3b 3b 20 74 68 69 73 20 6f 6e 65 20 73 65 74 .;; this one set
5630: 73 20 75 70 20 74 68 65 20 43 6f 6e 74 65 6e 74 s up the Content
5640: 20 74 79 70 65 2c 20 70 75 74 73 20 74 68 65 20 type, puts the
5650: 64 61 74 61 20 69 6e 74 6f 20 70 61 67 65 2d 64 data into page-d
5660: 61 74 20 61 6e 64 20 69 73 20 64 6f 6e 65 0a 28 at and is done.(
5670: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 72 65 define (twiki:re
5680: 74 75 72 6e 2d 74 68 75 6d 62 2d 64 61 74 20 74 turn-thumb-dat t
5690: 64 62 20 77 69 64 20 70 69 63 2d 69 64 29 0a 20 db wid pic-id).
56a0: 20 28 6c 65 74 20 28 28 64 61 74 20 20 28 74 77 (let ((dat (tw
56b0: 69 6b 69 3a 67 65 74 2d 74 68 75 6d 62 2d 64 61 iki:get-thumb-da
56c0: 74 20 74 64 62 20 77 69 64 20 70 69 63 2d 69 64 t tdb wid pic-id
56d0: 29 29 29 0a 20 20 20 20 28 73 3a 6c 6f 67 20 22 ))). (s:log "
56e0: 74 77 69 6b 69 3a 72 65 74 75 72 6e 2d 69 6d 61 twiki:return-ima
56f0: 67 65 2d 64 61 74 20 64 61 74 20 69 73 3a 20 22 ge-dat dat is: "
5700: 20 64 61 74 20 22 20 6f 66 20 73 69 7a 65 3a 20 dat " of size:
5710: 22 20 28 69 66 20 28 62 6c 6f 62 3f 20 64 61 74 " (if (blob? dat
5720: 29 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 29 )(blob-size dat)
5730: 20 22 5b 6e 6f 74 20 61 20 62 6c 6f 62 5d 22 29 "[not a blob]")
5740: 29 0a 20 20 20 20 28 73 6c 6f 74 2d 73 65 74 21 ). (slot-set!
5750: 20 73 3a 73 65 73 73 69 6f 6e 20 27 70 61 67 65 s:session 'page
5760: 2d 74 79 70 65 20 27 69 6d 61 67 65 29 0a 20 20 -type 'image).
5770: 20 20 28 73 6c 6f 74 2d 73 65 74 21 20 73 3a 73 (slot-set! s:s
5780: 65 73 73 69 6f 6e 20 27 63 6f 6e 74 65 6e 74 2d ession 'content-
5790: 74 79 70 65 20 22 69 6d 61 67 65 2f 6a 70 65 67 type "image/jpeg
57a0: 22 29 0a 20 20 20 20 28 73 6c 6f 74 2d 73 65 74 "). (slot-set
57b0: 21 20 73 3a 73 65 73 73 69 6f 6e 20 27 61 6c 74 ! s:session 'alt
57c0: 2d 70 61 67 65 2d 64 61 74 20 64 61 74 29 29 29 -page-dat dat)))
57d0: 0a 20 20 20 20 3b 3b 20 28 73 65 73 73 69 6f 6e . ;; (session
57e0: 3a 61 6c 74 2d 6f 75 74 20 73 3a 73 65 73 73 69 :alt-out s:sessi
57f0: 6f 6e 29 29 29 0a 20 20 0a 28 64 65 66 69 6e 65 on))). .(define
5800: 20 28 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 68 75 (twiki:make-thu
5810: 6d 62 6e 61 69 6c 20 74 64 62 20 70 69 63 2d 69 mbnail tdb pic-i
5820: 64 20 77 69 64 29 0a 20 20 28 6c 65 74 20 28 28 d wid). (let ((
5830: 69 6e 64 61 74 20 20 28 74 77 69 6b 69 3a 67 65 indat (twiki:ge
5840: 74 2d 70 69 63 2d 64 61 74 20 74 64 62 20 77 69 t-pic-dat tdb wi
5850: 64 20 70 69 63 2d 69 64 29 29 29 0a 20 20 20 20 d pic-id))).
5860: 3b 3b 20 20 20 28 6f 75 74 64 61 74 20 28 6f 70 ;; (outdat (op
5870: 65 6e 2d 6f 75 74 70 75 74 2d 73 74 72 69 6e 67 en-output-string
5880: 29 29 29 0a 20 20 20 20 28 6c 65 74 2d 76 61 6c ))). (let-val
5890: 75 65 73 20 28 28 28 69 6e 70 20 6f 75 70 20 70 ues (((inp oup p
58a0: 69 64 29 28 70 72 6f 63 65 73 73 20 22 63 6f 6e id)(process "con
58b0: 76 65 72 74 22 20 28 6c 69 73 74 20 22 2d 73 69 vert" (list "-si
58c0: 7a 65 22 20 22 35 30 30 78 31 38 30 22 20 22 2d ze" "500x180" "-
58d0: 22 20 22 2d 74 68 75 6d 62 6e 61 69 6c 22 20 22 " "-thumbnail" "
58e0: 32 35 30 78 39 30 22 20 22 2d 75 6e 73 68 61 72 250x90" "-unshar
58f0: 70 22 20 22 30 78 2e 35 22 20 22 2d 22 29 29 29 p" "0x.5" "-")))
5900: 29 0a 09 09 28 77 72 69 74 65 2d 73 74 72 69 6e )...(write-strin
5910: 67 20 28 62 6c 6f 62 2d 3e 73 74 72 69 6e 67 20 g (blob->string
5920: 69 6e 64 61 74 29 20 23 66 20 6f 75 70 29 0a 09 indat) #f oup)..
5930: 09 28 63 6c 6f 73 65 2d 69 6e 70 75 74 2d 70 6f .(close-input-po
5940: 72 74 20 6f 75 70 29 0a 09 09 3b 3b 20 28 77 72 rt oup)...;; (wr
5950: 69 74 65 2d 73 74 72 69 6e 67 20 23 66 20 69 6e ite-string #f in
5960: 70 20 28 62 6c 6f 62 2d 3e 73 74 72 69 6e 67 20 p (blob->string
5970: 69 6e 64 61 74 29 29 0a 09 09 28 6c 65 74 20 28 indat))...(let (
5980: 28 6c 20 28 72 65 61 64 2d 73 74 72 69 6e 67 20 (l (read-string
5990: 23 66 20 69 6e 70 29 29 29 0a 09 09 20 20 28 63 #f inp)))... (c
59a0: 6c 6f 73 65 2d 6f 75 74 70 75 74 2d 70 6f 72 74 lose-output-port
59b0: 20 69 6e 70 29 0a 09 09 20 20 3b 3b 20 28 77 72 inp)... ;; (wr
59c0: 69 74 65 2d 73 74 72 69 6e 67 20 6c 20 23 66 20 ite-string l #f
59d0: 6f 75 74 64 61 74 29 0a 09 09 20 20 28 6c 65 74 outdat)... (let
59e0: 2a 20 28 28 6e 65 77 64 61 74 20 28 73 74 72 69 * ((newdat (stri
59f0: 6e 67 2d 3e 62 6c 6f 62 20 6c 29 29 20 3b 3b 20 ng->blob l)) ;;
5a00: 28 67 65 74 2d 6f 75 74 70 75 74 2d 73 74 72 69 (get-output-stri
5a10: 6e 67 20 6f 75 74 64 61 74 29 29 29 0a 09 09 09 ng outdat)))....
5a20: 20 28 64 61 74 2d 69 64 20 28 74 77 69 6b 69 3a (dat-id (twiki:
5a30: 73 61 76 65 2d 64 61 74 20 74 64 62 20 6e 65 77 save-dat tdb new
5a40: 64 61 74 20 32 29 29 29 20 3b 3b 20 62 75 67 3f dat 2))) ;; bug?
5a50: 0a 09 09 20 20 20 20 28 64 62 69 3a 65 78 65 63 ... (dbi:exec
5a60: 20 74 64 62 20 22 55 50 44 41 54 45 20 70 69 63 tdb "UPDATE pic
5a70: 73 20 53 45 54 20 74 68 75 6d 62 5f 64 61 74 5f s SET thumb_dat_
5a80: 69 64 3d 3f 20 57 48 45 52 45 20 69 64 3d 3f 3b id=? WHERE id=?;
5a90: 22 20 64 61 74 2d 69 64 20 70 69 63 2d 69 64 29 " dat-id pic-id)
5aa0: 0a 09 09 20 20 20 20 64 61 74 2d 69 64 29 29 29 ... dat-id)))
5ab0: 29 29 0a 0a 3b 3b 20 6e 6f 74 20 74 65 73 74 65 ))..;; not teste
5ac0: 64 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 d.(define (twiki
5ad0: 3a 70 69 63 64 61 74 2d 3e 74 68 75 6d 62 64 61 :picdat->thumbda
5ae0: 74 20 70 69 63 64 61 74 29 0a 20 20 28 6c 65 74 t picdat). (let
5af0: 2d 76 61 6c 75 65 73 20 28 28 28 69 6e 70 20 6f -values (((inp o
5b00: 75 70 20 70 69 64 29 28 70 72 6f 63 65 73 73 20 up pid)(process
5b10: 22 63 6f 6e 76 65 72 74 22 20 3b 3b 20 28 6c 69 "convert" ;; (li
5b20: 73 74 20 22 2d 73 69 7a 65 22 20 22 35 30 30 78 st "-size" "500x
5b30: 31 38 30 22 20 22 2d 22 20 22 2d 74 68 75 6d 62 180" "-" "-thumb
5b40: 6e 61 69 6c 22 20 22 32 35 30 78 39 30 22 20 22 nail" "250x90" "
5b50: 2d 75 6e 73 68 61 72 70 22 20 22 30 78 2e 35 22 -unsharp" "0x.5"
5b60: 20 22 2d 22 29 29 29 29 0a 09 09 09 09 20 20 20 "-")))).....
5b70: 20 20 20 28 6c 69 73 74 20 22 2d 73 69 7a 65 22 (list "-size"
5b80: 20 22 35 30 30 78 31 38 30 22 20 22 2d 22 20 22 "500x180" "-" "
5b90: 2d 74 68 75 6d 62 6e 61 69 6c 22 20 22 32 30 30 -thumbnail" "200
5ba0: 78 37 30 22 20 22 2d 75 6e 73 68 61 72 70 22 20 x70" "-unsharp"
5bb0: 22 30 78 2e 35 22 20 22 2d 22 29 29 29 29 0a 09 "0x.5" "-"))))..
5bc0: 20 20 20 20 20 20 28 77 72 69 74 65 2d 73 74 72 (write-str
5bd0: 69 6e 67 20 28 62 6c 6f 62 2d 3e 73 74 72 69 6e ing (blob->strin
5be0: 67 20 70 69 63 64 61 74 29 20 23 66 20 6f 75 70 g picdat) #f oup
5bf0: 29 0a 09 20 20 20 20 20 20 28 63 6c 6f 73 65 2d ).. (close-
5c00: 69 6e 70 75 74 2d 70 6f 72 74 20 6f 75 70 29 0a input-port oup).
5c10: 09 20 20 20 20 20 20 3b 3b 20 28 77 72 69 74 65 . ;; (write
5c20: 2d 73 74 72 69 6e 67 20 23 66 20 69 6e 70 20 28 -string #f inp (
5c30: 62 6c 6f 62 2d 3e 73 74 72 69 6e 67 20 69 6e 64 blob->string ind
5c40: 61 74 29 29 0a 09 20 20 20 20 20 20 28 6c 65 74 at)).. (let
5c50: 20 28 28 6c 20 28 72 65 61 64 2d 73 74 72 69 6e ((l (read-strin
5c60: 67 20 23 66 20 69 6e 70 29 29 29 0a 09 09 28 63 g #f inp)))...(c
5c70: 6c 6f 73 65 2d 6f 75 74 70 75 74 2d 70 6f 72 74 lose-output-port
5c80: 20 69 6e 70 29 0a 09 09 28 77 72 69 74 65 2d 73 inp)...(write-s
5c90: 74 72 69 6e 67 20 6c 20 23 66 20 6f 75 70 29 0a tring l #f oup).
5ca0: 09 09 28 73 74 72 69 6e 67 2d 3e 62 6c 6f 62 20 ..(string->blob
5cb0: 6c 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 l))))..(define (
5cc0: 74 77 69 6b 69 3a 6d 69 6d 65 2d 3e 74 77 69 6b twiki:mime->twik
5cd0: 69 2d 74 79 70 65 20 6d 69 6d 65 2d 74 79 70 65 i-type mime-type
5ce0: 29 0a 20 20 28 63 61 73 65 20 28 73 74 72 69 6e ). (case (strin
5cf0: 67 2d 3e 73 79 6d 62 6f 6c 20 6d 69 6d 65 2d 74 g->symbol mime-t
5d00: 79 70 65 29 0a 20 20 20 20 28 28 69 6d 61 67 65 ype). ((image
5d10: 2f 6a 70 65 67 29 20 31 29 0a 20 20 20 20 28 28 /jpeg) 1). ((
5d20: 69 6d 61 67 65 2f 70 6e 67 29 20 20 32 29 0a 20 image/png) 2).
5d30: 20 20 20 28 65 6c 73 65 20 30 29 29 29 0a 0a 3b (else 0)))..;
5d40: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;===============
5d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5d80: 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 57 69 6b 69 20 =======.;; Wiki
5d90: 73 74 75 66 66 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d stuff.;;========
5da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============..
5de0: 3b 3b 20 63 75 72 72 2d 74 69 64 64 6c 65 72 73 ;; curr-tiddlers
5df0: 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 74 68 is a list of th
5e00: 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 e names of the c
5e10: 75 72 72 65 6e 74 20 74 69 64 64 6c 65 72 73 20 urrent tiddlers
5e20: 64 69 73 70 6c 61 79 65 64 0a 3b 3b 20 74 69 64 displayed.;; tid
5e30: 64 6c 65 72 2d 75 6e 64 65 72 2d 65 64 69 74 20 dler-under-edit
5e40: 69 73 20 74 68 65 20 74 69 64 64 6c 65 72 20 62 is the tiddler b
5e50: 65 69 6e 67 20 65 64 69 74 65 64 20 28 6f 72 20 eing edited (or
5e60: 23 66 20 66 6f 72 20 6e 6f 6e 65 29 2e 0a 28 64 #f for none)..(d
5e70: 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 77 69 6b efine (twiki:wik
5e80: 69 20 6e 61 6d 65 20 6b 65 79 73 29 0a 20 20 28 i name keys). (
5e90: 6c 65 74 20 28 28 70 65 72 6d 73 20 20 20 28 74 let ((perms (t
5ea0: 77 69 6b 69 3a 61 63 63 65 73 73 20 6e 61 6d 65 wiki:access name
5eb0: 20 6b 65 79 73 20 28 74 77 69 6b 69 3a 67 65 74 keys (twiki:get
5ec0: 2d 69 64 29 29 29 29 0a 20 20 20 20 3b 3b 20 28 -id)))). ;; (
5ed0: 73 3a 6c 6f 67 20 22 74 77 69 6b 69 3a 77 69 6b s:log "twiki:wik
5ee0: 69 20 6e 61 6d 65 3a 20 5c 22 22 20 6e 61 6d 65 i name: \"" name
5ef0: 20 22 5c 22 20 6b 65 79 73 3a 20 22 20 6b 65 79 "\" keys: " key
5f00: 73 29 0a 20 20 20 20 28 69 66 20 28 6f 72 20 28 s). (if (or (
5f10: 6e 6f 74 20 6e 61 6d 65 29 0a 09 20 20 20 20 28 not name).. (
5f20: 73 74 72 69 6e 67 3d 3f 20 6e 61 6d 65 20 22 22 string=? name ""
5f30: 29 29 20 3b 3b 20 6e 61 6d 65 20 6d 75 73 74 20 )) ;; name must
5f40: 62 65 20 22 22 20 6f 72 20 23 66 20 74 6f 20 67 be "" or #f to g
5f50: 65 74 20 68 65 72 65 20 61 6e 64 20 72 65 74 75 et here and retu
5f60: 72 6e 20 61 6e 20 69 6d 61 67 65 0a 09 3b 3b 20 rn an image..;;
5f70: 68 61 6e 64 6c 65 20 72 65 74 75 72 6e 69 6e 67 handle returning
5f80: 20 70 69 63 74 75 72 65 73 2c 20 6e 6f 74 65 20 pictures, note
5f90: 6b 65 79 73 20 61 6e 64 20 6e 61 6d 65 20 61 72 keys and name ar
5fa0: 65 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 74 68 e ignored for th
5fb0: 65 73 65 2e 20 54 68 65 79 20 61 72 65 20 63 61 ese. They are ca
5fc0: 6c 6c 65 64 20 6f 75 74 20 69 6e 0a 09 3b 3b 20 lled out in..;;
5fd0: 74 68 65 20 74 77 69 6b 69 2f 76 69 65 77 2e 73 the twiki/view.s
5fe0: 63 6d 20 28 74 77 69 6b 69 3a 74 77 69 6b 69 20 cm (twiki:twiki
5ff0: 22 62 6c 61 68 22 20 27 28 6e 61 64 61 20 66 6f "blah" '(nada fo
6000: 6f 29 29 20 63 61 6c 6c 2e 0a 09 28 6c 65 74 20 o)) call...(let
6010: 28 28 69 6d 61 67 65 20 20 20 28 73 3a 67 65 74 ((image (s:get
6020: 2d 70 61 72 61 6d 20 22 69 6d 61 67 65 22 29 29 -param "image"))
6030: 0a 09 20 20 20 20 20 20 28 74 68 75 6d 62 20 20 .. (thumb
6040: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 (s:get-param "t
6050: 68 75 6d 62 22 29 29 29 0a 09 20 20 28 73 3a 6c humb"))).. (s:l
6060: 6f 67 20 22 69 6d 61 67 65 3a 20 22 20 69 6d 61 og "image: " ima
6070: 67 65 20 22 20 74 68 75 6d 62 3a 20 22 20 74 68 ge " thumb: " th
6080: 75 6d 62 20 22 20 77 69 6b 69 5f 6b 65 79 3a 20 umb " wiki_key:
6090: 22 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 27 " (s:get-param '
60a0: 77 69 6b 69 5f 6b 65 79 29 29 0a 09 20 20 28 69 wiki_key)).. (i
60b0: 66 20 28 61 6e 64 20 28 6d 65 6d 62 65 72 20 27 f (and (member '
60c0: 72 20 70 65 72 6d 73 29 20 69 6d 61 67 65 29 0a r perms) image).
60d0: 09 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 76 . (let* ((v
60e0: 61 72 6c 73 74 20 28 73 74 72 69 6e 67 2d 73 70 arlst (string-sp
60f0: 6c 69 74 20 28 73 3a 67 65 74 2d 70 61 72 61 6d lit (s:get-param
6100: 20 27 77 69 6b 69 5f 6b 65 79 29 20 22 2d 22 29 'wiki_key) "-")
6110: 29 0a 09 09 20 20 20 20 20 28 74 6b 65 79 20 28 )... (tkey (
6120: 74 77 69 6b 69 3a 77 65 62 36 34 64 65 63 20 28 twiki:web64dec (
6130: 63 61 64 72 20 76 61 72 6c 73 74 29 29 29 0a 09 cadr varlst)))..
6140: 09 20 20 20 20 20 28 77 69 64 20 20 28 73 74 72 . (wid (str
6150: 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 63 61 72 ing->number (car
6160: 20 20 76 61 72 6c 73 74 29 29 29 0a 09 09 20 20 varlst)))...
6170: 20 20 20 28 74 64 62 6e 20 28 74 77 69 6b 69 3a (tdbn (twiki:
6180: 6f 70 65 6e 2d 64 62 20 74 6b 65 79 20 23 66 29 open-db tkey #f)
6190: 29 29 0a 09 09 28 73 3a 6c 6f 67 20 22 74 6b 65 ))...(s:log "tke
61a0: 79 3a 20 22 20 74 6b 65 79 20 22 20 69 6d 61 67 y: " tkey " imag
61b0: 65 20 6e 75 6d 62 65 72 3a 20 22 20 69 6d 61 67 e number: " imag
61c0: 65 29 0a 09 09 28 74 77 69 6b 69 3a 72 65 74 75 e)...(twiki:retu
61d0: 72 6e 2d 69 6d 61 67 65 2d 64 61 74 20 74 64 62 rn-image-dat tdb
61e0: 6e 20 77 69 64 20 28 73 74 72 69 6e 67 2d 3e 6e n wid (string->n
61f0: 75 6d 62 65 72 20 69 6d 61 67 65 29 29 29 29 20 umber image))))
6200: 3b 3b 20 64 6f 20 6e 6f 74 20 72 65 74 75 72 6e ;; do not return
6210: 20 66 72 6f 6d 20 74 77 69 6b 69 3a 72 65 74 75 from twiki:retu
6220: 72 6e 2d 69 6d 61 67 65 0a 09 20 20 28 69 66 20 rn-image.. (if
6230: 28 61 6e 64 20 28 6d 65 6d 62 65 72 20 27 72 20 (and (member 'r
6240: 70 65 72 6d 73 29 20 74 68 75 6d 62 29 0a 09 20 perms) thumb)..
6250: 20 20 20 20 20 28 6c 65 74 2a 20 28 28 76 61 72 (let* ((var
6260: 6c 73 74 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 lst (string-spli
6270: 74 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 27 t (s:get-param '
6280: 77 69 6b 69 5f 6b 65 79 29 20 22 2d 22 29 29 0a wiki_key) "-")).
6290: 09 09 20 20 20 20 20 28 74 6b 65 79 20 20 20 28 .. (tkey (
62a0: 74 77 69 6b 69 3a 77 65 62 36 34 64 65 63 20 28 twiki:web64dec (
62b0: 63 61 64 72 20 76 61 72 6c 73 74 29 29 29 0a 09 cadr varlst)))..
62c0: 09 20 20 20 20 20 28 77 69 64 20 20 20 20 28 73 . (wid (s
62d0: 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 63 tring->number (c
62e0: 61 72 20 20 76 61 72 6c 73 74 29 29 29 0a 09 09 ar varlst)))...
62f0: 20 20 20 20 20 28 74 64 62 6e 20 20 20 28 74 77 (tdbn (tw
6300: 69 6b 69 3a 6f 70 65 6e 2d 64 62 20 74 6b 65 79 iki:open-db tkey
6310: 20 23 66 29 29 29 0a 09 09 28 73 3a 6c 6f 67 20 #f)))...(s:log
6320: 22 74 6b 65 79 3a 20 22 20 74 6b 65 79 20 22 20 "tkey: " tkey "
6330: 74 68 75 6d 62 20 6e 75 6d 62 65 72 3a 20 22 20 thumb number: "
6340: 69 6d 61 67 65 29 0a 09 09 28 74 77 69 6b 69 3a image)...(twiki:
6350: 72 65 74 75 72 6e 2d 74 68 75 6d 62 2d 64 61 74 return-thumb-dat
6360: 20 74 64 62 6e 20 77 69 64 20 28 73 74 72 69 6e tdbn wid (strin
6370: 67 2d 3e 6e 75 6d 62 65 72 20 74 68 75 6d 62 29 g->number thumb)
6380: 29 29 29 29 20 3b 3b 20 64 6f 20 6e 6f 74 20 72 )))) ;; do not r
6390: 65 74 75 72 6e 20 66 72 6f 6d 20 74 77 69 6b 69 eturn from twiki
63a0: 3a 72 65 74 75 72 6e 2d 69 6d 61 67 65 0a 09 28 :return-image..(
63b0: 69 66 20 28 6e 6f 74 20 28 6d 65 6d 62 65 72 20 if (not (member
63c0: 27 72 20 70 65 72 6d 73 29 29 20 3b 3b 20 72 65 'r perms)) ;; re
63d0: 61 64 20 61 63 63 65 73 73 0a 09 20 20 20 20 27 ad access.. '
63e0: 28 29 20 3b 3b 20 72 65 74 75 72 6e 20 61 20 62 () ;; return a b
63f0: 6c 61 6e 6b 20 73 6c 61 74 65 0a 09 20 20 20 20 lank slate..
6400: 28 74 77 69 6b 69 3a 64 69 73 70 6c 61 79 2d 77 (twiki:display-w
6410: 69 6b 69 20 6e 61 6d 65 20 6b 65 79 73 20 70 65 iki name keys pe
6420: 72 6d 73 29 29 29 29 29 0a 0a 28 64 65 66 69 6e rms)))))..(defin
6430: 65 20 28 74 77 69 6b 69 3a 64 69 73 70 6c 61 79 e (twiki:display
6440: 2d 77 69 6b 69 20 6e 61 6d 65 20 6b 65 79 73 20 -wiki name keys
6450: 70 65 72 6d 73 29 0a 20 20 28 6c 65 74 2a 20 28 perms). (let* (
6460: 28 77 69 6b 69 64 61 74 20 20 28 6d 61 6b 65 2d (wikidat (make-
6470: 74 77 69 6b 69 3a 77 69 6b 69 29 29 0a 09 20 28 twiki:wiki)).. (
6480: 74 6b 65 79 20 20 20 20 20 28 74 77 69 6b 69 3a tkey (twiki:
6490: 6b 65 79 73 2d 3e 6b 65 79 20 6b 65 79 73 29 29 keys->key keys))
64a0: 0a 09 20 28 74 64 62 20 20 20 20 20 20 28 74 77 .. (tdb (tw
64b0: 69 6b 69 3a 6f 70 65 6e 2d 64 62 20 74 6b 65 79 iki:open-db tkey
64c0: 29 29 0a 09 20 28 77 69 64 20 20 20 20 20 20 28 )).. (wid (
64d0: 74 77 69 6b 69 3a 6e 61 6d 65 2d 3e 77 69 64 20 twiki:name->wid
64e0: 74 64 62 20 6e 61 6d 65 29 29 0a 09 20 28 63 76 tdb name)).. (cv
64f0: 61 72 20 20 20 20 20 28 63 6f 6e 63 20 22 43 55 ar (conc "CU
6500: 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 53 3a 22 RRENT_TWIDLERS:"
6510: 20 77 69 64 29 29 20 3b 3b 20 70 61 67 65 20 76 wid)) ;; page v
6520: 61 72 20 74 6f 20 73 74 6f 72 65 20 63 75 72 72 ar to store curr
6530: 65 6e 74 20 74 77 69 64 64 6c 65 72 73 20 62 65 ent twiddlers be
6540: 69 6e 67 20 76 69 65 77 65 64 0a 09 20 28 63 76 ing viewed.. (cv
6550: 61 72 2d 65 64 20 20 28 63 6f 6e 63 20 22 43 55 ar-ed (conc "CU
6560: 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 5f 55 4e RRENT_TWIDLER_UN
6570: 44 45 52 5f 45 44 49 54 3a 22 20 77 69 64 29 29 DER_EDIT:" wid))
6580: 0a 09 20 28 74 6e 75 6d 65 64 69 74 20 28 69 66 .. (tnumedit (if
6590: 20 28 73 3a 67 65 74 20 63 76 61 72 2d 65 64 29 (s:get cvar-ed)
65a0: 20 0a 09 09 20 20 20 20 20 20 20 28 73 74 72 69 ... (stri
65b0: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 ng->number (s:ge
65c0: 74 20 63 76 61 72 2d 65 64 29 29 0a 09 09 20 20 t cvar-ed))...
65d0: 20 20 20 20 20 23 66 29 29 20 3b 3b 20 23 66 20 #f)) ;; #f
65e0: 3d 3e 20 6e 6f 74 68 69 6e 67 20 74 6f 20 65 64 => nothing to ed
65f0: 69 74 2c 20 2d 31 20 63 72 65 61 74 65 20 61 20 it, -1 create a
6600: 6e 65 77 20 74 69 64 64 6c 65 72 0a 09 20 28 74 new tiddler.. (t
6610: 6e 75 6d 76 69 65 77 20 23 66 29 0a 09 20 28 6c numview #f).. (l
6620: 6d 65 6e 75 20 20 20 20 28 74 77 69 6b 69 3a 67 menu (twiki:g
6630: 65 74 2d 74 69 64 64 6c 65 72 73 20 74 64 62 20 et-tiddlers tdb
6640: 77 69 64 20 28 6c 69 73 74 20 22 4d 61 69 6e 4d wid (list "MainM
6650: 65 6e 75 22 29 29 29 0a 09 20 3b 3b 20 73 74 6f enu"))).. ;; sto
6660: 72 65 20 74 69 64 64 6c 65 72 73 20 66 6f 72 20 re tiddlers for
6670: 74 68 69 73 20 70 61 67 65 2f 74 77 69 6b 69 20 this page/twiki
6680: 69 6e 20 63 76 61 72 20 28 69 2e 65 2e 20 43 55 in cvar (i.e. CU
6690: 52 52 45 4e 54 5f 54 57 49 44 4c 45 52 53 3a 3c RRENT_TWIDLERS:<
66a0: 77 69 64 3e 0a 09 20 28 74 64 6c 6e 75 6d 73 20 wid>.. (tdlnums
66b0: 20 28 69 66 20 28 73 3a 67 65 74 20 63 76 61 72 (if (s:get cvar
66c0: 29 0a 09 09 20 20 20 20 20 20 20 28 6d 61 70 20 )... (map
66d0: 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 string->number (
66e0: 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 28 73 3a string-split (s:
66f0: 67 65 74 20 63 76 61 72 29 20 22 2c 22 29 29 0a get cvar) ",")).
6700: 09 09 20 20 20 20 20 20 20 27 28 29 29 29 20 3b .. '())) ;
6710: 3b 20 6c 69 73 74 20 6f 66 20 74 69 64 64 6c 65 ; list of tiddle
6720: 72 20 6e 75 6d 62 65 72 73 0a 09 20 28 74 64 6c r numbers.. (tdl
6730: 72 73 20 20 20 20 27 28 29 29 0a 09 20 28 74 65 rs '()).. (te
6740: 64 69 74 65 64 20 20 28 69 66 20 28 6d 65 6d 62 dited (if (memb
6750: 65 72 20 27 77 20 70 65 72 6d 73 29 20 23 66 20 er 'w perms) #f
6760: 23 74 29 29 20 3b 3b 20 66 6f 72 63 65 20 6e 6f #t)) ;; force no
6770: 20 65 64 69 74 73 20 69 66 20 6e 6f 74 20 61 20 edits if not a
6780: 77 72 69 74 65 72 0a 09 20 28 65 64 69 74 2d 74 writer.. (edit-t
6790: 6d 65 6e 75 2d 69 64 20 28 69 66 20 28 61 6e 64 menu-id (if (and
67a0: 20 28 6d 65 6d 62 65 72 20 27 77 20 70 65 72 6d (member 'w perm
67b0: 73 29 0a 09 09 09 09 20 28 73 3a 67 65 74 2d 70 s)..... (s:get-p
67c0: 61 72 61 6d 20 22 65 64 69 74 5f 74 6d 65 6e 75 aram "edit_tmenu
67d0: 22 29 29 0a 09 09 09 20 20 20 20 28 73 74 72 69 ")).... (stri
67e0: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 ng->number (s:ge
67f0: 74 2d 70 61 72 61 6d 20 22 65 64 69 74 5f 74 6d t-param "edit_tm
6800: 65 6e 75 22 29 29 0a 09 09 09 20 20 20 20 23 66 enu")).... #f
6810: 29 29 0a 09 20 28 65 64 69 74 2d 74 69 64 64 6c )).. (edit-tiddl
6820: 65 72 20 28 69 66 20 20 28 61 6e 64 20 28 6d 65 er (if (and (me
6830: 6d 62 65 72 20 27 77 20 70 65 72 6d 73 29 0a 09 mber 'w perms)..
6840: 09 09 09 20 28 73 3a 67 65 74 2d 70 61 72 61 6d ... (s:get-param
6850: 20 22 65 64 69 74 5f 74 69 64 64 6c 65 72 22 29 "edit_tiddler")
6860: 29 20 3b 3b 20 74 68 69 73 20 68 61 6e 64 6c 65 ) ;; this handle
6870: 73 20 74 68 65 20 22 65 64 69 74 22 20 6c 69 6e s the "edit" lin
6880: 6b 20 69 6e 20 74 68 65 20 74 69 64 64 6c 65 72 k in the tiddler
6890: 20 63 6f 6e 74 72 6f 6c 20 62 61 72 0a 09 09 09 control bar....
68a0: 20 20 20 20 28 6c 65 74 20 28 28 74 20 28 74 77 (let ((t (tw
68b0: 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 iki:get-tiddlers
68c0: 2d 62 79 2d 6e 75 6d 20 74 64 62 20 77 69 64 20 -by-num tdb wid
68d0: 28 6c 69 73 74 20 28 73 74 72 69 6e 67 2d 3e 6e (list (string->n
68e0: 75 6d 62 65 72 20 28 73 3a 67 65 74 2d 70 61 72 umber (s:get-par
68f0: 61 6d 20 22 65 64 69 74 5f 74 69 64 64 6c 65 72 am "edit_tiddler
6900: 22 29 29 29 29 29 29 0a 09 09 09 20 20 20 20 20 "))))))....
6910: 20 28 73 3a 6c 6f 67 20 22 74 3a 20 22 20 74 29 (s:log "t: " t)
6920: 0a 09 09 09 20 20 20 20 20 20 28 69 66 20 74 0a .... (if t.
6930: 09 09 09 09 20 20 28 63 61 72 20 74 20 29 20 3b .... (car t ) ;
6940: 3b 20 73 68 6f 75 6c 64 20 62 65 20 61 20 6c 69 ; should be a li
6950: 73 74 20 6f 66 20 6f 6e 65 0a 09 09 09 09 20 20 st of one.....
6960: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 (twiki:tiddler-s
6970: 65 74 2d 6e 61 6d 65 21 0a 09 09 09 09 20 20 20 et-name!.....
6980: 28 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 (twiki:tiddler-s
6990: 65 74 2d 69 64 21 20 28 74 77 69 6b 69 3a 74 69 et-id! (twiki:ti
69a0: 64 64 6c 65 72 2d 6d 61 6b 65 29 20 2d 31 29 20 ddler-make) -1)
69b0: 22 4e 65 77 54 69 64 64 6c 65 72 22 29 29 29 0a "NewTiddler"))).
69c0: 09 09 09 20 20 20 20 23 66 29 29 0a 09 20 28 76 ... #f)).. (v
69d0: 69 65 77 2d 74 69 64 64 6c 65 72 20 28 69 66 20 iew-tiddler (if
69e0: 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 76 69 (s:get-param "vi
69f0: 65 77 5f 74 69 64 64 6c 65 72 22 29 0a 09 09 09 ew_tiddler")....
6a00: 20 20 20 28 6c 65 74 2a 20 28 28 74 6e 61 6d 65 (let* ((tname
6a10: 20 28 74 77 69 6b 69 3a 77 65 62 36 34 64 65 63 (twiki:web64dec
6a20: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 76 (s:get-param "v
6a30: 69 65 77 5f 74 69 64 64 6c 65 72 22 29 29 29 0a iew_tiddler"))).
6a40: 09 09 09 09 20 20 28 74 20 20 20 20 20 28 74 77 .... (t (tw
6a50: 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 2d iki:get-tiddler-
6a60: 62 79 2d 6e 61 6d 65 20 74 64 62 20 77 69 64 20 by-name tdb wid
6a70: 74 6e 61 6d 65 29 29 29 0a 09 09 09 20 20 20 20 tname)))....
6a80: 20 28 73 3a 6c 6f 67 20 22 74 3a 20 22 20 74 29 (s:log "t: " t)
6a90: 0a 09 09 09 20 20 20 20 20 28 69 66 20 74 0a 09 .... (if t..
6aa0: 09 09 09 20 74 20 0a 09 09 09 09 20 28 62 65 67 ... t ..... (beg
6ab0: 69 6e 0a 09 09 09 09 20 20 20 28 74 77 69 6b 69 in..... (twiki
6ac0: 3a 73 61 76 65 2d 74 69 64 64 6c 65 72 20 74 64 :save-tiddler td
6ad0: 62 20 74 6e 61 6d 65 20 28 63 6f 6e 63 20 22 21 b tname (conc "!
6ae0: 22 20 74 6e 61 6d 65 29 20 22 22 20 77 69 64 20 " tname) "" wid
6af0: 28 74 77 69 6b 69 3a 67 65 74 2d 69 64 29 29 0a (twiki:get-id)).
6b00: 09 09 09 09 20 20 20 28 74 77 69 6b 69 3a 67 65 .... (twiki:ge
6b10: 74 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e 61 6d t-tiddler-by-nam
6b20: 65 20 74 64 62 20 77 69 64 20 74 6e 61 6d 65 29 e tdb wid tname)
6b30: 29 29 29 0a 09 09 09 20 20 20 23 66 29 29 0a 09 ))).... #f))..
6b40: 20 29 20 3b 3b 20 69 6d 61 67 65 20 69 73 20 74 ) ;; image is t
6b50: 68 65 20 64 61 74 5f 69 64 2c 20 6b 65 65 70 20 he dat_id, keep
6b60: 69 74 20 73 69 6d 70 6c 65 20 73 69 6c 6c 79 2e it simple silly.
6b70: 0a 0a 20 20 20 20 28 74 77 69 6b 69 3a 77 69 6b .. (twiki:wik
6b80: 69 2d 73 65 74 2d 77 69 64 21 20 20 77 69 6b 69 i-set-wid! wiki
6b90: 64 61 74 20 77 69 64 29 0a 20 20 20 20 28 74 77 dat wid). (tw
6ba0: 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 6b 65 79 iki:wiki-set-key
6bb0: 21 20 20 77 69 6b 69 64 61 74 20 74 6b 65 79 29 ! wikidat tkey)
6bc0: 0a 20 20 20 20 28 74 77 69 6b 69 3a 77 69 6b 69 . (twiki:wiki
6bd0: 2d 73 65 74 2d 6e 61 6d 65 21 20 77 69 6b 69 64 -set-name! wikid
6be0: 61 74 20 6e 61 6d 65 29 0a 20 20 20 20 28 74 77 at name). (tw
6bf0: 69 6b 69 3a 77 69 6b 69 2d 73 65 74 2d 64 62 68 iki:wiki-set-dbh
6c00: 21 20 20 77 69 6b 69 64 61 74 20 74 64 62 29 0a ! wikidat tdb).
6c10: 20 20 20 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d (twiki:wiki-
6c20: 73 65 74 2d 70 65 72 6d 73 21 20 77 69 6b 69 64 set-perms! wikid
6c30: 61 74 20 70 65 72 6d 73 29 0a 0a 20 20 20 20 3b at perms).. ;
6c40: 3b 20 28 73 3a 6c 6f 67 20 22 65 64 69 74 2d 74 ; (s:log "edit-t
6c50: 6d 65 6e 75 2d 69 64 3a 20 22 20 65 64 69 74 2d menu-id: " edit-
6c60: 74 6d 65 6e 75 2d 69 64 20 22 20 65 64 69 74 2d tmenu-id " edit-
6c70: 74 69 64 64 6c 65 72 3a 20 22 20 65 64 69 74 2d tiddler: " edit-
6c80: 74 69 64 64 6c 65 72 29 0a 0a 20 20 20 20 3b 3b tiddler).. ;;
6c90: 20 48 61 6e 64 6c 65 20 6f 74 68 65 72 20 55 52 Handle other UR
6ca0: 49 20 63 6f 6d 6d 61 6e 64 73 20 68 65 72 65 0a I commands here.
6cb0: 20 20 20 20 28 69 66 20 28 73 3a 67 65 74 2d 70 (if (s:get-p
6cc0: 61 72 61 6d 20 22 63 61 6e 63 65 6c 5f 74 65 64 aram "cancel_ted
6cd0: 69 74 22 29 20 3b 3b 20 64 6f 65 73 6e 27 74 20 it") ;; doesn't
6ce0: 6d 61 74 74 65 72 20 77 68 69 63 68 20 74 69 64 matter which tid
6cf0: 64 6c 65 72 20 2d 20 6a 75 73 74 20 75 73 65 20 dler - just use
6d00: 74 68 69 73 20 74 6f 20 63 61 6e 63 65 6c 20 61 this to cancel a
6d10: 6e 79 20 65 64 69 74 0a 09 28 62 65 67 69 6e 0a ny edit..(begin.
6d20: 09 20 20 28 73 3a 64 65 6c 21 20 28 63 6f 6e 63 . (s:del! (conc
6d30: 20 22 43 55 52 52 45 4e 54 5f 54 57 49 44 4c 45 "CURRENT_TWIDLE
6d40: 52 5f 55 4e 44 45 52 5f 45 44 49 54 3a 22 20 77 R_UNDER_EDIT:" w
6d50: 69 64 29 29 0a 09 20 20 28 73 65 74 21 20 65 64 id)).. (set! ed
6d60: 69 74 2d 74 69 64 64 6c 65 72 20 23 66 29 0a 09 it-tiddler #f)..
6d70: 20 20 28 73 65 74 21 20 74 6e 75 6d 65 64 69 74 (set! tnumedit
6d80: 20 23 66 29 0a 09 20 20 28 73 65 74 21 20 76 69 #f).. (set! vi
6d90: 65 77 2d 74 69 64 64 6c 65 72 20 23 66 29 0a 09 ew-tiddler #f)..
6da0: 20 20 28 74 77 69 6b 69 3a 6e 6f 72 6d 61 6c 69 (twiki:normali
6db0: 7a 65 2d 63 75 72 72 65 6e 74 2d 74 77 69 64 64 ze-current-twidd
6dc0: 6c 65 72 73 20 74 64 62 20 77 69 64 29 0a 09 20 lers tdb wid)..
6dd0: 20 28 69 66 20 28 73 3a 67 65 74 20 63 76 61 72 (if (s:get cvar
6de0: 29 0a 09 20 20 20 20 20 20 28 73 65 74 21 20 74 ).. (set! t
6df0: 64 6c 6e 75 6d 73 20 28 6d 61 70 20 73 74 72 69 dlnums (map stri
6e00: 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 73 74 72 69 ng->number (stri
6e10: 6e 67 2d 73 70 6c 69 74 20 28 73 3a 67 65 74 20 ng-split (s:get
6e20: 63 76 61 72 29 20 22 2c 22 29 29 29 29 29 29 0a cvar) ",")))))).
6e30: 20 20 20 20 28 69 66 20 28 73 3a 67 65 74 2d 70 (if (s:get-p
6e40: 61 72 61 6d 20 22 64 65 6c 65 74 65 5f 74 69 64 aram "delete_tid
6e50: 64 6c 65 72 22 29 20 27 28 29 29 0a 20 20 20 20 dler") '()).
6e60: 3b 3b 20 28 74 77 69 6b 69 3a 64 65 6c 65 74 65 ;; (twiki:delete
6e70: 5f 74 69 64 64 6c 65 72 20 74 64 62 20 77 69 64 _tiddler tdb wid
6e80: 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 (string->number
6e90: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 64 (s:get-param "d
6ea0: 65 6c 65 74 65 5f 74 69 64 64 6c 65 72 22 29 29 elete_tiddler"))
6eb0: 29 29 0a 0a 20 20 20 20 28 73 3a 73 65 74 21 20 )).. (s:set!
6ec0: 22 54 57 49 4b 49 5f 4b 45 59 22 20 74 6b 65 79 "TWIKI_KEY" tkey
6ed0: 29 20 3b 3b 20 74 68 69 73 20 6d 65 63 68 61 6e ) ;; this mechan
6ee0: 69 73 6d 20 77 69 6c 6c 20 66 61 69 6c 20 66 6f ism will fail fo
6ef0: 72 20 68 69 65 72 61 72 63 68 69 61 6c 20 74 77 r hierarchial tw
6f00: 69 6b 69 73 0a 20 20 20 20 3b 3b 20 6f 76 65 72 ikis. ;; over
6f10: 72 69 64 65 20 74 68 65 20 74 77 69 64 64 6c 65 ride the twiddle
6f20: 72 20 74 6f 20 65 64 69 74 20 77 68 65 6e 20 65 r to edit when e
6f30: 64 69 74 69 6e 67 20 4d 61 69 6e 4d 65 6e 75 0a diting MainMenu.
6f40: 20 20 20 20 28 69 66 20 65 64 69 74 2d 74 69 64 (if edit-tid
6f50: 64 6c 65 72 0a 09 28 62 65 67 69 6e 0a 09 20 20 dler..(begin..
6f60: 28 73 65 74 21 20 74 6e 75 6d 65 64 69 74 20 28 (set! tnumedit (
6f70: 74 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 twiki:tiddler-ge
6f80: 74 2d 69 64 20 65 64 69 74 2d 74 69 64 64 6c 65 t-id edit-tiddle
6f90: 72 29 29 0a 09 20 20 28 73 3a 73 65 74 21 20 27 r)).. (s:set! '
6fa0: 74 77 69 6b 69 5f 74 69 74 6c 65 20 28 74 77 69 twiki_title (twi
6fb0: 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 2d 6e ki:tiddler-get-n
6fc0: 61 6d 65 20 65 64 69 74 2d 74 69 64 64 6c 65 72 ame edit-tiddler
6fd0: 29 29 0a 09 20 20 28 73 3a 73 65 74 21 20 27 74 )).. (s:set! 't
6fe0: 77 69 6b 69 5f 62 6f 64 79 20 20 28 74 77 69 6b wiki_body (twik
6ff0: 69 3a 67 65 74 2d 64 61 74 20 74 64 62 20 28 74 i:get-dat tdb (t
7000: 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 wiki:tiddler-get
7010: 2d 64 61 74 2d 69 64 20 65 64 69 74 2d 74 69 64 -dat-id edit-tid
7020: 64 6c 65 72 29 29 29 29 29 0a 20 20 20 20 28 69 dler))))). (i
7030: 66 20 76 69 65 77 2d 74 69 64 64 6c 65 72 0a 09 f view-tiddler..
7040: 28 62 65 67 69 6e 0a 09 20 20 28 73 65 74 21 20 (begin.. (set!
7050: 74 6e 75 6d 76 69 65 77 20 28 74 77 69 6b 69 3a tnumview (twiki:
7060: 74 69 64 64 6c 65 72 2d 67 65 74 2d 69 64 20 76 tiddler-get-id v
7070: 69 65 77 2d 74 69 64 64 6c 65 72 29 29 29 29 0a iew-tiddler)))).
7080: 20 20 20 20 0a 20 20 20 20 3b 3b 20 4e 4f 57 20 . ;; NOW
7090: 57 48 41 54 20 46 4f 52 20 56 49 45 57 20 2d 20 WHAT FOR VIEW -
70a0: 66 69 78 20 74 68 65 20 6c 69 6e 6b 73 2c 20 61 fix the links, a
70b0: 64 64 20 74 6f 20 74 64 6c 73 74 0a 0a 0a 20 20 dd to tdlst...
70c0: 20 20 28 69 66 20 65 64 69 74 2d 74 6d 65 6e 75 (if edit-tmenu
70d0: 2d 69 64 20 20 20 28 73 65 74 21 20 74 6e 75 6d -id (set! tnum
70e0: 65 64 69 74 20 65 64 69 74 2d 74 6d 65 6e 75 2d edit edit-tmenu-
70f0: 69 64 29 29 0a 20 20 20 20 28 69 66 20 74 6e 75 id)). (if tnu
7100: 6d 65 64 69 74 20 28 73 65 74 21 20 74 64 6c 6e medit (set! tdln
7110: 75 6d 73 20 28 63 6f 6e 73 20 74 6e 75 6d 65 64 ums (cons tnumed
7120: 69 74 20 74 64 6c 6e 75 6d 73 29 29 29 0a 20 20 it tdlnums))).
7130: 20 20 28 69 66 20 74 6e 75 6d 76 69 65 77 20 28 (if tnumview (
7140: 73 65 74 21 20 74 64 6c 6e 75 6d 73 20 28 63 6f set! tdlnums (co
7150: 6e 73 20 74 6e 75 6d 76 69 65 77 20 74 64 6c 6e ns tnumview tdln
7160: 75 6d 73 29 29 29 0a 20 20 20 20 28 73 65 74 21 ums))). (set!
7170: 20 74 64 6c 72 73 20 28 74 77 69 6b 69 3a 67 65 tdlrs (twiki:ge
7180: 74 2d 74 69 64 64 6c 65 72 73 2d 62 79 2d 6e 75 t-tiddlers-by-nu
7190: 6d 20 74 64 62 20 77 69 64 20 74 64 6c 6e 75 6d m tdb wid tdlnum
71a0: 73 29 29 0a 0a 20 20 20 20 3b 3b 20 72 65 6d 6f s)).. ;; remo
71b0: 76 65 20 74 64 6c 72 73 20 66 72 6f 6d 20 74 68 ve tdlrs from th
71c0: 65 20 6c 69 73 74 20 69 66 20 63 6c 6f 73 65 5f e list if close_
71d0: 74 69 64 64 6c 65 72 20 63 61 6c 6c 65 64 0a 20 tiddler called.
71e0: 20 20 20 28 69 66 20 28 73 3a 67 65 74 2d 70 61 (if (s:get-pa
71f0: 72 61 6d 20 22 63 6c 6f 73 65 5f 74 69 64 64 6c ram "close_tiddl
7200: 65 72 22 29 0a 09 28 73 65 74 21 20 74 64 6c 72 er")..(set! tdlr
7210: 73 20 28 6c 65 74 20 28 28 74 6e 75 6d 20 28 73 s (let ((tnum (s
7220: 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 73 tring->number (s
7230: 3a 67 65 74 2d 70 61 72 61 6d 20 22 63 6c 6f 73 :get-param "clos
7240: 65 5f 74 69 64 64 6c 65 72 22 29 29 29 29 0a 09 e_tiddler"))))..
7250: 09 20 20 20 20 20 20 28 72 65 6d 6f 76 65 20 28 . (remove (
7260: 6c 61 6d 62 64 61 20 28 74 29 0a 09 09 09 09 28 lambda (t).....(
7270: 65 71 75 61 6c 3f 20 28 74 77 69 6b 69 3a 74 69 equal? (twiki:ti
7280: 64 64 6c 65 72 2d 67 65 74 2d 69 64 20 74 29 20 ddler-get-id t)
7290: 74 6e 75 6d 29 29 0a 09 09 09 20 20 20 20 20 20 tnum))....
72a0: 74 64 6c 72 73 29 29 29 29 0a 0a 20 20 20 20 3b tdlrs)))).. ;
72b0: 3b 20 72 65 6d 6f 76 65 20 61 6c 6c 20 6f 74 68 ; remove all oth
72c0: 65 72 73 20 69 66 20 63 6c 6f 73 65 5f 6f 74 68 ers if close_oth
72d0: 65 72 5f 74 69 64 64 6c 65 72 73 20 63 61 6c 6c er_tiddlers call
72e0: 65 64 0a 20 20 20 20 28 69 66 20 28 73 3a 67 65 ed. (if (s:ge
72f0: 74 2d 70 61 72 61 6d 20 22 63 6c 6f 73 65 5f 6f t-param "close_o
7300: 74 68 65 72 5f 74 69 64 64 6c 65 72 73 22 29 0a ther_tiddlers").
7310: 09 28 73 65 74 21 20 74 64 6c 72 73 20 28 6c 65 .(set! tdlrs (le
7320: 74 20 28 28 74 6e 75 6d 20 28 73 74 72 69 6e 67 t ((tnum (string
7330: 2d 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 74 2d ->number (s:get-
7340: 70 61 72 61 6d 20 22 63 6c 6f 73 65 5f 6f 74 68 param "close_oth
7350: 65 72 5f 74 69 64 64 6c 65 72 73 22 29 29 29 29 er_tiddlers"))))
7360: 0a 09 09 20 20 20 20 20 20 28 72 65 6d 6f 76 65 ... (remove
7370: 20 28 6c 61 6d 62 64 61 20 28 74 29 0a 09 09 09 (lambda (t)....
7380: 09 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 28 74 .(not (equal? (t
7390: 77 69 6b 69 3a 74 69 64 64 6c 65 72 2d 67 65 74 wiki:tiddler-get
73a0: 2d 69 64 20 74 29 20 74 6e 75 6d 29 29 29 0a 09 -id t) tnum)))..
73b0: 09 09 20 20 20 20 20 20 74 64 6c 72 73 29 29 29 .. tdlrs)))
73c0: 29 0a 20 20 20 20 0a 20 20 20 20 28 73 3a 73 65 ). . (s:se
73d0: 74 21 20 63 76 61 72 20 28 74 77 69 6b 69 3a 6d t! cvar (twiki:m
73e0: 61 6b 65 2d 74 69 64 64 6c 65 72 2d 6c 69 73 74 ake-tiddler-list
73f0: 20 74 64 6c 72 73 29 29 0a 20 20 20 20 28 69 66 tdlrs)). (if
7400: 20 74 6e 75 6d 65 64 69 74 20 0a 09 28 73 3a 73 tnumedit ..(s:s
7410: 65 74 21 20 63 76 61 72 2d 65 64 20 74 6e 75 6d et! cvar-ed tnum
7420: 65 64 69 74 29 0a 09 28 73 3a 64 65 6c 21 20 63 edit)..(s:del! c
7430: 76 61 72 2d 65 64 29 29 0a 0a 20 20 20 20 3b 3b var-ed)).. ;;
7440: 20 6d 75 73 74 20 68 61 76 65 20 61 20 4d 61 69 must have a Mai
7450: 6e 4d 65 6e 75 20 74 69 64 64 6c 65 72 20 62 79 nMenu tiddler by
7460: 20 6e 6f 77 0a 20 20 20 20 28 69 66 20 28 6e 75 now. (if (nu
7470: 6c 6c 3f 20 6c 6d 65 6e 75 29 0a 09 28 62 65 67 ll? lmenu)..(beg
7480: 69 6e 0a 09 20 20 28 74 77 69 6b 69 3a 73 61 76 in.. (twiki:sav
7490: 65 2d 74 69 64 64 6c 65 72 20 74 64 62 20 22 4d e-tiddler tdb "M
74a0: 61 69 6e 4d 65 6e 75 22 20 22 22 20 22 22 20 77 ainMenu" "" "" w
74b0: 69 64 20 28 74 77 69 6b 69 3a 67 65 74 2d 69 64 id (twiki:get-id
74c0: 29 29 0a 09 20 20 28 73 65 74 21 20 6c 6d 65 6e )).. (set! lmen
74d0: 75 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 u (twiki:get-tid
74e0: 64 6c 65 72 73 20 74 64 62 20 77 69 64 20 28 6c dlers tdb wid (l
74f0: 69 73 74 20 22 4d 61 69 6e 4d 65 6e 75 22 29 29 ist "MainMenu"))
7500: 29 29 29 0a 20 20 20 20 0a 20 20 20 20 3b 3b 20 ))). . ;;
7510: 67 65 74 20 74 68 65 20 74 69 64 64 6c 65 72 73 get the tiddlers
7520: 20 66 72 6f 6d 20 74 68 65 20 64 62 20 6e 6f 77 from the db now
7530: 0a 20 20 20 20 28 73 65 74 21 20 72 65 73 75 6c . (set! resul
7540: 74 0a 09 20 20 28 73 3a 74 61 62 6c 65 0a 09 20 t.. (s:table..
7550: 20 20 3b 3b 20 3b 3b 20 41 20 68 65 61 64 65 72 ;; ;; A header
7560: 20 72 6f 77 20 4d 61 69 6e 4d 65 6e 75 20 20 20 row MainMenu
7570: 57 69 6b 69 4e 61 6d 65 20 20 20 20 4f 74 68 65 WikiName Othe
7580: 72 0a 09 20 20 20 3b 3b 20 28 73 3a 74 72 0a 09 r.. ;; (s:tr..
7590: 20 20 20 3b 3b 20 20 28 73 3a 74 64 0a 09 20 20 ;; (s:td..
75a0: 20 3b 3b 20 20 20 28 6c 65 74 20 28 28 6d 61 69 ;; (let ((mai
75b0: 6e 2d 6d 65 6e 75 2d 74 6e 75 6d 20 20 28 74 77 n-menu-tnum (tw
75c0: 69 6b 69 3a 74 69 64 64 6c 65 72 2d 6e 61 6d 65 iki:tiddler-name
75d0: 2d 3e 69 64 20 74 64 62 20 22 4d 61 69 6e 4d 65 ->id tdb "MainMe
75e0: 6e 75 22 29 29 29 0a 09 20 20 20 3b 3b 20 20 20 nu"))).. ;;
75f0: 20 20 28 69 66 20 65 64 69 74 2d 74 6d 65 6e 75 (if edit-tmenu
7600: 2d 69 64 0a 09 20 20 20 3b 3b 20 20 20 20 20 20 -id.. ;;
7610: 20 20 20 22 4d 61 69 6e 4d 65 6e 75 22 0a 09 20 "MainMenu"..
7620: 20 20 3b 3b 20 20 20 20 20 20 20 20 20 28 73 3a ;; (s:
7630: 61 20 22 4d 61 69 6e 4d 65 6e 75 22 20 27 68 72 a "MainMenu" 'hr
7640: 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 28 74 ef (s:link-to (t
7650: 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d 62 61 wiki:get-link-ba
7660: 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 20 27 ck-to-current) '
7670: 65 64 69 74 5f 74 6d 65 6e 75 20 6d 61 69 6e 2d edit_tmenu main-
7680: 6d 65 6e 75 2d 74 6e 75 6d 29 29 29 29 29 0a 09 menu-tnum)))))..
7690: 20 20 20 3b 3b 20 20 28 73 3a 74 64 20 28 74 77 ;; (s:td (tw
76a0: 69 6b 69 3a 6b 65 79 2d 3e 66 6e 61 6d 65 20 74 iki:key->fname t
76b0: 6b 65 79 29 29 20 20 20 20 0a 09 20 20 20 3b 3b key)) .. ;;
76c0: 20 20 28 73 3a 74 64 20 22 22 29 29 0a 09 20 20 (s:td ""))..
76d0: 20 28 73 3a 74 72 0a 09 20 20 20 20 3b 3b 20 54 (s:tr.. ;; T
76e0: 68 65 20 6d 65 6e 75 20 63 6f 6c 75 6d 6e 20 28 he menu column (
76f0: 6d 75 73 74 20 64 6f 20 61 6c 6c 20 74 68 69 73 must do all this
7700: 20 77 69 74 68 20 63 73 73 20 73 6f 6d 65 20 74 with css some t
7710: 69 6d 65 29 0a 09 20 20 20 20 3b 3b 20 4a 75 6c ime).. ;; Jul
7720: 79 20 35 2c 20 32 30 31 30 2c 20 61 74 74 65 6d y 5, 2010, attem
7730: 70 74 69 6e 67 20 74 6f 20 73 77 69 74 63 68 20 pting to switch
7740: 74 6f 20 61 20 74 6f 70 20 6d 65 6e 75 0a 09 20 to a top menu..
7750: 20 20 20 3b 3b 20 28 73 3a 74 64 20 27 63 6c 61 ;; (s:td 'cla
7760: 73 73 20 22 63 6f 6c 31 2d 74 69 64 64 6c 65 72 ss "col1-tiddler
7770: 22 20 28 74 77 69 6b 69 3a 76 69 65 77 2d 74 69 " (twiki:view-ti
7780: 64 64 6c 65 72 20 74 64 62 20 20 74 6b 65 79 20 ddler tdb tkey
7790: 77 69 64 20 28 63 61 72 20 6c 6d 65 6e 75 29 20 wid (car lmenu)
77a0: 77 69 6b 69 64 61 74 29 29 0a 09 20 20 20 20 28 wikidat)).. (
77b0: 73 3a 74 64 20 27 63 6c 61 73 73 20 22 63 6f 6c s:td 'class "col
77c0: 32 2d 74 69 64 64 6c 65 72 22 20 28 74 77 69 6b 2-tiddler" (twik
77d0: 69 3a 76 69 65 77 2d 74 69 64 64 6c 65 72 20 74 i:view-tiddler t
77e0: 64 62 20 20 74 6b 65 79 20 77 69 64 20 28 63 61 db tkey wid (ca
77f0: 72 20 6c 6d 65 6e 75 29 20 77 69 6b 69 64 61 74 r lmenu) wikidat
7800: 29 20 27 63 6f 6c 73 70 61 6e 20 22 32 22 29 29 ) 'colspan "2"))
7810: 0a 09 20 20 20 28 73 3a 74 72 0a 09 20 20 20 20 .. (s:tr..
7820: 28 73 3a 74 64 20 27 63 6c 61 73 73 20 22 63 6f (s:td 'class "co
7830: 6c 32 2d 74 69 64 64 6c 65 72 22 20 0a 09 09 20 l2-tiddler" ...
7840: 20 3b 3b 20 74 68 69 73 20 69 73 20 70 72 6f 62 ;; this is prob
7850: 61 62 6c 79 20 6e 6f 74 20 6e 65 65 64 65 64 20 ably not needed
7860: 61 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 72 as there is no r
7870: 65 61 73 6f 6e 20 74 6f 20 63 72 65 61 74 65 20 eason to create
7880: 74 69 64 64 6c 65 72 73 20 74 68 69 73 20 77 61 tiddlers this wa
7890: 79 0a 09 09 20 20 3b 3b 20 28 69 66 20 28 65 71 y... ;; (if (eq
78a0: 3f 20 74 6e 75 6d 65 64 69 74 20 2d 31 29 28 74 ? tnumedit -1)(t
78b0: 77 69 6b 69 3a 65 64 69 74 2d 74 69 64 64 6c 65 wiki:edit-tiddle
78c0: 72 20 74 64 62 20 74 6b 65 79 20 77 69 64 20 74 r tdb tkey wid t
78d0: 6e 75 6d 65 64 69 74 29 20 27 28 29 29 0a 09 09 numedit) '())...
78e0: 20 20 3b 3b 20 69 6e 73 65 72 74 20 74 68 65 20 ;; insert the
78f0: 70 69 63 74 75 72 65 20 65 64 69 74 6f 72 20 77 picture editor w
7900: 69 6e 64 6f 77 20 69 66 20 65 6e 61 62 6c 65 64 indow if enabled
7910: 0a 09 09 20 20 28 69 66 20 28 65 71 75 61 6c 3f ... (if (equal?
7920: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 (s:get-param "t
7930: 77 69 6b 69 5f 6d 61 69 6e 74 22 29 20 22 32 22 wiki_maint") "2"
7940: 29 28 74 77 69 6b 69 3a 70 69 63 5f 6d 67 6d 74 )(twiki:pic_mgmt
7950: 20 74 64 62 20 77 69 64 20 74 6b 65 79 29 20 27 tdb wid tkey) '
7960: 28 29 29 0a 09 09 20 20 28 69 66 20 28 65 71 75 ())... (if (equ
7970: 61 6c 3f 20 28 73 3a 67 65 74 2d 70 61 72 61 6d al? (s:get-param
7980: 20 22 74 77 69 6b 69 5f 6d 61 69 6e 74 22 29 20 "twiki_maint")
7990: 22 34 22 29 28 74 77 69 6b 69 3a 68 65 6c 70 20 "4")(twiki:help
79a0: 31 29 20 27 28 29 29 0a 09 09 20 20 28 69 66 20 1) '())... (if
79b0: 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 74 64 6c 72 (not (null? tdlr
79c0: 73 29 29 0a 09 09 20 20 20 20 20 20 28 6d 61 70 s))... (map
79d0: 20 28 6c 61 6d 62 64 61 20 28 74 64 6c 72 29 0a (lambda (tdlr).
79e0: 09 09 09 20 20 20 20 20 28 6c 65 74 20 28 28 74 ... (let ((t
79f0: 6e 75 6d 20 20 28 74 77 69 6b 69 3a 74 69 64 64 num (twiki:tidd
7a00: 6c 65 72 2d 67 65 74 2d 69 64 20 74 64 6c 72 29 ler-get-id tdlr)
7a10: 29 29 0a 09 09 09 20 20 20 20 20 20 20 28 73 3a )).... (s:
7a20: 6c 6f 67 20 22 74 6e 75 6d 3a 20 22 20 74 6e 75 log "tnum: " tnu
7a30: 6d 20 22 20 74 6e 75 6d 65 64 69 74 3a 20 22 20 m " tnumedit: "
7a40: 74 6e 75 6d 65 64 69 74 29 0a 09 09 09 20 20 20 tnumedit)....
7a50: 20 20 20 20 28 69 66 20 28 61 6e 64 20 74 6e 75 (if (and tnu
7a60: 6d 65 64 69 74 20 28 6e 6f 74 20 74 65 64 69 74 medit (not tedit
7a70: 65 64 29 20 28 65 71 75 61 6c 3f 20 74 6e 75 6d ed) (equal? tnum
7a80: 65 64 69 74 20 74 6e 75 6d 29 29 0a 09 09 09 09 edit tnum)).....
7a90: 20 20 20 28 62 65 67 69 6e 0a 09 09 09 09 20 20 (begin.....
7aa0: 20 20 20 28 73 65 74 21 20 74 65 64 69 74 65 64 (set! tedited
7ab0: 20 23 74 29 20 3b 3b 20 6f 6e 6c 79 20 61 6c 6c #t) ;; only all
7ac0: 6f 77 20 65 64 69 74 69 6e 67 20 6f 6e 65 20 74 ow editing one t
7ad0: 69 64 64 6c 65 72 20 61 74 20 61 20 74 69 6d 65 iddler at a time
7ae0: 0a 09 09 09 09 20 20 20 20 20 28 74 77 69 6b 69 ..... (twiki
7af0: 3a 65 64 69 74 2d 74 69 64 64 6c 65 72 20 74 64 :edit-tiddler td
7b00: 62 20 74 6b 65 79 20 77 69 64 20 74 6e 75 6d 29 b tkey wid tnum)
7b10: 29 0a 09 09 09 09 20 20 20 28 74 77 69 6b 69 3a )..... (twiki:
7b20: 76 69 65 77 2d 74 69 64 64 6c 65 72 20 74 64 62 view-tiddler tdb
7b30: 20 20 74 6b 65 79 20 77 69 64 20 74 64 6c 72 20 tkey wid tdlr
7b40: 77 69 6b 69 64 61 74 29 29 29 29 0a 09 09 09 20 wikidat))))....
7b50: 20 20 74 64 6c 72 73 29 0a 09 09 20 20 20 20 20 tdlrs)...
7b60: 20 27 28 29 29 29 0a 09 20 20 20 20 28 73 3a 74 '())).. (s:t
7b70: 64 20 20 27 76 61 6c 69 67 6e 20 22 74 6f 70 22 d 'valign "top"
7b80: 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c 65 72 'class "tiddler
7b90: 2d 74 6f 70 22 20 28 74 77 69 6b 69 3a 6d 61 69 -top" (twiki:mai
7ba0: 6e 74 5f 61 72 65 61 20 74 64 62 20 77 69 64 20 nt_area tdb wid
7bb0: 74 6b 65 79 20 77 69 6b 69 64 61 74 29 29 29 29 tkey wikidat))))
7bc0: 29 0a 20 20 20 20 28 64 62 69 3a 63 6c 6f 73 65 ). (dbi:close
7bd0: 20 74 64 62 29 0a 20 20 20 20 72 65 73 75 6c 74 tdb). result
7be0: 29 29 0a 0a 3b 3b 20 73 68 6f 75 6c 64 20 64 6f ))..;; should do
7bf0: 20 61 20 73 69 6e 67 6c 65 20 6d 6f 72 65 20 65 a single more e
7c00: 66 66 69 63 69 65 6e 74 20 71 75 65 72 79 20 62 fficient query b
7c10: 75 74 20 74 68 69 73 20 69 73 20 67 6f 6f 64 20 ut this is good
7c20: 65 6e 6f 75 67 68 0a 28 64 65 66 69 6e 65 20 28 enough.(define (
7c30: 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 twiki:get-tiddle
7c40: 72 73 20 64 62 20 77 69 64 20 74 6e 61 6d 65 73 rs db wid tnames
7c50: 29 0a 20 20 28 61 70 70 6c 79 20 74 77 69 6b 69 ). (apply twiki
7c60: 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 2d 62 79 :get-tiddlers-by
7c70: 2d 6e 61 6d 65 20 64 62 20 77 69 64 20 74 6e 61 -name db wid tna
7c80: 6d 65 73 29 29 0a 3b 3b 20 20 20 28 6c 65 74 2a mes)).;; (let*
7c90: 20 28 28 74 64 6c 72 73 20 27 28 29 29 0a 3b 3b ((tdlrs '()).;;
7ca0: 20 09 20 3b 3b 20 28 63 6f 6e 6e 20 20 20 28 73 . ;; (conn (s
7cb0: 6c 6f 74 2d 72 65 66 20 73 3a 73 65 73 73 69 6f lot-ref s:sessio
7cc0: 6e 20 27 63 6f 6e 6e 29 29 0a 3b 3b 20 09 20 28 n 'conn)).;; . (
7cd0: 6e 61 6d 65 6c 73 74 20 28 63 6f 6e 63 20 22 28 namelst (conc "(
7ce0: 27 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 '" (string-inter
7cf0: 73 70 65 72 73 65 20 28 6d 61 70 20 63 6f 6e 63 sperse (map conc
7d00: 20 74 6e 61 6d 65 73 29 20 22 27 2c 27 22 29 20 tnames) "','")
7d10: 22 27 29 22 29 29 0a 3b 3b 20 09 20 28 71 72 79 "')")).;; . (qry
7d20: 20 20 20 20 20 28 63 6f 6e 63 20 74 77 69 6b 69 (conc twiki
7d30: 3a 74 69 64 64 6c 65 72 2d 73 65 6c 65 63 74 6f :tiddler-selecto
7d40: 72 20 22 20 57 48 45 52 45 20 74 2e 77 69 6b 69 r " WHERE t.wiki
7d50: 5f 69 64 3d 3f 20 41 4e 44 20 74 2e 69 64 20 49 _id=? AND t.id I
7d60: 4e 20 22 20 6e 61 6d 65 6c 73 74 20 22 3b 22 29 N " namelst ";")
7d70: 29 29 0a 3b 3b 20 20 20 20 20 3b 3b 20 28 70 72 )).;; ;; (pr
7d80: 69 6e 74 20 71 72 79 29 0a 3b 3b 20 20 20 20 20 int qry).;;
7d90: 28 64 62 69 3a 66 6f 72 2d 65 61 63 68 2d 72 6f (dbi:for-each-ro
7da0: 77 0a 3b 3b 20 20 20 20 20 20 28 6c 61 6d 62 64 w.;; (lambd
7db0: 61 20 28 72 6f 77 29 0a 3b 3b 20 20 20 20 20 20 a (row).;;
7dc0: 20 20 28 73 65 74 21 20 74 64 6c 72 73 20 28 63 (set! tdlrs (c
7dd0: 6f 6e 73 20 72 6f 77 20 74 64 6c 72 73 29 29 29 ons row tdlrs)))
7de0: 0a 3b 3b 20 20 20 20 20 20 64 62 20 71 72 79 20 .;; db qry
7df0: 77 69 64 29 0a 3b 3b 20 20 20 20 20 28 72 65 76 wid).;; (rev
7e00: 65 72 73 65 20 74 64 6c 72 73 29 29 29 20 3b 3b erse tdlrs))) ;;
7e10: 20 21 54 77 69 6b 69 5c 0a 0a 3b 3b 20 74 6c 73 !Twiki\..;; tls
7e20: 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 74 t is a list of t
7e30: 69 64 64 6c 65 72 20 6e 75 6d 73 0a 28 64 65 66 iddler nums.(def
7e40: 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 ine (twiki:get-t
7e50: 69 64 64 6c 65 72 73 2d 62 79 2d 6e 75 6d 20 64 iddlers-by-num d
7e60: 62 20 77 69 64 20 74 6c 73 74 29 0a 20 20 3b 3b b wid tlst). ;;
7e70: 20 28 73 3a 6c 6f 67 20 22 47 6f 74 20 74 6f 20 (s:log "Got to
7e80: 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 twiki:get-tiddle
7e90: 72 73 20 77 69 74 68 20 6b 65 79 73 3a 20 22 20 rs with keys: "
7ea0: 74 6c 73 74 20 22 20 61 6e 64 20 77 69 64 3a 20 tlst " and wid:
7eb0: 22 20 77 69 64 29 0a 20 20 3b 3b 20 73 65 6c 65 " wid). ;; sele
7ec0: 63 74 20 77 68 65 72 65 20 63 72 65 61 74 65 64 ct where created
7ed0: 5f 6f 6e 20 3c 20 73 6f 6d 65 64 61 74 65 20 6f _on < somedate o
7ee0: 72 64 65 72 20 62 79 20 63 72 65 61 74 65 64 5f rder by created_
7ef0: 6f 6e 20 64 65 73 63 20 6c 69 6d 69 74 20 31 0a on desc limit 1.
7f00: 20 20 28 6c 65 74 2a 20 28 28 74 64 6c 72 73 20 (let* ((tdlrs
7f10: 27 28 29 29 0a 09 20 28 74 6c 73 74 73 74 72 20 '()).. (tlststr
7f20: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 (string-interspe
7f30: 72 73 65 20 28 6d 61 70 20 6e 75 6d 62 65 72 2d rse (map number-
7f40: 3e 73 74 72 69 6e 67 20 74 6c 73 74 29 20 22 2c >string tlst) ",
7f50: 22 29 29 0a 09 20 28 61 6c 72 65 61 64 79 2d 67 ")).. (already-g
7f60: 6f 74 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 ot (make-hash-ta
7f70: 62 6c 65 29 29 0a 09 20 28 71 72 79 20 20 20 20 ble)).. (qry
7f80: 28 63 6f 6e 63 20 74 77 69 6b 69 3a 74 69 64 64 (conc twiki:tidd
7f90: 6c 65 72 2d 73 65 6c 65 63 74 6f 72 20 22 20 57 ler-selector " W
7fa0: 48 45 52 45 20 74 2e 77 69 6b 69 5f 69 64 3d 3f HERE t.wiki_id=?
7fb0: 20 41 4e 44 20 74 2e 69 64 20 49 4e 20 28 22 20 AND t.id IN ("
7fc0: 74 6c 73 74 73 74 72 20 22 29 20 4f 52 44 45 52 tlststr ") ORDER
7fd0: 20 42 59 20 63 72 65 61 74 65 64 5f 6f 6e 20 44 BY created_on D
7fe0: 45 53 43 3b 22 29 29 29 0a 09 3b 3b 20 28 63 6f ESC;")))..;; (co
7ff0: 6e 6e 20 20 20 28 73 6c 6f 74 2d 72 65 66 20 73 nn (slot-ref s
8000: 3a 73 65 73 73 69 6f 6e 20 27 63 6f 6e 6e 29 29 :session 'conn))
8010: 0a 20 20 20 20 3b 3b 20 28 70 72 69 6e 74 20 22 . ;; (print "
8020: 71 72 79 3a 20 22 20 71 72 79 29 0a 20 20 20 20 qry: " qry).
8030: 28 64 62 69 3a 66 6f 72 2d 65 61 63 68 2d 72 6f (dbi:for-each-ro
8040: 77 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 w. (lambda (
8050: 72 6f 77 29 0a 20 20 20 20 20 20 20 28 6c 65 74 row). (let
8060: 20 28 28 74 6e 61 6d 65 20 28 74 77 69 6b 69 3a ((tname (twiki:
8070: 74 69 64 64 6c 65 72 2d 67 65 74 2d 6e 61 6d 65 tiddler-get-name
8080: 20 72 6f 77 29 29 29 0a 09 20 28 69 66 20 28 6e row))).. (if (n
8090: 6f 74 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 ot (hash-table-r
80a0: 65 66 2f 64 65 66 61 75 6c 74 20 61 6c 72 65 61 ef/default alrea
80b0: 64 79 2d 67 6f 74 20 74 6e 61 6d 65 20 23 66 29 dy-got tname #f)
80c0: 29 0a 09 20 20 20 20 20 28 62 65 67 69 6e 0a 09 ).. (begin..
80d0: 20 20 20 20 20 20 20 28 73 65 74 21 20 74 64 6c (set! tdl
80e0: 72 73 20 28 63 6f 6e 73 20 72 6f 77 20 74 64 6c rs (cons row tdl
80f0: 72 73 29 29 0a 09 20 20 20 20 20 20 20 28 68 61 rs)).. (ha
8100: 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 61 6c sh-table-set! al
8110: 72 65 61 64 79 2d 67 6f 74 20 74 6e 61 6d 65 20 ready-got tname
8120: 23 74 29 29 29 29 29 0a 20 20 20 20 20 64 62 20 #t))))). db
8130: 71 72 79 20 77 69 64 29 0a 20 20 20 20 28 69 66 qry wid). (if
8140: 20 28 6e 75 6c 6c 3f 20 74 64 6c 72 73 29 20 74 (null? tdlrs) t
8150: 64 6c 72 73 20 28 72 65 76 65 72 73 65 20 74 64 dlrs (reverse td
8160: 6c 72 73 29 29 29 29 20 3b 3b 20 21 54 77 69 6b lrs)))) ;; !Twik
8170: 69 5c 6e 54 69 74 6c 65 2c 20 70 69 63 74 75 72 i\nTitle, pictur
8180: 65 73 2c 20 65 74 63 2e 5c 6e 7b 7b 7b 5c 6e 43 es, etc.\n{{{\nC
8190: 6f 64 65 5c 6e 7d 7d 7d 5c 6e 5b 5b 6c 69 6e 6b ode\n}}}\n[[link
81a0: 73 5d 5d 5c 6e 7c 74 61 62 6c 65 7c 6f 66 7c 73 s]]\n|table|of|s
81b0: 74 75 66 66 7c 5c 6e 7c 6d 6f 72 65 7c 73 74 75 tuff|\n|more|stu
81c0: 66 66 7c 68 65 72 65 7c 5c 6e 22 29 29 0a 0a 3b ff|here|\n"))..;
81d0: 3b 20 77 69 64 20 3d 20 77 69 6b 69 20 69 64 0a ; wid = wiki id.
81e0: 3b 3b 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 ;; returns a lis
81f0: 74 20 6f 66 20 74 77 69 6b 69 3a 74 69 64 64 6c t of twiki:tiddl
8200: 65 72 73 0a 28 64 65 66 69 6e 65 20 28 74 77 69 ers.(define (twi
8210: 6b 69 3a 67 65 74 2d 74 69 64 64 6c 65 72 73 2d ki:get-tiddlers-
8220: 62 79 2d 6e 61 6d 65 20 74 64 62 20 77 69 64 20 by-name tdb wid
8230: 2e 20 6e 61 6d 65 73 29 0a 20 20 28 6c 65 74 20 . names). (let
8240: 28 28 74 64 6c 72 73 20 27 28 29 29 29 0a 20 20 ((tdlrs '())).
8250: 20 20 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d (for-each (lam
8260: 62 64 61 20 28 6e 61 6d 65 29 0a 09 09 28 6c 65 bda (name)...(le
8270: 74 20 28 28 74 64 6c 72 20 28 74 77 69 6b 69 3a t ((tdlr (twiki:
8280: 67 65 74 2d 74 69 64 64 6c 65 72 2d 62 79 2d 6e get-tiddler-by-n
8290: 61 6d 65 20 74 64 62 20 77 69 64 20 6e 61 6d 65 ame tdb wid name
82a0: 29 29 29 0a 09 09 20 20 28 69 66 20 74 64 6c 72 )))... (if tdlr
82b0: 20 28 73 65 74 21 20 74 64 6c 72 73 20 28 63 6f (set! tdlrs (co
82c0: 6e 73 20 74 64 6c 72 20 74 64 6c 72 73 29 29 29 ns tdlr tdlrs)))
82d0: 29 29 0a 09 20 20 20 20 20 20 6e 61 6d 65 73 29 )).. names)
82e0: 0a 20 20 20 20 28 72 65 76 65 72 73 65 20 74 64 . (reverse td
82f0: 6c 72 73 29 29 29 0a 3b 3b 20 77 69 74 68 20 74 lrs))).;; with t
8300: 68 65 20 72 69 67 68 74 20 71 75 65 72 79 20 69 he right query i
8310: 74 20 73 68 6f 75 6c 64 20 62 65 20 70 6f 73 73 t should be poss
8320: 69 62 6c 65 20 74 6f 20 64 6f 20 74 68 69 73 20 ible to do this
8330: 6d 75 63 68 20 66 61 73 74 65 72 20 61 70 70 72 much faster appr
8340: 6f 61 63 68 20 66 6f 72 20 74 77 69 6b 69 3a 67 oach for twiki:g
8350: 65 74 2d 74 69 64 64 6c 65 72 73 2d 62 79 2d 6e et-tiddlers-by-n
8360: 61 6d 65 0a 3b 3b 20 20 20 28 6c 65 74 20 28 28 ame.;; (let ((
8370: 74 64 6c 72 73 20 27 28 29 29 0a 3b 3b 20 09 28 tdlrs '()).;; .(
8380: 6e 61 6d 65 6c 73 74 20 28 63 6f 6e 63 20 22 28 namelst (conc "(
8390: 27 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 '" (string-inter
83a0: 73 70 65 72 73 65 20 6e 61 6d 65 73 20 22 27 2c sperse names "',
83b0: 27 22 29 20 22 27 29 22 29 29 29 0a 3b 3b 20 20 '") "')"))).;;
83c0: 20 20 20 28 64 62 69 3a 66 6f 72 2d 65 61 63 68 (dbi:for-each
83d0: 2d 72 6f 77 0a 3b 3b 20 20 20 20 20 20 28 6c 61 -row.;; (la
83e0: 6d 62 64 61 20 28 72 6f 77 29 0a 3b 3b 20 20 20 mbda (row).;;
83f0: 20 20 20 20 20 28 73 65 74 21 20 74 64 6c 72 73 (set! tdlrs
8400: 20 28 63 6f 6e 73 20 72 6f 77 20 74 64 6c 72 73 (cons row tdlrs
8410: 29 29 29 0a 3b 3b 20 20 20 20 20 20 74 64 62 0a ))).;; tdb.
8420: 3b 3b 20 20 20 20 20 20 28 63 6f 6e 63 20 74 77 ;; (conc tw
8430: 69 6b 69 3a 74 69 64 64 6c 65 72 2d 73 65 6c 65 iki:tiddler-sele
8440: 63 74 6f 72 20 22 20 57 48 45 52 45 20 74 2e 77 ctor " WHERE t.w
8450: 69 6b 69 5f 69 64 3d 3f 20 41 4e 44 20 74 2e 6e iki_id=? AND t.n
8460: 61 6d 65 20 49 4e 20 22 20 6e 61 6d 65 6c 73 74 ame IN " namelst
8470: 29 20 77 69 64 29 0a 3b 3b 20 20 20 20 20 28 72 ) wid).;; (r
8480: 65 76 65 72 73 65 20 74 64 6c 72 73 29 29 29 0a everse tdlrs))).
8490: 0a 3b 3b 20 67 65 74 20 74 68 65 20 74 69 64 64 .;; get the tidd
84a0: 6c 65 72 20 77 69 74 68 20 74 68 65 20 67 69 76 ler with the giv
84b0: 65 6e 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 en name and the
84c0: 6d 61 78 20 64 61 74 65 0a 28 64 65 66 69 6e 65 max date.(define
84d0: 20 28 74 77 69 6b 69 3a 67 65 74 2d 74 69 64 64 (twiki:get-tidd
84e0: 6c 65 72 2d 62 79 2d 6e 61 6d 65 20 74 64 62 20 ler-by-name tdb
84f0: 77 69 64 20 6e 61 6d 65 29 0a 20 20 28 64 62 69 wid name). (dbi
8500: 3a 67 65 74 2d 6f 6e 65 2d 72 6f 77 20 74 64 62 :get-one-row tdb
8510: 20 28 63 6f 6e 63 20 74 77 69 6b 69 3a 74 69 64 (conc twiki:tid
8520: 64 6c 65 72 2d 73 65 6c 65 63 74 6f 72 20 22 20 dler-selector "
8530: 57 48 45 52 45 20 74 2e 77 69 6b 69 5f 69 64 3d WHERE t.wiki_id=
8540: 3f 20 41 4e 44 20 74 2e 6e 61 6d 65 3d 3f 20 4f ? AND t.name=? O
8550: 52 44 45 52 20 42 59 20 63 72 65 61 74 65 64 5f RDER BY created_
8560: 6f 6e 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b on DESC LIMIT 1;
8570: 22 29 20 77 69 64 20 6e 61 6d 65 29 29 0a 0a 28 ") wid name))..(
8580: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 74 69 define (twiki:ti
8590: 64 64 6c 65 72 2d 6e 61 6d 65 2d 3e 69 64 20 64 ddler-name->id d
85a0: 62 20 74 6e 61 6d 65 29 0a 20 20 28 64 62 69 3a b tname). (dbi:
85b0: 67 65 74 2d 6f 6e 65 20 64 62 20 22 53 45 4c 45 get-one db "SELE
85c0: 43 54 20 69 64 20 46 52 4f 4d 20 74 69 64 64 6c CT id FROM tiddl
85d0: 65 72 73 20 57 48 45 52 45 20 6e 61 6d 65 3d 3f ers WHERE name=?
85e0: 3b 22 20 74 6e 61 6d 65 29 29 0a 0a 3b 3b 3d 3d ;" tname))..;;==
85f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8630: 3d 3d 3d 3d 0a 3b 3b 20 74 77 69 6b 69 20 74 65 ====.;; twiki te
8640: 78 74 20 66 6f 72 6d 61 74 69 6e 67 2c 20 70 61 xt formating, pa
8650: 72 73 69 6e 67 20 61 6e 64 20 64 69 73 70 6c 61 rsing and displa
8660: 79 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d y.;;============
8670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
86a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 74 ==========..;; t
86b0: 77 69 6b 69 20 66 6f 72 6d 61 74 69 6e 67 20 72 wiki formating r
86c0: 6f 75 74 69 6e 65 73 20 28 6f 76 65 72 72 69 64 outines (overrid
86d0: 65 20 74 68 65 73 65 20 74 6f 20 63 68 61 6e 67 e these to chang
86e0: 65 20 79 6f 75 72 20 6c 6f 6f 6b 20 61 6e 64 20 e your look and
86f0: 66 65 65 6c 0a 28 64 65 66 69 6e 65 20 74 77 69 feel.(define twi
8700: 6b 69 3a 74 77 69 6b 69 2d 74 61 67 20 20 73 3a ki:twiki-tag s:
8710: 62 29 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 b).(define twiki
8720: 3a 68 33 20 20 20 20 20 20 20 20 20 73 3a 68 33 :h3 s:h3
8730: 29 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a ).(define twiki:
8740: 68 32 20 20 20 20 20 20 20 20 20 73 3a 68 32 29 h2 s:h2)
8750: 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 68 .(define twiki:h
8760: 31 20 20 20 20 20 20 20 20 20 73 3a 68 31 29 0a 1 s:h1).
8770: 3b 3b 20 28 64 65 66 69 6e 65 20 74 77 69 6b 69 ;; (define twiki
8780: 3a 6d 61 6b 65 2d 74 6c 69 6e 6b 20 73 3a 69 29 :make-tlink s:i)
8790: 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 75 .(define twiki:u
87a0: 6c 20 20 20 20 20 20 20 20 20 73 3a 75 6c 29 0a l s:ul).
87b0: 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 6f 6c (define twiki:ol
87c0: 20 20 20 20 20 20 20 20 20 73 3a 6f 6c 29 0a 28 s:ol).(
87d0: 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 6c 69 20 define twiki:li
87e0: 20 20 20 20 20 20 20 20 73 3a 6c 69 29 0a 28 64 s:li).(d
87f0: 65 66 69 6e 65 20 74 77 69 6b 69 3a 70 72 65 20 efine twiki:pre
8800: 20 20 20 20 20 20 20 73 3a 70 72 65 29 0a 28 64 s:pre).(d
8810: 65 66 69 6e 65 20 74 77 69 6b 69 3a 70 20 20 20 efine twiki:p
8820: 20 20 20 20 20 20 20 73 3a 70 29 0a 28 64 65 66 s:p).(def
8830: 69 6e 65 20 74 77 69 6b 69 3a 75 20 20 20 20 20 ine twiki:u
8840: 20 20 20 20 20 73 3a 75 29 0a 28 64 65 66 69 6e s:u).(defin
8850: 65 20 74 77 69 6b 69 3a 74 64 20 20 20 20 20 20 e twiki:td
8860: 20 20 20 73 3a 74 64 29 0a 28 64 65 66 69 6e 65 s:td).(define
8870: 20 74 77 69 6b 69 3a 74 72 20 20 20 20 20 20 20 twiki:tr
8880: 20 20 73 3a 74 72 29 0a 28 64 65 66 69 6e 65 20 s:tr).(define
8890: 74 77 69 6b 69 3a 74 61 62 6c 65 20 20 20 20 20 twiki:table
88a0: 20 73 3a 74 61 62 6c 65 29 0a 28 64 65 66 69 6e s:table).(defin
88b0: 65 20 74 77 69 6b 69 3a 64 69 76 20 20 20 20 20 e twiki:div
88c0: 20 20 20 73 3a 64 69 76 29 0a 0a 28 64 65 66 69 s:div)..(defi
88d0: 6e 65 20 28 74 77 69 6b 69 3a 77 65 62 36 34 65 ne (twiki:web64e
88e0: 6e 63 20 73 74 72 29 0a 20 20 28 73 74 72 69 6e nc str). (strin
88f0: 67 2d 73 75 62 73 74 69 74 75 74 65 20 22 3d 22 g-substitute "="
8900: 20 22 5f 22 20 28 62 61 73 65 36 34 3a 65 6e 63 "_" (base64:enc
8910: 6f 64 65 20 73 74 72 29 20 23 74 29 29 0a 0a 28 ode str) #t))..(
8920: 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 77 65 define (twiki:we
8930: 62 36 34 64 65 63 20 73 74 72 29 0a 20 20 28 62 b64dec str). (b
8940: 61 73 65 36 34 3a 64 65 63 6f 64 65 20 28 73 74 ase64:decode (st
8950: 72 69 6e 67 2d 73 75 62 73 74 69 74 75 74 65 20 ring-substitute
8960: 22 5f 22 20 22 3d 22 20 73 74 72 20 23 74 29 29 "_" "=" str #t))
8970: 29 0a 20 20 20 20 0a 28 64 65 66 69 6e 65 20 28 ). .(define (
8980: 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 6c 69 6e 6b twiki:make-tlink
8990: 20 74 65 78 74 20 74 69 64 64 6c 65 72 6e 61 6d text tiddlernam
89a0: 65 29 0a 20 20 28 73 3a 61 20 74 65 78 74 20 27 e). (s:a text '
89b0: 68 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 href (s:link-to
89c0: 28 74 77 69 6b 69 3a 67 65 74 2d 6c 69 6e 6b 2d (twiki:get-link-
89d0: 62 61 63 6b 2d 74 6f 2d 63 75 72 72 65 6e 74 29 back-to-current)
89e0: 20 27 76 69 65 77 5f 74 69 64 64 6c 65 72 20 28 'view_tiddler (
89f0: 74 77 69 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 twiki:web64enc t
8a00: 69 64 64 6c 65 72 6e 61 6d 65 29 29 29 29 0a 0a iddlername))))..
8a10: 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 3a 70 (define (twiki:p
8a20: 69 63 20 70 69 63 2d 6e 61 6d 65 20 73 69 7a 65 ic pic-name size
8a30: 20 77 69 6b 69 29 0a 20 20 28 6c 65 74 2a 20 28 wiki). (let* (
8a40: 28 74 64 62 20 20 20 20 28 74 77 69 6b 69 3a 77 (tdb (twiki:w
8a50: 69 6b 69 2d 67 65 74 2d 64 62 68 20 77 69 6b 69 iki-get-dbh wiki
8a60: 29 29 0a 09 20 28 74 6b 65 79 20 20 20 28 74 77 )).. (tkey (tw
8a70: 69 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 6b 65 79 iki:wiki-get-key
8a80: 20 77 69 6b 69 29 29 0a 09 20 28 78 79 20 20 20 wiki)).. (xy
8a90: 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 (string-split
8aa0: 73 69 7a 65 20 22 78 22 29 29 0a 09 20 28 70 69 size "x")).. (pi
8ab0: 63 2d 69 64 20 28 74 77 69 6b 69 3a 67 65 74 2d c-id (twiki:get-
8ac0: 70 69 63 2d 69 64 20 74 64 62 20 70 69 63 2d 6e pic-id tdb pic-n
8ad0: 61 6d 65 20 28 74 77 69 6b 69 3a 77 69 6b 69 2d ame (twiki:wiki-
8ae0: 67 65 74 2d 77 69 64 20 77 69 6b 69 29 29 29 0a get-wid wiki))).
8af0: 09 20 28 69 6d 67 2d 6c 6e 6b 20 20 28 73 3a 6c . (img-lnk (s:l
8b00: 69 6e 6b 2d 74 6f 20 22 74 77 69 6b 69 22 20 27 ink-to "twiki" '
8b10: 77 69 6b 69 5f 6b 65 79 20 28 63 6f 6e 63 20 28 wiki_key (conc (
8b20: 6e 75 6d 62 65 72 2d 3e 73 74 72 69 6e 67 20 28 number->string (
8b30: 74 77 69 6b 69 3a 77 69 6b 69 2d 67 65 74 2d 77 twiki:wiki-get-w
8b40: 69 64 20 77 69 6b 69 29 29 20 22 2d 22 20 28 74 id wiki)) "-" (t
8b50: 77 69 6b 69 3a 77 65 62 36 34 65 6e 63 20 74 6b wiki:web64enc tk
8b60: 65 79 29 29 0a 09 09 09 20 20 20 20 20 20 27 69 ey)).... 'i
8b70: 6d 61 67 65 20 20 70 69 63 2d 69 64 29 29 29 0a mage pic-id))).
8b80: 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 3e 20 (if (and (>
8b90: 28 6c 65 6e 67 74 68 20 78 79 29 20 31 29 0a 09 (length xy) 1)..
8ba0: 20 20 20 20 20 28 63 61 72 20 78 79 29 0a 09 20 (car xy)..
8bb0: 20 20 20 20 28 63 61 64 72 20 78 79 29 29 20 3b (cadr xy)) ;
8bc0: 3b 20 79 65 70 2c 20 68 61 76 65 20 74 77 6f 20 ; yep, have two
8bd0: 6e 75 6d 62 65 72 73 0a 09 28 73 3a 69 6d 67 20 numbers..(s:img
8be0: 27 74 69 74 6c 65 20 70 69 63 2d 6e 61 6d 65 20 'title pic-name
8bf0: 27 61 6c 74 20 70 69 63 2d 6e 61 6d 65 20 27 77 'alt pic-name 'w
8c00: 69 64 74 68 20 28 63 61 72 20 78 79 29 20 27 68 idth (car xy) 'h
8c10: 65 69 67 68 74 20 28 63 61 64 72 20 78 79 29 20 eight (cadr xy)
8c20: 27 73 72 63 20 69 6d 67 2d 6c 6e 6b 29 0a 09 28 'src img-lnk)..(
8c30: 73 3a 69 6d 67 20 27 74 69 74 6c 65 20 70 69 63 s:img 'title pic
8c40: 2d 6e 61 6d 65 20 27 61 6c 74 20 70 69 63 2d 6e -name 'alt pic-n
8c50: 61 6d 65 20 27 73 72 63 20 69 6d 67 2d 6c 6e 6b ame 'src img-lnk
8c60: 29 29 29 29 0a 0a 3b 3b 20 6f 76 65 72 72 69 64 ))))..;; overrid
8c70: 65 20 74 68 65 73 65 20 61 6c 73 6f 0a 28 64 65 e these also.(de
8c80: 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 2d fine (twiki:get-
8c90: 69 64 29 0a 20 20 28 73 3a 73 65 73 73 69 6f 6e id). (s:session
8ca0: 2d 76 61 72 2d 67 65 74 20 22 69 64 22 29 29 0a -var-get "id")).
8cb0: 0a 3b 3b 20 6f 76 65 72 72 69 64 65 20 74 68 69 .;; override thi
8cc0: 73 20 74 6f 20 73 65 74 20 6c 69 6e 6b 73 20 69 s to set links i
8cd0: 6e 73 69 64 65 20 77 69 6b 69 27 73 0a 28 64 65 nside wiki's.(de
8ce0: 66 69 6e 65 20 28 74 77 69 6b 69 3a 67 65 74 2d fine (twiki:get-
8cf0: 6c 69 6e 6b 2d 62 61 63 6b 2d 74 6f 2d 63 75 72 link-back-to-cur
8d00: 72 65 6e 74 29 0a 20 20 28 73 3a 63 75 72 72 65 rent). (s:curre
8d10: 6e 74 2d 70 61 67 65 29 29 0a 0a 0a 3b 3b 20 72 nt-page))...;; r
8d20: 65 67 65 78 65 73 20 61 72 65 20 6c 69 73 74 65 egexes are liste
8d30: 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 69 d in the order i
8d40: 6e 20 77 68 69 63 68 20 74 68 65 79 20 73 68 6f n which they sho
8d50: 75 6c 64 20 62 65 20 63 68 65 63 6b 65 64 0a 0a uld be checked..
8d60: 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 68 33 (define twiki:h3
8d70: 2d 70 61 74 74 20 28 72 65 67 65 78 70 20 22 5e -patt (regexp "^
8d80: 21 21 21 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 !!!(.*)$")).(def
8d90: 69 6e 65 20 74 77 69 6b 69 3a 68 32 2d 70 61 74 ine twiki:h2-pat
8da0: 74 20 28 72 65 67 65 78 70 20 22 5e 21 21 28 2e t (regexp "^!!(.
8db0: 2a 29 24 22 29 29 0a 28 64 65 66 69 6e 65 20 74 *)$")).(define t
8dc0: 77 69 6b 69 3a 68 31 2d 70 61 74 74 20 28 72 65 wiki:h1-patt (re
8dd0: 67 65 78 70 20 22 5e 21 28 2e 2a 29 24 22 29 29 gexp "^!(.*)$"))
8de0: 0a 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a ..(define twiki:
8df0: 74 6c 69 6e 6b 2d 70 61 74 74 20 20 20 20 20 28 tlink-patt (
8e00: 72 65 67 65 78 70 20 22 5e 28 2e 2a 29 5c 5c 5b regexp "^(.*)\\[
8e10: 5c 5c 5b 28 5b 5e 5c 5c 5b 5c 5c 5d 5d 2a 29 5c \\[([^\\[\\]]*)\
8e20: 5c 5d 5c 5c 5d 28 2e 2a 29 24 22 29 29 0a 28 64 \]\\](.*)$")).(d
8e30: 65 66 69 6e 65 20 74 77 69 6b 69 3a 70 69 63 2d efine twiki:pic-
8e40: 70 61 74 74 20 20 20 20 20 20 20 28 72 65 67 65 patt (rege
8e50: 78 70 20 22 5e 28 2e 2a 29 5c 5c 5b 70 69 63 28 xp "^(.*)\\[pic(
8e60: 5b 30 2d 39 25 5d 2a 78 2a 5b 30 2d 39 25 5d 2a [0-9%]*x*[0-9%]*
8e70: 29 5c 5c 5b 28 5b 5e 5c 5c 5b 5c 5c 5d 5d 2b 29 )\\[([^\\[\\]]+)
8e80: 5c 5c 5d 5c 5c 5d 28 2e 2a 29 24 22 29 29 0a 28 \\]\\](.*)$")).(
8e90: 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 75 6e 64 define twiki:und
8ea0: 65 72 6c 69 6e 65 2d 70 61 74 74 20 28 72 65 67 erline-patt (reg
8eb0: 65 78 70 20 22 5e 28 2e 2a 29 5f 5f 28 2e 2a 29 exp "^(.*)__(.*)
8ec0: 5f 5f 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 69 __(.*)$")).(defi
8ed0: 6e 65 20 74 77 69 6b 69 3a 74 61 62 6c 65 2d 70 ne twiki:table-p
8ee0: 61 74 74 20 20 20 20 20 28 72 65 67 65 78 70 20 att (regexp
8ef0: 22 5e 5c 5c 7c 28 2e 2a 29 5c 5c 7c 24 22 29 29 "^\\|(.*)\\|$"))
8f00: 0a 0a 3b 3b 20 74 68 65 73 65 20 61 72 65 20 66 ..;; these are f
8f10: 6f 72 20 6d 75 6c 74 69 2d 6c 69 6e 65 20 66 6f or multi-line fo
8f20: 72 6d 61 74 69 6e 67 0a 28 64 65 66 69 6e 65 20 rmating.(define
8f30: 74 77 69 6b 69 3a 6c 69 73 74 2d 70 61 74 74 20 twiki:list-patt
8f40: 20 20 20 28 72 65 67 65 78 70 20 22 5e 28 5c 5c (regexp "^(\\
8f50: 2a 2b 7c 5c 5c 23 2b 29 28 2e 2a 29 24 22 29 29 *+|\\#+)(.*)$"))
8f60: 0a 28 64 65 66 69 6e 65 20 74 77 69 6b 69 3a 62 .(define twiki:b
8f70: 75 6c 6c 65 74 2d 70 61 74 74 20 20 28 72 65 67 ullet-patt (reg
8f80: 65 78 70 20 22 5e 28 5c 5c 2a 2b 29 28 2e 2a 29 exp "^(\\*+)(.*)
8f90: 24 22 29 29 0a 28 64 65 66 69 6e 65 20 74 77 69 $")).(define twi
8fa0: 6b 69 3a 6e 75 6d 62 65 72 2d 70 61 74 74 20 20 ki:number-patt
8fb0: 28 72 65 67 65 78 70 20 22 5e 28 5c 5c 23 2b 29 (regexp "^(\\#+)
8fc0: 28 2e 2a 29 24 22 29 29 0a 28 64 65 66 69 6e 65 (.*)$")).(define
8fd0: 20 74 77 69 6b 69 3a 70 72 65 66 6f 72 2d 70 61 twiki:prefor-pa
8fe0: 74 74 20 20 28 72 65 67 65 78 70 20 22 5e 5c 5c tt (regexp "^\\
8ff0: 7b 5c 5c 7b 5c 5c 7b 24 22 29 29 0a 28 64 65 66 {\\{\\{$")).(def
9000: 69 6e 65 20 74 77 69 6b 69 3a 70 72 65 66 6f 72 ine twiki:prefor
9010: 2d 65 6e 64 2d 70 61 74 74 20 28 72 65 67 65 78 -end-patt (regex
9020: 70 20 22 5e 5c 5c 7d 5c 5c 7d 5c 5c 7d 24 22 29 p "^\\}\\}\\}$")
9030: 29 0a 0a 3b 3b 20 72 65 67 65 78 0a 28 64 65 66 )..;; regex.(def
9040: 69 6e 65 20 74 3a 6d 61 74 63 68 20 20 23 66 29 ine t:match #f)
9050: 0a 28 64 65 66 69 6e 65 20 28 74 2d 6d 61 74 63 .(define (t-matc
9060: 68 20 72 20 73 29 0a 20 20 28 6c 65 74 20 28 28 h r s). (let ((
9070: 72 65 73 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 res (string-matc
9080: 68 20 72 20 73 29 29 29 0a 20 20 20 20 28 73 65 h r s))). (se
9090: 74 21 20 74 3a 6d 61 74 63 68 20 72 65 73 29 0a t! t:match res).
90a0: 20 20 20 20 72 65 73 29 29 0a 0a 3b 3b 20 73 68 res))..;; sh
90b0: 6f 75 6c 64 20 73 77 69 74 63 68 20 74 6f 20 72 ould switch to r
90c0: 65 63 75 72 73 69 76 65 6c 79 20 70 72 6f 63 65 ecursively proce
90d0: 73 73 69 6e 67 20 62 79 20 62 6c 6f 63 6b 3f 0a ssing by block?.
90e0: 3b 3b 20 28 70 72 6f 63 65 73 73 2d 62 6c 6f 63 ;; (process-bloc
90f0: 6b 20 64 61 74 29 0a 3b 3b 20 20 20 2e 2e 2e 0a k dat).;; ....
9100: 3b 3b 20 20 20 28 70 72 6f 63 65 73 73 2d 62 6c ;; (process-bl
9110: 6f 63 6b 20 72 65 6d 64 61 74 29 0a 28 64 65 66 ock remdat).(def
9120: 69 6e 65 20 28 74 77 69 6b 69 3a 64 61 74 2d 3e ine (twiki:dat->
9130: 68 74 6d 6c 20 64 61 74 20 77 69 6b 69 29 0a 20 html dat wiki).
9140: 20 28 6c 65 74 2a 20 28 28 69 6e 70 20 20 20 20 (let* ((inp
9150: 20 20 20 20 28 6f 70 65 6e 2d 69 6e 70 75 74 2d (open-input-
9160: 73 74 72 69 6e 67 20 64 61 74 29 29 0a 09 20 28 string dat)).. (
9170: 6e 65 73 74 2d 64 65 70 74 68 20 30 29 20 3b 3b nest-depth 0) ;;
9180: 20 64 65 70 74 68 20 6f 66 20 6e 65 73 74 65 64 depth of nested
9190: 20 6c 69 73 74 73 0a 09 20 3b 3b 20 74 6f 6b 65 lists.. ;; toke
91a0: 6e 20 28 69 2e 65 2e 20 6c 69 6e 65 29 20 68 61 n (i.e. line) ha
91b0: 6e 64 6c 69 6e 67 20 73 74 75 66 66 0a 09 20 28 ndling stuff.. (
91c0: 6e 65 78 74 2d 6c 69 6e 65 20 20 23 66 29 0a 09 next-line #f)..
91d0: 20 28 70 65 65 6b 2d 6c 69 6e 65 20 20 28 6c 61 (peek-line (la
91e0: 6d 62 64 61 20 28 29 0a 09 09 20 20 20 20 20 20 mbda ()...
91f0: 20 6e 65 78 74 2d 6c 69 6e 65 29 29 0a 09 20 28 next-line)).. (
9200: 67 65 74 2d 6c 69 6e 65 20 20 20 28 6c 61 6d 62 get-line (lamb
9210: 64 61 20 28 29 0a 09 09 20 20 20 20 20 20 20 28 da ()... (
9220: 6c 65 74 20 28 28 72 65 73 20 6e 65 78 74 2d 6c let ((res next-l
9230: 69 6e 65 29 29 0a 09 09 09 20 28 73 65 74 21 20 ine)).... (set!
9240: 6e 65 78 74 2d 6c 69 6e 65 20 28 72 65 61 64 2d next-line (read-
9250: 6c 69 6e 65 20 69 6e 70 29 29 0a 09 09 09 20 3b line inp)).... ;
9260: 3b 20 28 70 72 69 6e 74 20 22 67 65 74 2d 6c 69 ; (print "get-li
9270: 6e 65 3a 20 70 72 65 76 3d 22 20 72 65 73 20 22 ne: prev=" res "
9280: 20 6e 65 78 74 3d 22 20 6e 65 78 74 2d 6c 69 6e next=" next-lin
9290: 65 20 22 5c 6e 22 29 0a 09 09 09 20 72 65 73 29 e "\n").... res)
92a0: 29 29 0a 09 20 28 6c 20 20 20 20 20 20 20 20 20 )).. (l
92b0: 20 28 67 65 74 2d 6c 69 6e 65 29 29 29 20 3b 3b (get-line))) ;;
92c0: 20 64 69 73 63 61 72 64 20 74 68 65 20 23 66 20 discard the #f
92d0: 69 6e 20 6e 65 78 74 2d 6c 69 6e 65 0a 20 20 20 in next-line.
92e0: 20 28 74 77 69 6b 69 3a 72 65 61 64 2d 62 6c 6f (twiki:read-blo
92f0: 63 6b 20 70 65 65 6b 2d 6c 69 6e 65 20 67 65 74 ck peek-line get
9300: 2d 6c 69 6e 65 20 6e 65 73 74 2d 64 65 70 74 68 -line nest-depth
9310: 20 23 66 20 77 69 6b 69 29 29 29 0a 0a 3b 3b 20 #f wiki)))..;;
9320: 62 6c 6b 2d 74 79 70 65 20 69 73 20 23 66 20 66 blk-type is #f f
9330: 6f 72 20 6e 6f 74 20 69 6e 20 61 20 62 6c 6f 63 or not in a bloc
9340: 6b 20 28 69 2e 65 2e 20 61 74 20 74 6f 70 20 6c k (i.e. at top l
9350: 65 76 65 6c 29 2c 20 27 70 72 65 20 66 6f 72 20 evel), 'pre for
9360: 70 72 65 66 6f 72 6d 61 74 65 64 2c 20 27 75 6c preformated, 'ul
9370: 20 6f 72 20 27 6f 6c 0a 3b 3b 20 63 61 6c 6c 20 or 'ol.;; call
9380: 77 69 74 68 20 66 69 72 73 74 20 6c 69 6e 65 20 with first line
9390: 61 73 20 6c 65 67 69 74 20 64 61 74 61 0a 3b 3b as legit data.;;
93a0: 20 69 2e 65 2e 20 66 6f 72 20 70 72 65 66 6f 72 i.e. for prefor
93b0: 6d 20 2d 20 73 6b 69 70 20 74 68 65 20 7b 7b 7b m - skip the {{{
93c0: 20 6c 69 6e 65 20 74 68 65 6e 20 63 61 6c 6c 20 line then call
93d0: 72 65 61 64 2d 62 6c 6f 63 6b 0a 3b 3b 20 20 20 read-block.;;
93e0: 20 20 20 66 6f 72 20 23 20 6f 72 20 2a 20 63 61 for # or * ca
93f0: 6c 6c 20 77 69 74 68 20 66 69 72 73 74 20 6c 69 ll with first li
9400: 6e 65 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b ne.(define (twik
9410: 69 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 70 65 65 i:read-block pee
9420: 6b 2d 6c 69 6e 65 20 67 65 74 2d 6c 69 6e 65 20 k-line get-line
9430: 6e 65 73 74 2d 64 65 70 74 68 20 62 6c 6b 2d 74 nest-depth blk-t
9440: 79 70 65 20 77 69 6b 69 29 0a 20 20 28 6c 65 74 ype wiki). (let
9450: 20 6c 6f 6f 70 20 28 28 72 65 73 20 27 28 29 29 loop ((res '())
9460: 0a 09 20 20 20 20 20 28 6c 20 20 20 28 70 65 65 .. (l (pee
9470: 6b 2d 6c 69 6e 65 29 29 29 20 3b 3b 20 73 68 6f k-line))) ;; sho
9480: 75 6c 64 20 74 68 69 73 20 62 65 20 61 20 70 65 uld this be a pe
9490: 65 6b 2d 6c 69 6e 65 3f 20 79 65 73 21 21 0a 20 ek-line? yes!!.
94a0: 20 20 20 3b 3b 20 28 70 72 69 6e 74 20 22 74 77 ;; (print "tw
94b0: 69 6b 69 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 6c iki:read-block l
94c0: 6f 6f 70 20 6e 65 73 74 2d 64 65 70 74 68 3d 22 oop nest-depth="
94d0: 6e 65 73 74 2d 64 65 70 74 68 20 22 20 62 6c 6b nest-depth " blk
94e0: 2d 74 79 70 65 3d 22 20 62 6c 6b 2d 74 79 70 65 -type=" blk-type
94f0: 20 22 20 6c 3d 22 20 6c 20 22 5c 6e 20 20 72 65 " l=" l "\n re
9500: 73 3d 22 20 72 65 73 29 0a 20 20 20 20 28 69 66 s=" res). (if
9510: 20 28 65 6f 66 2d 6f 62 6a 65 63 74 3f 20 6c 29 (eof-object? l)
9520: 0a 09 3b 3b 20 77 65 20 61 72 65 20 64 6f 6e 65 ..;; we are done
9530: 21 20 72 65 74 75 72 6e 20 74 68 65 20 6c 69 73 ! return the lis
9540: 74 0a 09 72 65 73 0a 09 3b 3b 20 70 72 6f 63 65 t..res..;; proce
9550: 73 73 20 69 74 21 0a 09 28 63 6f 6e 64 0a 09 20 ss it!..(cond..
9560: 3b 3b 20 68 61 6e 64 6c 65 20 70 72 65 66 6f 72 ;; handle prefor
9570: 6d 61 74 65 64 20 74 65 78 74 0a 09 20 28 28 65 mated text.. ((e
9580: 71 3f 20 62 6c 6b 2d 74 79 70 65 20 27 70 72 65 q? blk-type 'pre
9590: 29 0a 09 20 20 28 69 66 20 28 74 2d 6d 61 74 63 ).. (if (t-matc
95a0: 68 20 20 74 77 69 6b 69 3a 70 72 65 66 6f 72 2d h twiki:prefor-
95b0: 65 6e 64 2d 70 61 74 74 20 6c 29 0a 09 20 20 20 end-patt l)..
95c0: 20 20 20 28 62 65 67 69 6e 0a 09 09 28 67 65 74 (begin...(get
95d0: 2d 6c 69 6e 65 29 20 3b 3b 20 64 69 73 63 61 72 -line) ;; discar
95e0: 64 20 74 68 65 20 7d 7d 7d 0a 09 09 72 65 73 29 d the }}}...res)
95f0: 20 20 20 20 20 20 20 3b 3b 20 65 6e 64 20 6f 66 ;; end of
9600: 20 70 72 65 66 6f 72 6d 61 74 74 65 64 0a 09 20 preformatted..
9610: 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 3b 3b (begin...;;
9620: 20 28 67 65 74 2d 6c 69 6e 65 29 20 3b 3b 20 64 (get-line) ;; d
9630: 69 73 63 61 72 64 20 74 68 65 20 7b 7b 7b 0a 09 iscard the {{{..
9640: 09 28 6c 6f 6f 70 20 28 61 70 70 65 6e 64 20 72 .(loop (append r
9650: 65 73 20 28 6c 69 73 74 20 28 67 65 74 2d 6c 69 es (list (get-li
9660: 6e 65 29 29 29 0a 09 09 20 20 20 20 20 20 28 70 ne)))... (p
9670: 65 65 6b 2d 6c 69 6e 65 29 29 29 29 29 0a 09 20 eek-line)))))..
9680: 3b 3b 20 68 61 6e 64 6c 65 20 74 61 62 6c 65 73 ;; handle tables
9690: 0a 09 20 28 28 65 71 3f 20 62 6c 6b 2d 74 79 70 .. ((eq? blk-typ
96a0: 65 20 27 74 61 62 6c 65 29 0a 09 20 20 28 69 66 e 'table).. (if
96b0: 20 28 74 2d 6d 61 74 63 68 20 74 77 69 6b 69 3a (t-match twiki:
96c0: 74 61 62 6c 65 2d 70 61 74 74 20 6c 29 0a 09 20 table-patt l)..
96d0: 20 20 20 20 20 28 6c 65 74 20 28 28 63 65 6c 73 (let ((cels
96e0: 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 (string-split
96f0: 28 63 61 64 72 20 74 3a 6d 61 74 63 68 29 20 22 (cadr t:match) "
9700: 7c 22 29 29 29 0a 09 09 28 67 65 74 2d 6c 69 6e |")))...(get-lin
9710: 65 29 0a 09 09 28 6c 6f 6f 70 20 28 61 70 70 65 e)...(loop (appe
9720: 6e 64 20 72 65 73 20 28 74 77 69 6b 69 3a 74 72 nd res (twiki:tr
9730: 20 28 6d 61 70 20 74 77 69 6b 69 3a 74 64 20 0a (map twiki:td .
9740: 09 09 09 09 09 09 20 28 6d 61 70 20 28 6c 61 6d ...... (map (lam
9750: 62 64 61 20 28 78 29 28 74 77 69 6b 69 3a 6c 69 bda (x)(twiki:li
9760: 6e 65 2d 3e 68 74 6d 6c 20 78 20 23 66 20 77 69 ne->html x #f wi
9770: 6b 69 29 29 20 63 65 6c 73 29 29 29 29 0a 09 09 ki)) cels))))...
9780: 20 20 20 20 20 20 28 67 65 74 2d 6c 69 6e 65 29 (get-line)
9790: 29 29 0a 09 20 20 20 20 20 20 72 65 73 29 29 0a )).. res)).
97a0: 09 20 3b 3b 20 68 61 6e 64 6c 65 20 6c 69 73 74 . ;; handle list
97b0: 73 0a 09 20 28 28 6f 72 20 28 74 2d 6d 61 74 63 s.. ((or (t-matc
97c0: 68 20 74 77 69 6b 69 3a 62 75 6c 6c 65 74 2d 70 h twiki:bullet-p
97d0: 61 74 74 20 6c 29 20 3b 3b 20 68 61 76 65 20 2a att l) ;; have *
97e0: 0a 09 20 20 20 20 20 20 28 74 2d 6d 61 74 63 68 .. (t-match
97f0: 20 74 77 69 6b 69 3a 6e 75 6d 62 65 72 2d 70 61 twiki:number-pa
9800: 74 74 20 6c 29 29 0a 09 20 20 28 6c 65 74 2a 20 tt l)).. (let*
9810: 28 28 64 69 72 65 63 74 69 76 65 20 28 63 61 64 ((directive (cad
9820: 72 20 74 3a 6d 61 74 63 68 29 29 0a 09 09 20 28 r t:match))... (
9830: 6c 65 76 65 6c 6e 75 6d 20 28 73 74 72 69 6e 67 levelnum (string
9840: 2d 6c 65 6e 67 74 68 20 64 69 72 65 63 74 69 76 -length directiv
9850: 65 29 29 0a 09 09 20 28 74 65 78 74 20 20 20 20 e))... (text
9860: 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 (twiki:line->ht
9870: 6d 6c 20 28 63 61 64 64 72 20 74 3a 6d 61 74 63 ml (caddr t:matc
9880: 68 29 20 23 74 20 77 69 6b 69 29 29 0a 09 09 20 h) #t wiki))...
9890: 28 62 74 79 70 65 20 20 20 20 28 69 66 20 28 73 (btype (if (s
98a0: 74 72 69 6e 67 3d 3f 20 22 23 22 20 28 73 75 62 tring=? "#" (sub
98b0: 73 74 72 69 6e 67 20 64 69 72 65 63 74 69 76 65 string directive
98c0: 20 30 20 31 29 29 0a 09 09 09 20 20 20 20 20 20 0 1))....
98d0: 20 27 6f 6c 0a 09 09 09 20 20 20 20 20 20 20 27 'ol.... '
98e0: 75 6c 29 29 0a 09 09 20 28 66 75 6e 63 20 20 20 ul))... (func
98f0: 20 20 28 69 66 20 28 65 71 3f 20 62 74 79 70 65 (if (eq? btype
9900: 20 27 75 6c 29 0a 09 09 09 20 20 20 20 20 20 20 'ul)....
9910: 74 77 69 6b 69 3a 75 6c 0a 09 09 09 20 20 20 20 twiki:ul....
9920: 20 20 20 74 77 69 6b 69 3a 6f 6c 29 29 29 0a 09 twiki:ol)))..
9930: 20 20 20 20 3b 3b 20 28 70 72 69 6e 74 20 22 68 ;; (print "h
9940: 61 6e 64 6c 69 6e 67 20 22 20 62 74 79 70 65 20 andling " btype
9950: 22 3a 20 6c 65 76 65 6c 6e 75 6d 3d 22 20 6c 65 ": levelnum=" le
9960: 76 65 6c 6e 75 6d 20 22 20 74 65 78 74 3d 22 20 velnum " text="
9970: 74 65 78 74 20 22 20 6e 65 73 74 2d 64 65 70 74 text " nest-dept
9980: 68 3d 22 20 6e 65 73 74 2d 64 65 70 74 68 20 22 h=" nest-depth "
9990: 20 62 6c 6b 2d 74 79 70 65 3d 22 20 62 6c 6b 2d blk-type=" blk-
99a0: 74 79 70 65 29 0a 09 20 20 20 20 28 63 6f 6e 64 type).. (cond
99b0: 0a 09 20 20 20 20 20 28 28 6e 6f 74 20 62 6c 6b .. ((not blk
99c0: 2d 74 79 70 65 29 20 3b 3b 20 69 2e 65 20 66 69 -type) ;; i.e fi
99d0: 72 73 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 rst member of th
99e0: 65 20 6c 69 73 74 21 0a 09 20 20 20 20 20 20 28 e list!.. (
99f0: 6c 6f 6f 70 20 28 61 70 70 65 6e 64 20 72 65 73 loop (append res
9a00: 20 28 66 75 6e 63 20 28 74 77 69 6b 69 3a 72 65 (func (twiki:re
9a10: 61 64 2d 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c 69 ad-block peek-li
9a20: 6e 65 20 67 65 74 2d 6c 69 6e 65 20 6c 65 76 65 ne get-line leve
9a30: 6c 6e 75 6d 20 62 74 79 70 65 20 77 69 6b 69 29 lnum btype wiki)
9a40: 29 29 0a 09 09 20 20 20 20 28 67 65 74 2d 6c 69 ))... (get-li
9a50: 6e 65 29 29 29 0a 09 20 20 20 20 20 28 28 3e 20 ne))).. ((>
9a60: 6c 65 76 65 6c 6e 75 6d 20 6e 65 73 74 2d 64 65 levelnum nest-de
9a70: 70 74 68 29 0a 09 20 20 20 20 20 20 28 6c 6f 6f pth).. (loo
9a80: 70 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 66 p (append res (f
9a90: 75 6e 63 20 28 74 77 69 6b 69 3a 72 65 61 64 2d unc (twiki:read-
9aa0: 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c 69 6e 65 20 block peek-line
9ab0: 67 65 74 2d 6c 69 6e 65 20 28 2b 20 6e 65 73 74 get-line (+ nest
9ac0: 2d 64 65 70 74 68 20 31 29 20 62 74 79 70 65 20 -depth 1) btype
9ad0: 77 69 6b 69 29 29 29 0a 09 09 20 20 20 20 28 70 wiki)))... (p
9ae0: 65 65 6b 2d 6c 69 6e 65 29 29 29 0a 09 20 20 20 eek-line)))..
9af0: 20 20 28 28 3c 20 6c 65 76 65 6c 6e 75 6d 20 6e ((< levelnum n
9b00: 65 73 74 2d 64 65 70 74 68 29 0a 09 20 20 20 20 est-depth)..
9b10: 20 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 74 (append res (t
9b20: 77 69 6b 69 3a 6c 69 20 74 65 78 74 29 29 29 20 wiki:li text)))
9b30: 3b 3b 20 72 65 74 75 72 6e 20 74 68 65 20 62 75 ;; return the bu
9b40: 6c 6c 65 74 65 64 20 69 74 65 6d 2c 20 64 6f 6e lleted item, don
9b50: 27 74 20 67 65 74 20 74 68 65 20 6e 65 78 74 20 't get the next
9b60: 6c 69 6e 65 3f 3f 0a 09 20 20 20 20 20 28 65 6c line??.. (el
9b70: 73 65 0a 09 20 20 20 20 20 20 28 67 65 74 2d 6c se.. (get-l
9b80: 69 6e 65 29 0a 09 20 20 20 20 20 20 28 6c 6f 6f ine).. (loo
9b90: 70 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 74 p (append res (t
9ba0: 77 69 6b 69 3a 6c 69 20 74 65 78 74 29 29 0a 09 wiki:li text))..
9bb0: 09 20 20 20 20 28 70 65 65 6b 2d 6c 69 6e 65 29 . (peek-line)
9bc0: 29 29 29 29 29 0a 09 20 28 28 74 2d 6d 61 74 63 ))))).. ((t-matc
9bd0: 68 20 74 77 69 6b 69 3a 70 72 65 66 6f 72 2d 70 h twiki:prefor-p
9be0: 61 74 74 20 6c 29 0a 09 20 20 28 67 65 74 2d 6c att l).. (get-l
9bf0: 69 6e 65 29 20 3b 3b 20 64 69 73 63 61 72 64 20 ine) ;; discard
9c00: 74 68 65 20 7b 7b 7b 0a 09 20 20 28 6c 6f 6f 70 the {{{.. (loop
9c10: 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 74 77 (append res (tw
9c20: 69 6b 69 3a 70 72 65 20 28 74 77 69 6b 69 3a 72 iki:pre (twiki:r
9c30: 65 61 64 2d 62 6c 6f 63 6b 20 70 65 65 6b 2d 6c ead-block peek-l
9c40: 69 6e 65 20 67 65 74 2d 6c 69 6e 65 20 6e 65 73 ine get-line nes
9c50: 74 2d 64 65 70 74 68 20 27 70 72 65 20 77 69 6b t-depth 'pre wik
9c60: 69 29 29 29 0a 09 09 28 70 65 65 6b 2d 6c 69 6e i)))...(peek-lin
9c70: 65 29 29 29 0a 09 20 28 28 74 2d 6d 61 74 63 68 e))).. ((t-match
9c80: 20 74 77 69 6b 69 3a 74 61 62 6c 65 2d 70 61 74 twiki:table-pat
9c90: 74 20 6c 29 0a 09 20 20 28 67 65 74 2d 6c 69 6e t l).. (get-lin
9ca0: 65 29 0a 09 20 20 28 6c 6f 6f 70 20 28 61 70 70 e).. (loop (app
9cb0: 65 6e 64 20 72 65 73 20 28 74 77 69 6b 69 3a 74 end res (twiki:t
9cc0: 61 62 6c 65 20 27 62 6f 72 64 65 72 20 31 20 27 able 'border 1 '
9cd0: 63 65 6c 6c 73 70 61 63 69 6e 67 20 30 20 28 74 cellspacing 0 (t
9ce0: 77 69 6b 69 3a 72 65 61 64 2d 62 6c 6f 63 6b 20 wiki:read-block
9cf0: 70 65 65 6b 2d 6c 69 6e 65 20 67 65 74 2d 6c 69 peek-line get-li
9d00: 6e 65 20 30 20 27 74 61 62 6c 65 20 77 69 6b 69 ne 0 'table wiki
9d10: 29 29 29 0a 09 09 28 70 65 65 6b 2d 6c 69 6e 65 )))...(peek-line
9d20: 29 29 29 0a 09 20 28 65 6c 73 65 0a 09 20 20 28 ))).. (else.. (
9d30: 67 65 74 2d 6c 69 6e 65 29 0a 09 20 20 28 6c 6f get-line).. (lo
9d40: 6f 70 20 28 61 70 70 65 6e 64 20 72 65 73 20 28 op (append res (
9d50: 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c twiki:line->html
9d60: 20 6c 20 23 74 20 77 69 6b 69 29 29 0a 09 09 28 l #t wiki))...(
9d70: 70 65 65 6b 2d 6c 69 6e 65 29 29 29 29 29 29 29 peek-line)))))))
9d80: 0a 0a 28 64 65 66 69 6e 65 20 28 74 77 69 6b 69 ..(define (twiki
9d90: 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 64 61 74 20 :line->html dat
9da0: 66 69 72 73 74 63 61 6c 6c 20 77 69 6b 69 29 0a firstcall wiki).
9db0: 20 20 28 69 66 20 66 69 72 73 74 63 61 6c 6c 20 (if firstcall
9dc0: 0a 20 20 20 20 20 20 3b 3b 20 70 72 6f 63 65 73 . ;; proces
9dd0: 73 20 74 68 65 20 70 61 74 74 65 72 6e 73 20 74 s the patterns t
9de0: 68 61 74 20 74 65 73 74 20 66 6f 72 20 62 65 67 hat test for beg
9df0: 69 6e 6e 69 6e 67 20 6f 66 20 6c 69 6e 65 20 6f inning of line o
9e00: 6e 6c 79 20 6f 6e 20 74 68 65 20 66 69 72 73 74 nly on the first
9e10: 20 63 61 6c 6c 0a 20 20 20 20 20 20 28 63 6f 6e call. (con
9e20: 64 0a 20 20 20 20 20 20 20 28 28 74 2d 6d 61 74 d. ((t-mat
9e30: 63 68 20 74 77 69 6b 69 3a 68 33 2d 70 61 74 74 ch twiki:h3-patt
9e40: 20 64 61 74 29 0a 09 28 74 77 69 6b 69 3a 68 33 dat)..(twiki:h3
9e50: 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 (twiki:line->ht
9e60: 6d 6c 20 28 63 61 64 72 20 74 3a 6d 61 74 63 68 ml (cadr t:match
9e70: 29 20 23 66 20 77 69 6b 69 29 29 29 0a 20 20 20 ) #f wiki))).
9e80: 20 20 20 20 28 28 74 2d 6d 61 74 63 68 20 74 77 ((t-match tw
9e90: 69 6b 69 3a 68 32 2d 70 61 74 74 20 64 61 74 29 iki:h2-patt dat)
9ea0: 0a 09 28 74 77 69 6b 69 3a 68 32 20 28 74 77 69 ..(twiki:h2 (twi
9eb0: 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 28 63 ki:line->html (c
9ec0: 61 64 72 20 74 3a 6d 61 74 63 68 29 20 23 66 20 adr t:match) #f
9ed0: 77 69 6b 69 29 29 29 0a 20 20 20 20 20 20 20 28 wiki))). (
9ee0: 28 74 2d 6d 61 74 63 68 20 74 77 69 6b 69 3a 68 (t-match twiki:h
9ef0: 31 2d 70 61 74 74 20 64 61 74 29 0a 09 28 74 77 1-patt dat)..(tw
9f00: 69 6b 69 3a 68 31 20 28 74 77 69 6b 69 3a 6c 69 iki:h1 (twiki:li
9f10: 6e 65 2d 3e 68 74 6d 6c 20 28 63 61 64 72 20 74 ne->html (cadr t
9f20: 3a 6d 61 74 63 68 29 20 23 66 20 77 69 6b 69 29 :match) #f wiki)
9f30: 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 77 68 79 )). ;; why
9f40: 20 77 61 73 20 74 68 65 20 28 73 3a 62 72 29 20 was the (s:br)
9f50: 68 65 72 65 3f 20 74 72 79 69 6e 67 20 77 69 74 here? trying wit
9f60: 68 6f 75 74 0a 20 20 20 20 20 20 20 28 65 6c 73 hout. (els
9f70: 65 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 e (twiki:line->h
9f80: 74 6d 6c 20 64 61 74 20 23 66 20 77 69 6b 69 29 tml dat #f wiki)
9f90: 29 29 0a 20 20 20 20 20 20 20 3b 3b 20 28 65 6c )). ;; (el
9fa0: 73 65 20 20 28 61 70 70 65 6e 64 20 28 74 77 69 se (append (twi
9fb0: 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 64 61 ki:line->html da
9fc0: 74 20 23 66 20 77 69 6b 69 29 28 6c 69 73 74 20 t #f wiki)(list
9fd0: 28 73 3a 62 72 29 29 29 29 29 3b 3b 20 28 73 3a (s:br)))));; (s:
9fe0: 70 20 27 63 6c 61 73 73 20 22 74 69 64 64 6c 65 p 'class "tiddle
9ff0: 72 70 61 72 22 0a 20 20 20 20 20 20 3b 3b 20 6e rpar". ;; n
a000: 6f 74 20 66 69 72 73 74 63 61 6c 6c 20 73 6f 20 ot firstcall so
a010: 70 72 6f 63 65 73 73 20 6f 74 68 65 72 20 70 61 process other pa
a020: 74 74 65 72 6e 73 0a 20 20 20 20 20 20 28 63 6f tterns. (co
a030: 6e 64 0a 20 20 20 20 20 20 20 28 28 74 2d 6d 61 nd. ((t-ma
a040: 74 63 68 20 74 77 69 6b 69 3a 74 6c 69 6e 6b 2d tch twiki:tlink-
a050: 70 61 74 74 20 64 61 74 29 0a 09 28 6c 65 74 20 patt dat)..(let
a060: 28 28 70 72 65 20 20 28 63 61 64 72 20 20 20 74 ((pre (cadr t
a070: 3a 6d 61 74 63 68 29 29 0a 09 20 20 20 20 20 20 :match))..
a080: 28 6c 6e 6b 20 20 28 63 61 64 64 72 20 20 74 3a (lnk (caddr t:
a090: 6d 61 74 63 68 29 29 0a 09 20 20 20 20 20 20 28 match)).. (
a0a0: 70 6f 73 74 20 28 63 61 64 64 64 72 20 74 3a 6d post (cadddr t:m
a0b0: 61 74 63 68 29 29 29 0a 09 20 20 28 6c 69 73 74 atch))).. (list
a0c0: 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 (twiki:line->ht
a0d0: 6d 6c 20 70 72 65 20 23 66 20 77 69 6b 69 29 0a ml pre #f wiki).
a0e0: 09 09 28 74 77 69 6b 69 3a 6d 61 6b 65 2d 74 6c ..(twiki:make-tl
a0f0: 69 6e 6b 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d ink (twiki:line-
a100: 3e 68 74 6d 6c 20 6c 6e 6b 20 23 66 20 77 69 6b >html lnk #f wik
a110: 69 29 20 6c 6e 6b 29 20 3b 3b 20 73 70 65 63 69 i) lnk) ;; speci
a120: 61 6c 20 68 61 6e 64 6c 69 6e 67 0a 09 09 28 74 al handling...(t
a130: 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d 6c 20 wiki:line->html
a140: 70 6f 73 74 20 23 66 20 77 69 6b 69 29 29 29 29 post #f wiki))))
a150: 0a 20 20 20 20 20 20 20 28 28 74 2d 6d 61 74 63 . ((t-matc
a160: 68 20 74 77 69 6b 69 3a 70 69 63 2d 70 61 74 74 h twiki:pic-patt
a170: 20 64 61 74 29 0a 09 28 6c 65 74 20 28 28 70 72 dat)..(let ((pr
a180: 65 20 20 28 63 61 64 72 20 20 20 20 74 3a 6d 61 e (cadr t:ma
a190: 74 63 68 29 29 0a 09 20 20 20 20 20 20 28 73 69 tch)).. (si
a1a0: 7a 65 20 28 63 61 64 64 72 20 20 20 74 3a 6d 61 ze (caddr t:ma
a1b0: 74 63 68 29 29 20 0a 09 20 20 20 20 20 20 28 70 tch)) .. (p
a1c0: 69 63 20 20 28 63 61 64 64 64 72 20 20 74 3a 6d ic (cadddr t:m
a1d0: 61 74 63 68 29 29 0a 09 20 20 20 20 20 20 28 70 atch)).. (p
a1e0: 6f 73 74 20 28 6c 69 73 74 2d 72 65 66 20 74 3a ost (list-ref t:
a1f0: 6d 61 74 63 68 20 34 29 29 29 0a 09 20 20 28 6c match 4))).. (l
a200: 69 73 74 20 28 74 77 69 6b 69 3a 6c 69 6e 65 2d ist (twiki:line-
a210: 3e 68 74 6d 6c 20 70 72 65 20 23 66 20 77 69 6b >html pre #f wik
a220: 69 29 0a 09 09 28 74 77 69 6b 69 3a 70 69 63 20 i)...(twiki:pic
a230: 70 69 63 20 73 69 7a 65 20 77 69 6b 69 29 0a 09 pic size wiki)..
a240: 09 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 .(twiki:line->ht
a250: 6d 6c 20 70 6f 73 74 20 23 74 20 77 69 6b 69 29 ml post #t wiki)
a260: 29 29 29 0a 20 20 20 20 20 20 20 28 28 74 2d 6d ))). ((t-m
a270: 61 74 63 68 20 74 77 69 6b 69 3a 75 6e 64 65 72 atch twiki:under
a280: 6c 69 6e 65 2d 70 61 74 74 20 64 61 74 29 0a 09 line-patt dat)..
a290: 28 6c 65 74 20 28 28 70 72 65 20 20 28 63 61 64 (let ((pre (cad
a2a0: 72 20 20 20 74 3a 6d 61 74 63 68 29 29 0a 09 20 r t:match))..
a2b0: 20 20 20 20 20 28 6c 6e 6b 20 20 28 63 61 64 64 (lnk (cadd
a2c0: 72 20 20 74 3a 6d 61 74 63 68 29 29 0a 09 20 20 r t:match))..
a2d0: 20 20 20 20 28 70 6f 73 74 20 28 63 61 64 64 64 (post (caddd
a2e0: 72 20 74 3a 6d 61 74 63 68 29 29 29 0a 09 20 20 r t:match)))..
a2f0: 28 6c 69 73 74 20 28 74 77 69 6b 69 3a 6c 69 6e (list (twiki:lin
a300: 65 2d 3e 68 74 6d 6c 20 70 72 65 20 23 66 20 77 e->html pre #f w
a310: 69 6b 69 29 0a 09 09 28 74 77 69 6b 69 3a 75 20 iki)...(twiki:u
a320: 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 74 6d (twiki:line->htm
a330: 6c 20 6c 6e 6b 20 23 66 20 77 69 6b 69 29 29 0a l lnk #f wiki)).
a340: 09 09 28 74 77 69 6b 69 3a 6c 69 6e 65 2d 3e 68 ..(twiki:line->h
a350: 74 6d 6c 20 70 6f 73 74 20 23 66 20 77 69 6b 69 tml post #f wiki
a360: 29 29 29 29 0a 20 20 20 20 20 20 20 28 28 74 2d )))). ((t-
a370: 6d 61 74 63 68 20 74 77 69 6b 69 3a 74 61 62 6c match twiki:tabl
a380: 65 2d 70 61 74 74 20 64 61 74 29 0a 09 28 6c 65 e-patt dat)..(le
a390: 74 20 28 28 63 65 6c 73 20 20 28 73 74 72 69 6e t ((cels (strin
a3a0: 67 2d 73 70 6c 69 74 20 28 63 61 64 72 20 74 3a g-split (cadr t:
a3b0: 6d 61 74 63 68 29 20 22 7c 22 29 29 29 0a 09 20 match) "|")))..
a3c0: 20 28 74 77 69 6b 69 3a 74 72 20 28 6d 61 70 20 (twiki:tr (map
a3d0: 74 77 69 6b 69 3a 74 64 20 28 74 77 69 6b 69 3a twiki:td (twiki:
a3e0: 6c 69 6e 65 2d 3e 68 74 6d 6c 20 63 65 6c 73 20 line->html cels
a3f0: 23 66 20 77 69 6b 69 29 29 29 29 29 0a 20 20 20 #f wiki))))).
a400: 20 20 20 20 28 65 6c 73 65 20 28 6c 69 73 74 20 (else (list
a410: 64 61 74 29 29 29 29 29 0a 0a 0a 23 7c 0a 28 74 dat)))))...#|.(t
a420: 77 69 6b 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 22 wiki:dat->html "
a430: 61 5c 6e 7b 7b 7b 5c 6e 62 5c 6e 63 5c 6e 64 5c a\n{{{\nb\nc\nd\
a440: 6e 7d 7d 7d 5c 6e 21 65 5c 6e 5b 5b 66 5d 5d 5c n}}}\n!e\n[[f]]\
a450: 6e 5b 5b 67 5d 5d 5c 6e 2a 68 22 20 77 69 6b 69 n[[g]]\n*h" wiki
a460: 29 0a 28 73 3a 6f 75 74 70 75 74 20 28 63 75 72 ).(s:output (cur
a470: 72 65 6e 74 2d 6f 75 74 70 75 74 2d 70 6f 72 74 rent-output-port
a480: 29 20 28 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 ) (twiki:dat->ht
a490: 6d 6c 20 22 21 54 65 73 74 69 6e 67 20 5b 5b 6d ml "!Testing [[m
a4a0: 79 20 66 69 72 73 74 20 6c 69 6e 6b 5d 5d 5c 6e y first link]]\n
a4b0: 2a 20 54 65 73 74 5c 6e 2a 20 46 6f 6f 5c 6e 62 * Test\n* Foo\nb
a4c0: 6c 61 68 22 20 77 69 6b 69 29 29 20 20 20 0a 28 lah" wiki)) .(
a4d0: 73 3a 6f 75 74 70 75 74 20 28 63 75 72 72 65 6e s:output (curren
a4e0: 74 2d 6f 75 74 70 75 74 2d 70 6f 72 74 29 20 28 t-output-port) (
a4f0: 74 77 69 6b 69 3a 64 61 74 2d 3e 68 74 6d 6c 20 twiki:dat->html
a500: 22 5b 5b 61 5d 5d 5c 6e 7b 7b 7b 5c 6e 62 5c 6e "[[a]]\n{{{\nb\n
a510: 20 20 63 5c 6e 20 20 20 64 5c 6e 7d 7d 7d 5c 6e c\n d\n}}}\n
a520: 2a 78 5c 6e 5b 5b 66 5d 5d 5c 6e 5b 5b 67 5d 5d *x\n[[f]]\n[[g]]
a530: 5c 6e 2a 68 22 20 77 69 6b 69 29 29 0a 28 73 3a \n*h" wiki)).(s:
a540: 6f 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d output (current-
a550: 6f 75 74 70 75 74 2d 70 6f 72 74 29 0a 7c 23 0a output-port).|#.
a560: 0a .