').text(text) },
},
+
// macro stage 1...
macro: {
// select filter to post-process text...
@@ -529,15 +541,14 @@ var macro = {
},
// fill/define slot (stage 1)...
- // XXX
slot_args: ['name'],
slot: function(args, text, slots){
var name = args.name
if(slots[name] == null){
slots[name] = text
- // XXX return a slot macro parsable by stage 2...
- return text
+ // return a slot macro parsable by stage 2...
+ return '
'+ text +''
} else if(name in slots){
slots[name] = text
@@ -545,6 +556,7 @@ var macro = {
}
},
},
+
// macro stage 2...
// XXX rename...
macro2: {
@@ -553,7 +565,6 @@ var macro = {
var name = args.name
if(slots[name] == null){
- // XXX ???
return text
} else if(name in slots){
@@ -562,36 +573,73 @@ var macro = {
},
},
- parseArgs: function(macro, args){
- // XXX parse args and populate the dict via .*_args attr...
- // XXX
+
+ parseElem: function(text, stage){
+ var res = {}
+
+ // @
()
+ if(text[0] == '@'){
+ var d = text.match(/@([a-zA-Z-_:]*)\(([^)]*)\)/)
+
+ res.text = ''
+ res.name = d[1]
+ var args = res.args = {}
+
+ var a = d[2].split(/\s+/g)
+ a.forEach(function(e, i){
+ args[(stage[res.name + '_args'] || [])[i]] = e
+ })
+
+ // html-like...
+ } else {
+ var elem = $('').html(text).children().eq(0)
+ res.name = elem.prop('tagName').toLowerCase()
+
+ var args = res.args = {}
+ var a = elem.prop('attributes')
+
+ for(var i=0; i