mirror of
https://github.com/flynx/pWiki.git
synced 2025-11-02 03:50:10 +00:00
added auto-quote filters...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
8128c9b025
commit
7c35da904a
82
pwiki2.js
82
pwiki2.js
@ -922,6 +922,16 @@ module.parser = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// XXX revise...
|
||||||
|
var Filter =
|
||||||
|
module.Filter =
|
||||||
|
function(...args){
|
||||||
|
var func = args.pop()
|
||||||
|
args.length > 0
|
||||||
|
&& Object.assign(func, args.pop())
|
||||||
|
return func }
|
||||||
|
|
||||||
|
|
||||||
// XXX PATH_VARS need to handle path variables...
|
// XXX PATH_VARS need to handle path variables...
|
||||||
// XXX macros and filters should be features for simpler plugin handlng (???)
|
// XXX macros and filters should be features for simpler plugin handlng (???)
|
||||||
var Page =
|
var Page =
|
||||||
@ -949,10 +959,20 @@ object.Constructor('Page', BasePage, {
|
|||||||
return source
|
return source
|
||||||
.replace(/test/g, 'TEST') },
|
.replace(/test/g, 'TEST') },
|
||||||
|
|
||||||
wikiword: function(source){
|
wikiword: Filter(
|
||||||
|
{quote: 'quote-wikiword'},
|
||||||
|
function(source){
|
||||||
|
// XXX
|
||||||
|
return source }),
|
||||||
|
'quote-wikiword': function(source){
|
||||||
// XXX
|
// XXX
|
||||||
return source },
|
return source },
|
||||||
markdown: function(source){
|
|
||||||
|
markdown: Filter(
|
||||||
|
{quote: 'quote-markdown'},
|
||||||
|
function(source){
|
||||||
|
return source }),
|
||||||
|
'quote-markdown': function(source){
|
||||||
// XXX
|
// XXX
|
||||||
return source },
|
return source },
|
||||||
},
|
},
|
||||||
@ -989,7 +1009,7 @@ object.Constructor('Page', BasePage, {
|
|||||||
// | -<filter> <filter-spec>
|
// | -<filter> <filter-spec>
|
||||||
//
|
//
|
||||||
// XXX support .NO_FILTERS ...
|
// XXX support .NO_FILTERS ...
|
||||||
filter: function*(args, body, state, expand=true){
|
filter: function(args, body, state, expand=true){
|
||||||
var that = this
|
var that = this
|
||||||
var filters = state.filters =
|
var filters = state.filters =
|
||||||
state.filters ?? []
|
state.filters ?? []
|
||||||
@ -1000,7 +1020,17 @@ object.Constructor('Page', BasePage, {
|
|||||||
[outer_filters] }
|
[outer_filters] }
|
||||||
|
|
||||||
// merge in new filters...
|
// merge in new filters...
|
||||||
filters.splice(filters.length, 0, ...Object.values(args))
|
var local = Object.values(args)
|
||||||
|
filters.splice(filters.length, 0, ...local)
|
||||||
|
|
||||||
|
// trigger quote-filter...
|
||||||
|
var quote = local
|
||||||
|
.map(function(filter){
|
||||||
|
return that.filters[filter]['quote'] ?? [] })
|
||||||
|
.flat()
|
||||||
|
quote.length > 0
|
||||||
|
&& this.macros['quote-filter']
|
||||||
|
.call(this, Object.fromEntries(Object.entries(quote)), null, state)
|
||||||
|
|
||||||
// local filters...
|
// local filters...
|
||||||
if(body){
|
if(body){
|
||||||
@ -1022,7 +1052,7 @@ object.Constructor('Page', BasePage, {
|
|||||||
state.filters = outer_filters
|
state.filters = outer_filters
|
||||||
|
|
||||||
// parse the body after we are done expanding...
|
// parse the body after we are done expanding...
|
||||||
yield function(state){
|
return function(state){
|
||||||
var outer_filters = state.filters
|
var outer_filters = state.filters
|
||||||
state.filters = this.__parser__.normalizeFilters(filters)
|
state.filters = this.__parser__.normalizeFilters(filters)
|
||||||
var res =
|
var res =
|
||||||
@ -1115,8 +1145,7 @@ object.Constructor('Page', BasePage, {
|
|||||||
// macro with one exception, when used in quote, the body is
|
// macro with one exception, when used in quote, the body is
|
||||||
// not expanded...
|
// not expanded...
|
||||||
//
|
//
|
||||||
// XXX can we set default quote filters???
|
// XXX need a way to escape macros -- i.e. include </quote> in a quoted text...
|
||||||
// XXX need a way to escape macros...
|
|
||||||
quote: function(args, body, state){
|
quote: function(args, body, state){
|
||||||
var src = args.src //|| args[0]
|
var src = args.src //|| args[0]
|
||||||
var text = args.text
|
var text = args.text
|
||||||
@ -1133,16 +1162,37 @@ object.Constructor('Page', BasePage, {
|
|||||||
if(!text){
|
if(!text){
|
||||||
return }
|
return }
|
||||||
|
|
||||||
var filters = args.filter
|
var filters =
|
||||||
&& Object.fromEntries(
|
args.filter
|
||||||
Object.entries(
|
&& args.filter
|
||||||
args.filter
|
.trim()
|
||||||
.trim()
|
.split(/\s+/g)
|
||||||
.split(/\s+/g)))
|
|
||||||
|
|
||||||
return filters ?
|
// NOTE: we are delaying .quote_filters handling here to
|
||||||
[...this.macros.filter.call(this, filters, text, state, false)]
|
// make their semantics the same as general filters...
|
||||||
: text },
|
// ...and since we are internally calling .filter(..)
|
||||||
|
// macro we need to dance around it's architecture too...
|
||||||
|
// NOTE: since the body of quote(..) only has filters applied
|
||||||
|
// to it doing the first stage of .filter(..) as late
|
||||||
|
// as the second stage here will have no ill effect...
|
||||||
|
return function(state){
|
||||||
|
// add global quote-filters...
|
||||||
|
filters =
|
||||||
|
(state.quote_filters
|
||||||
|
&& !(filters ?? []).includes(this.ISOLATED_FILTERS)) ?
|
||||||
|
[...state.quote_filters, ...(filters ?? [])]
|
||||||
|
: filters
|
||||||
|
if(filters){
|
||||||
|
filters = Object.fromEntries(Object.entries(filters))
|
||||||
|
return this.macros.filter
|
||||||
|
.call(this, filters, text, state, false)
|
||||||
|
.call(this, state) }
|
||||||
|
return text } },
|
||||||
|
// very similar to @filter(..) but will affect @quote(..) filters...
|
||||||
|
'quote-filter': function(args, body, state){
|
||||||
|
var filters = state.quote_filters =
|
||||||
|
state.quote_filters ?? []
|
||||||
|
filters.splice(filters.length, 0, ...Object.values(args)) },
|
||||||
//
|
//
|
||||||
// <slot name=<name>/>
|
// <slot name=<name>/>
|
||||||
//
|
//
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user