; Wiki in Arc v0.01 ; (c) 2008, Andres N. Kievsky ; http://www.ank.com.ar / ank2000@yahoo.com ; ; To run: ; 1. Save this file as wiki.arc ; 2. Load Arc. ; 3. Run it with (load "wiki.arc") - adjust the path as needed. ; 4. visit http://localhost:8080/wiki?page=Sample ; Wiki entries are saved in this hash (= wiki-entries (table)) ; A sample entry (= (wiki-entries "Sample") "This is a simple sample. Create [AnotherPage]. Remember that terms go within [ and ] but without spaces.") ; List all entries (defop list req (show-wikilist)) ; View an entry or edit a new one (defop wiki req (if (no (wiki-entries (arg req "page"))) (show-wikiedit (arg req "page")) (show-wikipage (arg req "page")) )) ; Edit an entry (defop wikiedit req (show-wikiedit (arg req "page"))) (def show-wikilist () (whitepage (pr "List of all pages") (br2) (each e (keys wiki-entries) (link e (wiki-link e)) (br) ))) (def show-wikiedit (page) (whitepage (wikiedit-page-title page) (br2) (aform (fn (req) (= (wiki-entries page) (arg req "content")) (show-wikipage page) ) (wikiedit-editbox page) (br2) (submit)) )) (def wikiedit-editbox (page) (if (no (wiki-entries page)) (textarea "content" 12 60) (textarea "content" 12 60 (pr (wiki-entries page))) ) ) (def wikiedit-page-title (page) (if (no (wiki-entries page)) (pr "Creating page \"" page "\"") (pr "Editing page \"" page "\"")) ) (def show-wikipage (page) (whitepage (pr "Page: \"" page "\"") (link "(edit)" (edit-link page)) (br2) (pr (decode-wiki (wiki-entries page))) (br2) (link "View all entries" "list") (aform (fn (req) (show-wikiedit (arg req "page"))) (pr "Create a new page named: ") (input "page" "" 40) (submit "go")) )) (def edit-link (page) (string "wikiedit?page=" page)) (def wiki-link (page) (string "wiki?page=" page)) (def page-not-found (name) (whitepage (pr "Wiki page \"" name "\" not found. Create it ") (link "here." (edit-link name))) ) ; Convert a wiki-style string to HTML. ; [A] --> A (def decode-wiki (s) (= result "") (= naming nil) (each c s (if naming (case c #\] (do (= naming nil) (= result (string result "" name "") )) #\space (do (= result (string result (string "[" name " "))) (= naming nil) ) (= name (string name c)) ) (case c #\[ (do (= naming t) (= name "")) (= result (string result c)) ) ) ) result ) (def wikipage-exists (name) (wiki-entries name)) (def wikipage (title content) (whitepage (tag b title ))) (asv)