<<set $j = 1>><<while $j lte 10>>\n<<print $j>> countdown: <<set $i = 5>><<while $i gt 0>>\n<<print $i>>... <<set $i = $i - 1>>\n<<endwhile>> BOOM! \n<<set $j = $j + 1>>\n<<endwhile>>\n\n
Emmanuel King Turner (eturnerx / Et / @stormrose)
try { \n\nversion.extensions.whileMacros = {\n major: 1, minor: 0, revision: 0\n};\n\nmacros['while'] = { \n handler: function(place, macroName, params, parser) {\n var srcOffset = parser.source.indexOf(">>", parser.matchStart) + 2,\n src = parser.source.slice(srcOffset),\n endPos = -1,\n condition = parser.fullArgs().trim(),\n body = "",\n nestlevel = 0,\n i = 0;\n \n for (; i < src.length; i++) {\n if (src.substr(i, 8) == "<<while ") {\n nestlevel++;\n }\n if (src.substr(i, 12) == "<<endwhile>>") {\n nestlevel--;\n if (nestlevel < 0) {\n endPos = srcOffset + i + 12;\n break;\n }\n }\n body += src.charAt(i);\n }\n body = body.trim();\n\n if (endPos != -1) {\n parser.nextMatch = endPos;\n try {\n while (internalEval(condition)) {\n new Wikifier(place, body);\n }\n } catch (e) {\n throwError(place, "<<while>> bad condition: " + condition, parser.fullMatch());\n }\n } else {\n throwError(place, "I can't find a matching <<endwhile>>", parser.fullMatch());\n }\n },\n init: function() { }\n};\n\nmacros["endwhile"] = {\n handler: function () {}\n};\n\n} catch(e) { \n throwError(place,"Macro while Error: "+e.message); \n}
TestWhile