15 lines
		
	
	
		
			910 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			15 lines
		
	
	
		
			910 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
 | 
						|
# Piecewise Readable Filter
 | 
						|
 | 
						|
This is a pandoc filter manipulating [fenced_divs](https://pandoc.org/MANUAL.html#extension-fenced_divs) in pandoc markdown.
 | 
						|
 | 
						|
Inspired by [this joke](https://www.zhihu.com/question/586807834/answer/2973535981).
 | 
						|
 | 
						|
useful refs:
 | 
						|
- https://pandoc.org/lua-filters.html
 | 
						|
 | 
						|
# How does this work?
 | 
						|
 | 
						|
`filter.lua` walks the AST. There are some special leaf nodes with a `include` attr which is a string containing labels of some other divs to be included here.
 | 
						|
 | 
						|
For each of `include` node `i`, we maintain a list `fa[i]` containing nodes with labels on the path `i -> root`. Then for each label `l` in `i`'s include list, one can see that every node in `fa[i]` depends on `l`. Thus we build a digraph G on labels. If G is a DAG, then we can use topological sort to rank its vertices and thus decide the order of substitution; Otherwise, G contains a directed cycle, the filter reports an error. |