pnbp

a terrible but reliable site builder
Log | Files | Refs | README

template.py (1073B)


      1 '''
      2 '  pnbp - pnbp is not a blogging platform
      3 '  template.py
      4 '  Paul Longtine <paul@nanner.co>
      5 '''
      6 
      7 import re, json, yaml
      8 from helper.functions import *
      9 
     10 # Adds in variables defined in pages.json
     11 #
     12 # t = raw template, var = "pagevar" variables in pages.json (<pagename> -> "pagevar")
     13 def generate(t,var,page):
     14 	if page == "index":
     15 		page = ""
     16 
     17 	t = t.replace("%page%",page)
     18 	t = run(t,page)
     19 	
     20 	for search,replace in var.items():
     21 		if search[0] == ":":
     22 			try:
     23 				t.index("%"+search+"%")
     24 				exists = True
     25 
     26 			except:
     27 				exists = False
     28 
     29 			if exists:
     30 				inc = file(replace).read()
     31 				inc = generate(inc,var,page)
     32 				print("Building include: '"+search+"'")
     33 				t = t.replace("%"+search+"%",inc)
     34 
     35 		else:
     36 			t = t.replace("%"+search+"%",replace)
     37 
     38 	return t
     39 
     40 #Takes all code blocks in templates ("{:print("Hi"):}") and executes it, and replaces the block with the "returns" variable
     41 def run(template,page):
     42 	for script in re.findall("{:(.*?):}",template, re.DOTALL):
     43 		returns = ""
     44 		exec(script)
     45 		template = template.replace("{:"+script+":}",returns)
     46 	
     47 	return template