One of my New Year's resolutions is to release more code, even if it doesn't meet my quality expectations yet... ¹
I'm using this hack for some time now...
It's a nodelet hack which automatically transforms my wiki-ish syntax into monk-code on submit.
This is done transparently because after a reload the monk-code in the textarea is translated back to the original wiki syntax.
Please note that you can still safely use and blend PM-markup as long as you use lowercase characters. The automatically transformed code is always uppercase.
The biggest benefit is that paragraphs <P> are automatically included between two newlines...
...but I added some more goodies over the years. (see examples further down.)
To activate this for yourself you just need to include the following code into your free nodelet.
<script src='?abspart=1;displaytype=displaycode;node_id=1153804;part=3'></script>
(UPDATE: Additionally the "Free Nodelet" must be activated at Nodelet Settings)
I hope the mechanism of the code is obvious enough to be adapted to your needs.
---Code---
// create toggle for wiki feature
// document.writeln('<form name="wiki"><input type="checkbox" name="on
+">wiki?</form><br>');
var textarea=get_textarea();
var form_elements = textarea.form.elements;
form_elements[form_elements.length-1].outerHTML += '<span><input type=
+"checkbox" name="wiki_on"> <a href="?node_id=1153804">*Wiki?*</a> </s
+pan>';
if ( textarea ) {
// activate wikifeature
//document.forms.wiki.elements.on.checked=true;
form_elements.wiki_on.checked=true;
}
var text;
/*
expand wiki code to monk code with capital letters
*/
var info = {
'version': 1.161,
'was' : {},
'is' : {},
'start' : "<"+"!-- Wiki2Monks ",
'end' : " --"+">",
'extract': function (text) {
var text_new = text.replace(new RegExp( this.start + '(.*?)' +
+ this.end + '$' ) ,'');
if ( text_new.length != text.length) { // match
var JSONs = RegExp.$1.split(this.start); // too many st
+rings ?
var JSON_str = JSONs[JSONs.length-1]; // take last o
+ne
// console.log( (text.length - text_new.length ) + ">"+ JS
+ON_str +"<" );
if (! JSON_str) {
JSON_str = {};
}
if (JSON) {
this.was = JSON.parse(JSON_str);
// console.log("Info was: ");
// console.log(this.was);
}
} else {
this.was ={};
}
return text_new;
},
'inject' : function (text) {
text += this.start + this.get_new() + this.end;
return text;
},
'get_new' : function() {
var is = this.was;
is.version = this.version;
var str = '{}';
if (JSON ) {
// is.JSON = true;
str = JSON.stringify(is);
} else { // backup for older browsers
str = '{"version":' + is.version + ', "JSON": false }';
}
this.is = is;
return str;
}
};
function wiki2monks () {
//old document.forms.wiki.elements.on.checked
if ( textarea && form_elements.wiki_on.checked ) {
text=textarea.value;
// constants regex
var singleword = '\\S+' ;
var singleline = '\\S|\\S.*?\\S' ;
//******* protect special areas
text = init_exclusions(text);
text = exclude_all(text);
//******* Replace Inline Markup
//*** normalize newlines
text=text.replace(/\r\n/g,'\n'); // IE sucks!
//****** complete lines but excluded
//*** > quotes -> <I> > ... </I>
text=text.replace(/(^|^\n|\n\n)(> )([^]*?)(?=\n\n|\n$|$)/g,'$1
+<I>> $3</I>'); // quote
//*** autolinks to modules, pragmas, cpan
text=text.replace(/(\s)(\w+::\w[\w:]*)(\s)/g,link_module);
//*** links to perldoc perldoc.perl.org/perlsyn.html#Loop-Cont
+rol
// -> [HTTP(S)://perldoc.perl.org/perlsyn.html
+#Loop-Control|perlsyn#Loop-Control]
text=text.replace(
/(^|\s)(http(s?):\/\/)(perldoc.perl.org)(\/.*?)?\/(\w+
+).html(#.*?)?(\s|$)/g,
'$1[HTTP$3://$4$5/$6.html$7|$6$7]$8'
);
//*** internal links http(s)://www.perlmonks.org/?node_id=7087
+38 -> [ID://...]
text=text.replace(
/(^|\s)(https?:\/\/)(www\.)?perlmonks\.(org|net|com)\/
+(?:index\.pl)?\?node_id=(\d+)(\|.*?)?(\s|$)/g,
'$1[ID://$5$6]$7'
);
//*** autolinks for remaining http(s)://u.r.l.s
text=text.replace(
/(^|\s)(http(s?):\/\/)(\S*?)(\s|$)/g,
'$1[HTTP$3://$4]$5'
);
//*** 'inline code' -> '...'
around_words('inline code', 'C', "'", singleline);
text = exclude_all(text); // protect new code areas
//*** ?documentation? -> [DOC://...]
text=text.replace(/(\s)\?(\S+)\?(\s)/g,'$1[DOC://$2|<tt>$2</tt
+>]$3');
text = exclude_all(text); // protect new doc areas
//*** emphasizer * / _ -> <B><I><U>
around_words('bold', 'B', '*', singleline);
around_words('italic', 'I', '/', singleline);
around_words('underline', 'U', '_', singleline);
/*
//*** emphasizer * / _ -> <B><I><U>
around_words('bold', 'B', '*', singleword);
around_words('italic', 'I', '/', singleword);
around_words('underline', 'U', '_', singleword);
*/
//*** \n=== headlines -> <H6>...</H6>
text = heading(text);
//*** - list items -> <LI>...</LI>
// paragraphs starting with (-)+ = (un)orderd
text=text.replace(/(\n)(\n-\s+[^]*?)(\n\n)/g,'$1<UL\>$2\n<\/UL
+\>\n'); // bullets unordered
text=text.replace(/(\n)(\n\+\s+[^]*?)(\n\n)/g,'$1<OL\>$2\n<\/O
+L\>\n'); // bullets ordered
text=text.replace(/^(\-|\+)(\s+.*?)$/gm,'<LI\>$2'); // bullets
+ (simple)
//*** paragraph
text=text.replace(/(\n\n+)/g,'<P\>$1'); // p
+aragraph
//****** reinclude protected areas
text = include_all(text);
//*** insert info as html comment (version and so on)
text = info.inject(text);
textarea.value=text;
}
// return false;
}
/*
replace words surrounded by wikitags with pm markup
eg " *words* " -> " <B>words</B> "
*/
function around_words ( doc, monk_tag, wiki_tag, inner_re) {
var empty = '(^|\\s|$)';
var marker = '(\\' + wiki_tag + ')';
var inner_grp = '(' + inner_re + ')';
var regex = new RegExp( empty + marker + inner_grp + marker +
+ empty, 'g');
var pre_tag = '<' + monk_tag + '>';
var post_tag = '</' + monk_tag + '>';
var substitute = '$1' + pre_tag + '$3' + post_tag + '$5';
// console.log(doc,regex,substitute);
text=text.replace( regex, substitute);
}
function around_paragraph ( doc, monk_tag, wiki_tag, inner_re) {
//stub
}
/*
transform headlines (both ways)
eg "^=== text" <-> <H5>text</H5>
*/
function heading (text,revert) {
var maps =[
['===', 'H5'],
['==' , 'H4'],
['=' , 'H3'],
];
if (revert) {
for (var i=maps.length-1; i>=0 ;i--) {
var map=maps[i];
var tag0 = new RegExp( '<'+ map[1] + '>','g');
text=text.replace(tag0,map[0]);
var tag1 = new RegExp( '</'+ map[1] + '>','g');
text=text.replace(tag1,'');
}
} else {
for (var i=0; i<maps.length;i++) {
var map=maps[i];
var from = new RegExp( '^(' +map[0]+ ')(\\s.*?)$','gm');
var to = '<'+ map[1] + '>$2</' + map[1] +'>';
// console.log(from + ' -> ' + to);
text=text.replace(from,to);
}
}
return text;
}
/* revert PM markup back to wiki markup */
function monks2wiki () {
//old document.forms.wiki.elements.on.checked
if ( textarea && form_elements.wiki_on.checked ) {
var text=textarea.value;
text = info.extract(text);
// protect areas like code sections
text = exclude_all(text);
// delete <P>
text=text.replace(/<P>/g,'');
// no quote
text=text.replace(/(^|\n\n)<I>(> )([^]*?)<\/I>(?=\n\n|$)/g,
+'$1> $3');
// revert around word markup
text=text.replace(/<\/?I>/g,'/');
text=text.replace(/<\/?B>/g,'*');
text=text.replace(/<\/?U>/g,'_');
// revert listitems
text=text.replace(/<LI>/g,'-');
text=text.replace(/<\/?(U|O)L>/g,'');
// revert <H3>..<H5>
text = heading(text,1);
// reinclude protected areas
text = include_all(text);
// revert ' (was protected)
text=text.replace(/<\/?C>/g,"'");
textarea.value=text;
}
}
function link_module(match, pre, name, post, offset, string) {
var core_modules = {
'B::Deparse' : 1,
};
var protokoll= core_modules[name] ? 'doc' : 'metamod';
return pre+'['+protokoll.toUpperCase()+'://'+name+']'+post;
}
(function (){
var DBG=false;
var counter=0;
// var matches = [];
var exclusions = [];
var delim="\0";
var delim0=delim+"<<";
var delim1=">>"+delim;
init_exclusions =function (text) {
exclusions = [];
counter=0;
text = exclude(text,new RegExp(delim+"+","g"),"delim");
return text;
}
exclude_all = function (text){
text = exclude(text,/<(c|code)>[^]*?<\/\1>/gi, "
+code" );
text = exclude(text,/<(blockquote)>[^]*?<\/\1>/gi, "
+blockquote" );
text = exclude(text,/<(pre)>[^]*?<\/\1>/gi, "
+pre" );
text = exclude(text,/\[(\w+):\/\/.*?\]/g, "
+link" );
// hide <nowiki> as <!--nowiki--> from display
text = text.replace(/<(\/?nowiki)>/g, "<!--$1-->") ;
text = exclude(text,/<!--nowiki-->[^]*?<!--\/nowiki-->/gi, "
+nowiki" );
text = exclude(text,/<\w+\s+.+?>/g, "
+innertag" );
text = exclude(text,new RegExp("<"+"!--[^]*?--"+">","g"), "
+comment" );
if (DBG) console.log(exclusions);
return text;
}
function exclude(text,pattern,name){
var text_out=text;
var match;
while (match = pattern.exec(text)) {
// if (DBG) console.log(match);
var substring = match[0];
var placeholder = name.toUpperCase();
if (match[1]) placeholder += "_"+match[1];
placeholder = delim0 + placeholder + "_" +counter + delim1
+;
text_out = text_out.replace( substring, placeholder );
// matches[counter] = substring;
exclusions.push( [placeholder,substring] );
counter++;
}
return text_out;
}
include_all = function (text){
var exclusion;
while ( exclusion = exclusions.pop() ){
var placeholder = exclusion[0];
var substring = exclusion[1];
substring = substring.replace(/\$/g,'$$$$'); // escape $ t
+o avoid interpolation
text = text.replace( placeholder, substring );
}
return text;
}
})();
/* textareas meant for posting discussions have names ending on '_doct
+ext' */
function get_textarea() {
var T=document.getElementsByTagName("textarea");
for (var i in T) {
var n=T[i].name ;
if (n && n.match(/_doctext$/))
return T[i];
}
}
if (textarea) {
// after pageload revert upercase PM markup to original wikicode
window.onload= monks2wiki;
// on submit of form wikisyntax to PM markup
textarea.form.onsubmit = wiki2monks;
}
// ********** test code **********
/* test heading() */
function t_heading () {
var t='= eins\n== zwei\n=== drei';
//console.log(t);
var a=heading(t);
//console.log(a);
var b=heading(a,1);
// console.log(b);
var a=heading(b);
var b=heading(a,1);
if (t!=b) {
console.log('heading test FAILED: \n'+t+'\n->\n'+a+'\n->\n'+b)
+;
} else {
console.log("heading test OK");
}
}
/* END OF WIKIFEATURE */
---Demo---
Input
no
paragraph
(no separating empty line)
auto paragraph after 2 newlines
= headline 1
== headline 2
=== Headline 3
*bold* /italic/ _underlined_
> paragraph with cited text
'inline code'
?doclink?
Module::Name
Result
no
paragraph (no separating empty line)
auto paragraph after 2 newlines
headline 1
headline 2
Headline 3
bold italic underlined
> paragraph with cited text
inline code
doclink
Module::Name
update
codelink corrected, including another codearea changed the index to 3
footnotes
¹) there is a long To-Do list left, but the idea of open source is to attract collaborators and/or forks ... right? ;-)
bugfixes
- surrounded activation of JS events with if(textarea) { ... } to avoid pages without posting forms (like RAT)
Re: Good Intentions: Wikisyntax for the Monastery
by Discipulus (Canon) on Jan 28, 2016 at 09:13 UTC
|
Wow! thanks!
I'll try it as soon as i can. for the code part i can't offer help but you'have my user's feedback
L*
UPDATE: it works like a charm, To use it you have to:
-
As said in the OP: To activate this for yourself you just need to include the following code into your Free Nodelet Settings.
<script src='?abspart=1;displaytype=displaycode;node_id=1153804;part=3'></script>
- Go to Nodelet Settings and put the two Free Nodelet to something non zero
LanX it does not work for nested tags? <li>Go to [id://25185] and put the two *Free Nodelet* to something non zero</li>
shows:
2. Go to Nodelet Settings and put the two *Free Nodelet* to something
+non zero
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
| [reply] [d/l] [select] |
|
> LanX it does not work for nested tags?
It does , but currently only for one word. (see the regex singleword in the code)
The problem are longer strings, the number of misinterpretations will occur far more often if one allows more than 1 word. Where do I have to draw the line? 3, 4 words ...?
I was thinking of using doubled symbols like ** instead of * for longer passages, like in wikicreole.²
The goal is to make the syntax rules customizable for the user.²
In the end <b><i><u> are not really that important, the other features are far more relevant when typing on a mobile device.
update
Thanks for your interest and contribution! :)
footnotes
²) did I mention my to-do list ? ;-)
| [reply] [d/l] [select] |
|
'ARGV'<br>
seems not to behave correctly: just to add to todo list
your code is in production for me anyway
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
| [reply] [d/l] |
|
Re: Good Intentions: Wikisyntax for the Monastery (ToDo)
by LanX (Saint) on Jan 28, 2016 at 14:55 UTC
|
Todos in the pipline / wishlist
General
- cleaner code to avoid namespace pollution
- create Perl version which is auto-translated to JS-version
- auto create documentation of syntax
- test suite also checking browsers
- move to git-hub
- allow individual customizing of allowed features and used markup
- allow caching of imported JS to spare band width
- general JS-Extension framework to encourage more contributions, see also older discussion
More Features
- DONE auto link URLs starting with http://
- DONE parse for internal url's and create [id://...] links (thus avoiding logouts)
- map doc-links of operators to correct perldoc, like ?and? to [doc://perlop|and]
- support for abbreviation list, i.e. auto linking autolinking SOPW or CPAN with mouseover (' title' -attribute) description
- better support for quotes from commented post
- onchange preview with JS of resulting post
- looks-like-code() heuristic to warn about perlcode outside code-blocks
- move [ ]wiki? checkbox under textarea, show only if any submit button available
- include timestamp after updates
- DONE support for deeplinks in perldocs (jump to right chapter)
- better support for cut&paste from perldoc (web or console)
... to be continued...
Requested
- Wiki support for CB
- look behind assertion in around_words
- treat punctuation like whitespace
| [reply] [d/l] [select] |
|
| [reply] |
|
Yeah I know I got used to adding a space before the first line and after the last.
I already mentioned that problem, but ...
... I did'nt want to expand the regexes to other whitespaces for that ATM because that's a PITA to test in different browsers.
It might become configurable in the future, but without guaranty whatsoever.
Anyway the "bold/italic/underline formatting" isn't that important for me, being able to avoid <p> while typing in my mobile is already worth it. ;-)
Naming this PM extension a "wiki" might be a misnomer/marketing error though... ;-)
| [reply] [d/l] |
|
> If it's an empty line, that line disappears after previewing,
this certainly looks like a bug, THANK YOU! :)
UPDATE
So it's not my wiki code causing it.
I tested as anomonk and the content of the textarea is trimmed from surrounding newlines.
maybe it's the monasteries codebase ... maybe a firefox thing.
for the time being, please use an extra whitespace.
| [reply] |
|
First word works now, also does the last
| [reply] |
|
| [reply] |
|
| [reply] [d/l] |
|
| [reply] |
|
To be able to switch the wiki transformation manually on or off.
It could be better placed below the textarea, but this was already mentioned in the todo list.
NB : it's not in the CB but in the Free Nodelet.
| [reply] |
Re: Good Intentions: Wikisyntax for the Monastery (New Features)
by LanX (Saint) on Feb 02, 2016 at 00:10 UTC
|
New Features:
emphasizer B U I span extended
Now one line instead of one word
Link activation
Pasted URLs are automatically linked,
http://www.google.com
=> [HTTP://www.google.com]
== http://www.google.com
http://perldoc.perl.org/perlsyn.html#Loop-Control
=> [HTTP://perldoc.perl.org/perlsyn.html#Loop-Control|perlsyn#Loop-Control]
== perlsyn#Loop-Control
http://www.perlmonks.org/?node_id=708738
=> [ID://708738]
== LanX
http://www.perlmonks.org/?node_id=708738|test
=> [ID://708738|test]
== test
Version data included (hidden)
<!-- wiki2monks JSON-DATA --> is inserted at end of post
Avoid wikification
<nowiki></nowiki> tags
List items (under construction)
- one
- two
- three
+ one
- two
- three
- one
- two
- three
update 2016-02-12
added optional index.pl to regex for PM URLs
http://www.perlmonks.org/index.pl?node_id=708738
=> [ID://708738]
== LanX
| [reply] [d/l] [select] |
Re: Good Intentions: Wikisyntax for the Monastery
by Discipulus (Canon) on Feb 12, 2016 at 09:03 UTC
|
Ok before i forget this: it seems that three code elements in a row are not displaying correctly.
For example
'one' 'two' 'three'
is displayed as one 'two' three
I was also wondering if you can add punctuation ( .,:;)(!? ) as boundary in addition to withespace.
I'm using your wiki syntax in every post. thanks
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
| [reply] [d/l] [select] |
|
Hi
Thanks for feedback! =)
regarding code sections:
Problem is that JS has no lookbehind assertion for regex.
In order to keep it simple and compatible I'm grabbing the surrounding white spaces too.
If you separate your code by more then one whitespace it works again.
'one' 'two' 'three'
one two three
please note how HTML ignores multiple whitespace.
(This is a very contrived example anyway don't you think? ;)
I could solve this with at least one look ahead assertion, though I'm not sure about incompatibilities. (on todo list now)
Please keep in mind that you can still use the old and consistent markup.
The wiki stuff is more a mix of DWIM and Huffman coding, not a complete replacement. =)
| [reply] [d/l] [select] |
|
> I was also wondering if you can add punctuation ( .,:;)(!? ) as boundary in addition to withespace.
Yes I was thinking about this, but than we need a new mark up for doc links
?print? print
Suggestions?
update
But please be aware that the problem with look around assertions strikes here again.
I have no problem with coding this, but testing would be a pain. ..
| [reply] [d/l] |
|
| [reply] [d/l] [select] |
|
|
|
Re: Good Intentions: Wikisyntax for the Monastery
by FreeBeerReekingMonk (Deacon) on Jan 29, 2016 at 22:33 UTC
|
Just here to say that I find wiki syntax fantastic and this is *GREAT* | [reply] |
|
Thank you ! :)
So you are using it?
(except of this post ;)
| [reply] |
|
I try to, but I did not post much. (update: yay! working now)
| [reply] |
Re: Good Intentions: Wikisyntax for the Monastery (https)
by LanX (Saint) on Jun 22, 2018 at 18:00 UTC
|
Added (long overdue) support for https when autolinking
This
- https://perldoc.perl.org/perldiag.html
- http://perldoc.perl.org/perldiag.html
- https://perldoc.perl.org/perldiag.html#DESCRIPTION
- http://perldoc.perl.org/perldiag.html#DESCRIPTION
- https://www.zeit.de/sport/2018-06/wm-2018-fussball-liveticker#/live
- http://www.zeit.de/sport/2018-06/wm-2018-fussball-liveticker#/live
- https://www.perlmonks.org/?node_id=708738
- http://www.perlmonks.org/?node_id=708738
transforms to
- [HTTPs://perldoc.perl.org/perldiag.html|perldiag]
- [HTTP://perldoc.perl.org/perldiag.html|perldiag]
- [HTTPs://perldoc.perl.org/perldiag.html#DESCRIPTION|perldiag#DESCRIP
+TION]
- [HTTP://perldoc.perl.org/perldiag.html#DESCRIPTION|perldiag#DESCRIPT
+ION]
- [HTTPs://www.zeit.de/sport/2018-06/wm-2018-fussball-liveticker#/live
+]
- [HTTP://www.zeit.de/sport/2018-06/wm-2018-fussball-liveticker#/live]
- [ID://708738]
- [ID://708738]
and shows as
| [reply] [d/l] [select] |
Re: Good Intentions: Wikisyntax for the Monastery
by LanX (Saint) on Feb 08, 2020 at 00:15 UTC
|
<nowiki>
=== headline1
</nowiki>
=== headline2
--> renders now as
=== headline1
headline2
| [reply] [d/l] [select] |
Re: Good Intentions: Wikisyntax for the Monastery
by choroba (Cardinal) on Oct 18, 2016 at 10:19 UTC
|
<c>
perl -we 'say'
</c>
<pre>
perl -we 'say'
</pre>
Update: rendered as
perl -we 'say'
perl -we say
See? No single quotes in the last line!
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
| [reply] [d/l] [select] |
|
<pre>
*a* /b/
# 2 newlines following
https://perlmonks.org/
</pre>
displays now as
*a* /b/
# 2 newlines following
https://perlmonks.org/
update
<blockquote> are now also excluded, but that's experimental.
| [reply] [d/l] [select] |
|
Rather a feature request, don't you think?
Why should pre tags be handled like code tags? °
AFAIR do pre tags never block any other expansion, I wouldn't know why they should.
Could you please elaborate?
Edit:
Please think about how
<pre>a
<code>bla</code>
b</pre>
is rendered
a
bla
b
and tell me why the behavior should be different now.
update Feb 07 2020
°) OK paragraph is a reason, see Re^2: Good Intentions: Wikisyntax for the Monastery (pre-blocks excluded now) | [reply] [d/l] [select] |
|
<nowiki> <pre>
perl -we 'say'
</pre> </nowiki>
<nowiki>
perl -we 'say'
</nowiki>
| [reply] [d/l] [select] |
|
Wrap it in <!-- ... -->?
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
| [reply] [d/l] [select] |
|
Re: Good Intentions: Wikisyntax for the Monastery (issue: "writeln wiki-toggle")
by LanX (Saint) on Feb 13, 2020 at 00:37 UTC
|
I'm experiencing a new issue in Firefox.
The generated HTML tags in the textarea are not translated back to wiki syntax when onLoad fires.
A look into the console logs reveals that
"A call to document.write() from an asynchronously-loaded external script was ignored".
This originates from the creation of the checkbox to switch wikiparser on/off.
I will try to bypass that...
| [reply] |
|
V1.16.0
I deactivated the document.writeln into the "Free Nodelet" and replaced it with an append to outerHTML in the form area.
The Wiki toggle is now just next to the submit buttons under the textarea.
This was on the To-Do list anyway.
Works fine in FF, please test in other browsers. :)
Update
tested in
==== Desktop
==== Mobile
| [reply] [d/l] [select] |
|
Maybe have the <b>*Wiki?*</b> be a link back to Good Intentions: Wikisyntax for the Monastery, in case someone forgets their Wiki syntax from one visit to the next. :-)
Also, the syntax accepted by the nodelet hack seems to be split between the spoiler of the original post and a reply (and here for https extension, and probably other posts that I haven't noticed). It makes it rather disjointed to see what's translated by the nodelet hack. It might be nice to have all the currently-valid syntax summarized somewhere in the root post (maybe in a third section alongside code and demo sections) -- or at least update demo with the additional linking options and the features like <nowiki> which have been added over time.
| [reply] [d/l] [select] |
|
|
|
|
|
|