mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-11-04 04:50:09 +00:00 
			
		
		
		
	added macro nested blocks (still experimenting)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b7e63b15c2
								
							
						
					
					
						commit
						c199f97802
					
				
							
								
								
									
										25
									
								
								pwiki2.js
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								pwiki2.js
									
									
									
									
									
								
							@ -377,13 +377,16 @@ function*(str){
 | 
			
		||||
// 			type: 'inline'
 | 
			
		||||
// 				| 'element'
 | 
			
		||||
// 				| 'block',
 | 
			
		||||
// 			block: [ .. ],
 | 
			
		||||
// 			block: [
 | 
			
		||||
// 				<item>,
 | 
			
		||||
// 				...
 | 
			
		||||
// 			],
 | 
			
		||||
//
 | 
			
		||||
//			// rest of items are the same as for lex(..)
 | 
			
		||||
// 			...
 | 
			
		||||
// 		}
 | 
			
		||||
//
 | 
			
		||||
// XXX normalize lex to be a generator???
 | 
			
		||||
// XXX normalize lex to be a generator (???)
 | 
			
		||||
var group = 
 | 
			
		||||
module.group =
 | 
			
		||||
function*(lex, to=false){
 | 
			
		||||
@ -391,15 +394,27 @@ function*(lex, to=false){
 | 
			
		||||
	// 		generator even if the end is not reached...
 | 
			
		||||
	while(true){
 | 
			
		||||
		var {value, done} = lex.next()
 | 
			
		||||
		// check if unclosed blocks remaining...
 | 
			
		||||
		if(done){
 | 
			
		||||
			if(to){
 | 
			
		||||
				throw new Error('Premature end of unpit: Expected closing "'+ to +'"') }
 | 
			
		||||
				throw new Error(
 | 
			
		||||
					'Premature end of unpit: Expected closing "'+ to +'"') }
 | 
			
		||||
			return }
 | 
			
		||||
		// assert nesting rules...
 | 
			
		||||
		if(macros[value.name] instanceof Array
 | 
			
		||||
				&& macros[value.name].includes(to)){
 | 
			
		||||
			throw new Error(
 | 
			
		||||
				'Unexpected "'+ value.name +'" macro' 
 | 
			
		||||
					+(to ? 
 | 
			
		||||
						' in "'+to+'"' 
 | 
			
		||||
						: '')) }
 | 
			
		||||
		// open block...
 | 
			
		||||
		if(value.type == 'opening'){
 | 
			
		||||
			value.body = [...group(lex, value.name)]
 | 
			
		||||
			value.type = 'block'
 | 
			
		||||
			yield value
 | 
			
		||||
			continue
 | 
			
		||||
		// close block...
 | 
			
		||||
		} else if(value.type == 'closing'){
 | 
			
		||||
			if(value.name != to){
 | 
			
		||||
				throw new Error('Unexpected closing "'+ value.name +'"') }
 | 
			
		||||
@ -409,6 +424,7 @@ function*(lex, to=false){
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var parse = 
 | 
			
		||||
module.parse =
 | 
			
		||||
function*(str){
 | 
			
		||||
	yield* group(lex(str)) }
 | 
			
		||||
 | 
			
		||||
@ -442,6 +458,9 @@ var macros = {
 | 
			
		||||
	quote: function(){},
 | 
			
		||||
	macro: function(){},
 | 
			
		||||
	slot: function(){},
 | 
			
		||||
 | 
			
		||||
	// nesting rules...
 | 
			
		||||
	'else': ['macro'],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user