diff --git a/wiki.js b/wiki.js
index dc7e926..2286a46 100755
--- a/wiki.js
+++ b/wiki.js
@@ -139,15 +139,8 @@ var macro = {
// NOTE: this will render the page in the caller's context.
// NOTE: included pages are rendered completely independently
// from the including page.
- //
- // XXX do we need to control the rendering of nested pages???
- // ...currently I do not think so...
- // ...if required this can be done via global and local
- // filters... (now filters are only local)
- // XXX do we need to render just one slot??? (slot arg)
- // e.g. include PageX SlotY
include: Macro('Include page',
- ['src'],
+ ['src', 'text'],
function(context, elem, state){
var path = $(elem).attr('src')
@@ -234,7 +227,9 @@ var macro = {
return elem
}),
- macro: Macro('Define/fill slot',
+ // XXX revise macro definition rules -- see inside...
+ // XXX do we need macro namespaces or context isolation (for inculdes)???
+ macro: Macro('Define/fill macro',
['name', 'src'],
function(context, elem, state, parse){
elem = $(elem)
@@ -245,7 +240,14 @@ var macro = {
if(name){
- if(elem.html().trim() != ''){
+ // XXX not sure which definition rules to use for macros...
+ // - first define -- implemented now
+ // - last define -- as in slots
+ // - first contenr -- original
+ //if(elem.html().trim() != ''){
+ if(elem.html().trim() != ''
+ // do not redefine...
+ && state.templates[name] == null){
state.templates[name] = elem.clone()
} else if(name in state.templates) {
@@ -402,6 +404,13 @@ var macro = {
//
// XXX support quoted text...
// XXX need to quote regexp chars of .__include_marker__...
+ // XXX include recursion is detected but path recursion is not at
+ // this point...
+ // e.g. the folowing paths resolve to the same page:
+ // /SomePage
+ // /SomePage/SomePage
+ // or any path matching:
+ // /\/(SomePage\/)+/
parse: function(context, text, state, skip_post, pattern){
var that = this
@@ -409,6 +418,7 @@ var macro = {
state.filters = state.filters || []
state.slots = state.slots || {}
state.include = state.include || []
+ state.seen = state.seen || []
//pattern = pattern || RegExp('@([a-zA-Z-_]+)\\(([^)]*)\\)', 'mg')
pattern = pattern || RegExp.apply(null, this.__macro__pattern__)
@@ -542,6 +552,12 @@ var macro = {
var elem = $(page.shift())
page = page.pop()
+ var seen = state.seen.slice()
+ if(seen.indexOf(page.path) >= 0){
+ return elem.html()
+ }
+ seen.push(page.path)
+
return page.map(function(page){
return $('