refacoring: now in macros is the parser and not the page -- not sure how that happened =)

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2026-07-01 20:07:40 +03:00
parent 5cabfd0754
commit d967a15a5d

View File

@ -223,6 +223,7 @@ module.BaseParser = {
// NOTE: this unifies the body, body argument and text argument (in // NOTE: this unifies the body, body argument and text argument (in
// order of priority) and passes the value in the body macro // order of priority) and passes the value in the body macro
// handler argument. // handler argument.
// XXX should a macro be run in the context of the page or the parser???
callMacro: function(page, macro, args, body, state, ...rest){ callMacro: function(page, macro, args, body, state, ...rest){
do { do {
macro = this.macros[macro] macro = this.macros[macro]
@ -244,7 +245,7 @@ module.BaseParser = {
body body
?? args.body ?? args.body
?? args.text } ?? args.text }
return macro.call(page, this, args, body, state, ...rest) }, return macro.call(this, page, args, body, state, ...rest) },
// Strip comments... // Strip comments...
@ -1159,21 +1160,21 @@ module.parser = {
'': 'arg', '': 'arg',
arg: Macro( arg: Macro(
['name', 'else', ['local']], ['name', 'else', ['local']],
function(parser, args, _, state){ function(page, args, _, state){
var v = (this.args ?? {})[args.name] var v = (page.args ?? {})[args.name]
|| (!args.local || (!args.local
&& (this.renderer && (page.renderer
&& this.renderer.args[args.name]) && page.renderer.args[args.name])
|| (this.root || (page.root
&& this.root.args[args.name])) && page.root.args[args.name]))
v = v === true ? v = v === true ?
args.name args.name
: v : v
return v return v
|| (args['else'] || (args['else']
&& parser.expand(this, args['else'], state)) }), && this.expand(this, args['else'], state)) }),
args: function(){ args: function(page){
return pwpath.obj2args(this.args) }, return pwpath.obj2args(page.args) },
// XXX EXPERIMENTAL... // XXX EXPERIMENTAL...
// //
@ -1193,13 +1194,14 @@ module.parser = {
/*/ /*/
['shown', 'hidden']], ['shown', 'hidden']],
//*/ //*/
function(parser, args, body, state){ function(page, args, body, state){
var that = this
var name = args.name var name = args.name
if(!name){ if(!name){
return '' } return '' }
return Promise.awaitOrRun( return Promise.awaitOrRun(
parser.parseNested(this, name, state), this.parseNested(page, name, state),
function(name){ function(name){
// XXX INC_DEC // XXX INC_DEC
var inc = args.inc var inc = args.inc
@ -1270,7 +1272,7 @@ module.parser = {
if(text){ if(text){
return Promise.awaitOrRun( return Promise.awaitOrRun(
//state.waitNested, //state.waitNested,
parser.parseNested(this, text, state), that.parseNested(page, text, state),
function(value){ function(value){
text = vars[name] = value text = vars[name] = value
return show ?? false ? return show ?? false ?
@ -1279,12 +1281,13 @@ module.parser = {
// get... // get...
} else { } else {
return handleFormat(vars[name] ?? '') } }) }), return handleFormat(vars[name] ?? '') } }) }),
vars: function(parser, args, body, state){ vars: function(page, args, body, state){
var that = this
var lst = [] var lst = []
for(var [name, value] of Object.entries(args)){ for(var [name, value] of Object.entries(args)){
lst.push( lst.push(
parser.parseNested(this, name, state), this.parseNested(page, name, state),
parser.parseNested(this, value, state)) } this.parseNested(page, value, state)) }
var vars = state.vars ??= {} var vars = state.vars ??= {}
return Promise.awaitOrRun( return Promise.awaitOrRun(
state.waitNested, state.waitNested,
@ -1337,12 +1340,12 @@ module.parser = {
// NOTE: this is needed to be able to control the sequence of // NOTE: this is needed to be able to control the sequence of
// overrides in nesteed slots... // overrides in nesteed slots...
lazy( lazy(
function(parser, args, body, state){ function(page, args, body, state){
var that = this var that = this
var name = args.name var name = args.name
return Promise.awaitOrRun( return Promise.awaitOrRun(
parser.parseNested(this, name, state), this.parseNested(page, name, state),
function(name){ function(name){
var slots = state.slots ??= {} var slots = state.slots ??= {}
@ -1365,7 +1368,7 @@ module.parser = {
slot.splice(0, slot.length, placeholder) slot.splice(0, slot.length, placeholder)
// expand body... // expand body...
body = body ? body = body ?
parser.expand(that, body ?? [], state) that.expand(page, body ?? [], state)
: body : body
// if slot not overriden, write our value... // if slot not overriden, write our value...
if(slot[0] === placeholder){ if(slot[0] === placeholder){
@ -1443,7 +1446,7 @@ module.parser = {
// is this a promise/value, iterable promise a generator // is this a promise/value, iterable promise a generator
// an async generator, ... or a combination/stack of the above??? // an async generator, ... or a combination/stack of the above???
lazy( lazy(
function(parser, args, body, state, key='included', handler){ function(page, args, body, state, key='included', handler){
var that = this var that = this
var recursive = var recursive =
@ -1452,12 +1455,12 @@ module.parser = {
?? body ?? body
?? state.recursive ?? state.recursive
var base = this.basepath var base = page.basepath
// XXX we do this before or after we parse??? // XXX we do this before or after we parse???
var src = this.resolvePathVars(args.src) var src = page.resolvePathVars(args.src)
return Promise.awaitOrRun( return Promise.awaitOrRun(
parser.parseNested(this, src, state), this.parseNested(page, src, state),
function(src){ function(src){
var cache = state.cache ??= {} var cache = state.cache ??= {}
if(cache[src]){ if(cache[src]){
@ -1489,14 +1492,14 @@ module.parser = {
// content handler... // content handler...
handler ??= handler ??=
function(parser, text, state){ function(page, text, state){
return parser._parse(that, text, state) } return this._parse(page, text, state) }
var pageHandler = var pageHandler =
function(text, i, l){ function(text, i, l){
return [ return [
handler.call(that, handler.call(that,
parser, page,
text, text,
// isolated up -- will see all // isolated up -- will see all
// the state but can have no // the state but can have no
@ -1510,7 +1513,7 @@ module.parser = {
// join... // join...
(args.join (args.join
&& i < l.length - 1) ? && i < l.length - 1) ?
parser._parse(that, args.join, state) that._parse(page, args.join, state)
: [] : []
].flat() } ].flat() }
var resultHandler = var resultHandler =
@ -1530,7 +1533,7 @@ module.parser = {
// get and run things... // get and run things...
return Promise.awaitOrRun( return Promise.awaitOrRun(
that.get(src).raw, page.get(src).raw,
function(pages){ function(pages){
pages = pages instanceof Array ? pages = pages instanceof Array ?
pages pages