I read about it a few days ago, forgot about, found it again. *A wiki engine in four lines of Perl. It used to be available from Casey West’s Website.*
It looks ugly since both backlinks and edit box are part of the output. But then again that also makes it totally easy to use...
#!/usr/bin/perl use CGI':all';path_info=~/\w+/;$_=`grep -l {body}amp; *`.h1({body}amp;).escapeHTML$t=param(t) ||`dd<{body}amp;`;open F,">{body}amp;";print F$t;s/htt\S+|([A-Z]\w+){2,}/a{href,{body}amp;},{body}amp;/eg; print header,pre"$_<form>",submit,textarea t,$t,9,70
Features:
1. Automatic link back
2. Linking of WikiWords
3. Linking of URLs
In all fairness, let me list the non-features:
1. No recent changes
2. No version history
3. No inlined images
4. No text formatting rules
Later I found another very small one, in **eleven lines of Python.** It looks better than the four lines of Perl above, because backlink search only happens when you click on the title, and editing a page only happens when you click on the edit link.
http://infomesh.net/2003/wypy/
It even has lists! No old versions and no recent changes, of course.
#!/usr/bin/python import re,os,cgi;d,h=os.listdir('.'),'<a href=wy?';p,e,g,s=tuple(map(cgi.parse( ).get,'pegs'));f=lambda s:reduce(lambda s,(r,q):re.sub('(?m)'+r,q,s),(('\r','') ,('([A-Z][a-z]+){2,}',lambda m:('%s'+h+'e=%s>?</a>',h+'g=%s>%s</a>')[m.group(0) in d]%((m.group(0),)*2)),('^{{ ,'<ul>'),('^# ','<li>'),('^}} ,'</ul>'),('(ht\ tp:[^<>"\s]+)',h[:-3]+r'\1>\1</a>'),('\n\n','<p>')),s);o,g=lambda y:(y in d and cgi.escape(open(y).read()))or'',(g or p and[open(p[0].strip('./'),'w').write(s[ 0])or p[0]]or[0])[0];print'Content-Type:text/html\n\n'+(s and', '.join([f(n)for n in d if s[0]in o(n)])or'')+(e and'<form action=wy?p=%s method=POST><textarea\ name=s rows=8 cols=50>%s</textarea><input type=submit></form>'%(e[0],o(e[0])) or'')+(g and'<h1>%ss=%s>%s</a>,%se=%s>edit</a></h1>'%(h,g,g,h,g)+f(o(g))or'')
The author is Sean B. Palmer, has worked on other small wikis – Wikke used PHP, bash, and Javascript.
See Shortest Wiki Contest.
The parser I use for Oddmuse has been inspired by TinyWiki.
Based on the very small wiki above, I wrote one that has only the textarea and uses CSS to hide the borders. It needs some javascript to make doubleclicking a word a link or something.
#!/usr/bin/perl use CGI':all'; ($n=path_info)=~s|.*/||; # pagename ($t=param(t)||`dd</tmp/$n`)=~s|\n+$||; # text received or read open F,">/tmp/$n"; print F"$t\n"; close F; # save every time print header,h1($n),'<form>',textarea({-name=>t,-default=>$t, -style=>'width:100%;height:80%;border:0;'}),submit
Features:
Here’s an attempt at some javascript that doesn’t work:
#!/usr/bin/perl use CGI':all'; ($n=path_info)=~s|.*/||; # pagename ($t=param(t)||`dd</tmp/$n`)=~s|\n+$||; # text received or read open F,">/tmp/$n"; print F"$t\n"; close F; # save every time $JSCRIPT=<<END; <script type="text/javascript">//<![CDATA[ function go() { window.location = 'http://localhost/cgi-bin/small.pl/' + window.getSelection(); } //]]></script> END print header,$JSCRIPT,h1($n),'<form>', textarea({-name=>t,-default=>$t,-style=>'width:100%;height:80%;border:0;'}), submit('Save'), submit({-name=>'Go',-onmousedown=>'go()'})
(Please contact me if you want to remove your comment.)
⁂
The 100R website uses an extremely simple wiki in about 200 lines of C89, with redlinks, templating and includes support, by @neauoire.
– Alex 2021-04-13 09:25 UTC
---
@darkstar pointed this one out to me:
Speed! That is the only reason why I wrote awkiawki. I needed a WikiWiki for a Sun Sparcstation 10 (36MHz) and all Perl and Python solutions were far to slow. – awkiawki
– Alex 2021-11-15 12:46 UTC