From 52c0143a9d5c66ea65ac70cadef6220074bfe453 Mon Sep 17 00:00:00 2001 From: MReenen Date: Wed, 20 Oct 2021 17:23:31 +0200 Subject: [PATCH] Inital commit --- __pycache__/renderMD.cpython-39.pyc | Bin 0 -> 1882 bytes __pycache__/renderSCSS.cpython-39.pyc | Bin 0 -> 436 bytes header.py | 31 +++++ index.yml | 71 ++++++++++ render.py | 178 ++++++++++++++++++++++++++ render.sh | 10 ++ renderMD.py | 48 +++++++ renderSCSS.py | 13 ++ sidemenu.py | 50 ++++++++ template.html | 18 +++ 10 files changed, 419 insertions(+) create mode 100644 __pycache__/renderMD.cpython-39.pyc create mode 100644 __pycache__/renderSCSS.cpython-39.pyc create mode 100644 header.py create mode 100644 index.yml create mode 100644 render.py create mode 100644 render.sh create mode 100644 renderMD.py create mode 100644 renderSCSS.py create mode 100644 sidemenu.py create mode 100644 template.html diff --git a/__pycache__/renderMD.cpython-39.pyc b/__pycache__/renderMD.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c78f3a3b116f27eee0ee4355fdbbcfcad59daa33 GIT binary patch literal 1882 zcmZ`(Pj4GV6rY)0uh(lQ1R5wQ0a=l#WTSKu7dW_45fv0feQ1%8wtuY6&ZKd(f1H^y zDQo+baO6AK$9@NHe2Y0DajL{8$cgu6Z8wN^tbOzTdFIV~zxU#ejex+q_~ZNd&l(|r zqi}V(Al!jZJq5xErzweWXDQ8C#4;yxXr*_fnzeh8#~tookf{D0;Wh4E5bg=*+=+bQ zpOdH|m}u}i_kU+mz#BXO&nBl2NvHV=?jZdRGyeTpp77!#k$Zu?ipnVGOeQihWj7=F2zO*}>?C~aVz5R@ZQ+cjE;B0PBuk;WdL|`Mq zC^xDoPruUj=l;9_66R{NU$WZ=W%Kca;j?2MOIe(iY#$YJtuVA()*dIk(B=D+M^7iS zC*4`Q8@9VEL1I2%ApyT587F0P_Ne`&8zPyMY&I#cTi^fw6QxdIYD&xD$ke46rEww* zlfrmP#4I=f+XvL(@uQEna+)#ril)qefEXzX+*?H1#Fhag3W3To@Wh z^<11G|B}deA-ct zR~G}}4t#1Ch#(OlDq@I1z_zpO2A9{MZl1Yz4+@lGk%U|W8xL451hx;K1@;fX0N9}M z7I54WYR(ChJ?_q_hD+wo+71nfa9q&2y8r+oP`Eb-fTL_-Q}18Wwk><)z_UwdG7BX1 zJt?<(nDB$itQT4)=+vOXqjac^cT`BIn|-=*pBKYiV!mEN!IVgkN;M(+_dlu#pzh+VUd?NdZRXvb-Zu&xA!KqJ^S|2K~Uc8jiflR z`DiC;tki3>O-(OEdvHm^OS<22<#mY3X2fPl)=}I+g4n&1jmBYGBqw-88w?8HgmBxY z<;QPI#@f3NrSJ!XJkG>mV1mIQEBH7?zBL$}j^nhlNKCT)1j*}*Er+#`+dyu>r*NbL zv};z=VP*437+B=#82U+ds0qXiEug)MT>WqEVo7W{_JGki5$QQhQjJh!2tAmH z0L%q}X^913eM4o(HEuByxnUVMt`sphwInT+fX;W6OiUffx5HEz_ZWu$l}A)qTJ>%h zA5mc`fKK(P{0uammPAA3WkVI8#1cD7Vw}+jw#3WH0}xvd9=U-YcurL|%unQ3mk238 jMFSpuC60A6jo+(kaDc;8Z2|G=7KGw6e|xLx(U$u!d)Lj4 literal 0 HcmV?d00001 diff --git a/__pycache__/renderSCSS.cpython-39.pyc b/__pycache__/renderSCSS.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..973bb6eef06c577944cbbe8a170cffe15e855c0d GIT binary patch literal 436 zcmYjNu};G<5VakLMiE7fh$$0N7qSCFpduueE&(BROY9Q_96Pd8p+Y;Am4Bck|A54Q zcxB=jm^fFJ=t=k9y*r)n&Sk%!612tVRr!Vd9mJ+F6ldse4?&VKkyJ88$5cj=zmhSN ztRREM_Hwecsx$$Y5IemWF%;ywMEFmhv@DAp(8VVdBNtiqYrFG z-=igw?2XPt%$J0cS(p=zJhcPrw_ImyeK&|bH!Wz-UFn?f3DdN-0?#d!(#Jv>2ZP8* z&I;c{xD3TeIQK#9HctJ$$?r`Ad1C=I=={QnNdvlbd8u7pDL9{W<`$~Fg9fkaz~$Nm zTy;G`b-m8#7PJIg42$Bho%-}&CgH*Wgr;nlCe-d=j7xE0up>sX%B=R;fIb#{a?%(% OQE(dm&T#}DC+rVBAZ&^N literal 0 HcmV?d00001 diff --git a/header.py b/header.py new file mode 100644 index 0000000..a921a9f --- /dev/null +++ b/header.py @@ -0,0 +1,31 @@ +import yaml + +from render import listPages + +firstItem = True + +def headerGen(item, root): + global firstItem + if(root and not firstItem): + separator = '|' + else: + separator = '' + firstItem = False + + if(not ('klickable' in item and item['klickable'] is False)): + item['lable'] = '' + item["lable"] + '' + + if('sub' not in item): + return '
  • ' + separator + '' + item["lable"] + '
  • ' + + data = '' + subicon = '' + if(root): + subicon = ' ' + data += ' data-hassub="true"' + + html = '' + separator + '' + item["lable"] + subicon + '' + diff --git a/index.yml b/index.yml new file mode 100644 index 0000000..064db0a --- /dev/null +++ b/index.yml @@ -0,0 +1,71 @@ +--- +- lable: Home + url: / +# - lable: Niet vergeten +# url: /niet-vergeten.html +- lable: HR + sub: + - lable: Argief + klickable: False + sub: + - WIS10 + - ELE10 + - PEE10 + - ELE20 + + - WIS20 + - PEE20 + - EPS10 + - REG10 + + - ANE10 + - EPS20 + - lable: Fablab making + url: fablab-making.html + - lable: WIS20 + sidebar: + - lable: Diffrencieren + url: diffrencieeren.html + - lable: Supsitutsie + url: supsitutsie.html + - lable: Breuksplitsen + url: breuksplitsen.html + - lable: Parsiele int. + url: parsiel.html + - lable: Fourier transform + url: fourier-transformatie.html + - lable: Divrenciaal vergeleiking + url: difrenciaal-vergeleiking.html + - lable: 2de Orde DV + url: 2de-orde-dv.html + - lable: REG10 + url: REG10-2 + sidebar: + - lable: Index + url: . + - lable: Laplace + url: laplace.html + - lable: Voorbeelden + url: voorbeelden.html + - lable: Eignenschappen + url: eignenschappen.html + - lable: P-Regelaar + url: pregelaar.html + - lable: polen en nulpunten + url: polen-en-nulpunten.html + +# - lable: Projecten +# klickable: False +# url: projecten +# sub: +# - lable: MR Function Board +# url: mr-fn-board +# sidebar: +# - lable: blog +# url: blog.html +# - lable: Button layout +# url: button-layout.html +# - lable: PCB +# url: pcb.html +# - lable: Puzzel Game +# url: puzzel-game diff --git a/render.py b/render.py new file mode 100644 index 0000000..dc9855f --- /dev/null +++ b/render.py @@ -0,0 +1,178 @@ +import os +import yaml +import shutil +from jinja2 import Template + +# from header import headerGen +from renderMD import renderMD +from renderSCSS import renderSCSS + +with open('template.html', 'r') as file: + template = Template(file.read()) + +srcDir = '../notes' +destDir = '../public' + +firstItem = True + +def headerGen(item, root): + global firstItem + if(root and not firstItem): + separator = '|' + else: + separator = '' + firstItem = False + + lable = item['lable'] + + if(not ('klickable' in item and item['klickable'] is False)): + lable = '' + item["lable"] + '' + + if('sub' not in item): + return '
  • ' + separator + '' + lable + '
  • ' + + data = '' + subicon = '' + if(root): + subicon = ' ' + data += ' data-hassub="true"' + + html = '' + separator + '' + lable + subicon + '' + +def sidebarGen(item, root): + if(not ('klickable' in item and item['klickable'] is False)): + item['lable'] = '' + item["lable"] + '' + + if('sub' not in item): + return '
  • ' + item["lable"] + '
  • ' + + html = '
  • ' + item["lable"] + '
  • ' + +def listPages(items, parentUrl, cb): + root = False + if(firstItem): + root = True + html = "" + for item in items: + + if(type(item) is dict): + if('url' not in item): + if('lable' not in item): + print('url or lable reqired') + continue + if('klickable' in item and item['klickable'] is False): + item["url"] = parentUrl + else: + item["url"] = parentUrl + '/' + item["lable"] + + if(item['url'] == ''): + item['url'] = '/' + + if(item["url"][0] != '/'): + item["url"] = parentUrl + '/' + item["url"] + + #WARNING: XSS vanrable! + if('lable' not in item): + item["lable"] = item["url"].split('/')[-1] + + # if(not ('klickable' in item and item['klickable'] is False)): + html += cb(item, root) + continue + + if(type(item) is str): + html += cb({"lable": item, "url": parentUrl + '/' + item}, root) + continue + + return html + +sidebar = '' +def renderPage(item, root): + global srcDir, destDir, header, template, sidebar + html = '' + + srcFile = item['url'] + if(os.path.isdir(srcDir + item['url'])): + if(item['url'][-1] == '/'): + srcFile = item['url'] + 'index.md' + else: + srcFile = item['url'] + '/index.md' + elif(len(item['url'].split('.')) > 1 and len(item['url'].split('.')[-1]) < 5): + srcFile = '.'.join(item['url'].split('.')[0:-1]) + '.md' + + if(not os.path.isfile(srcDir + srcFile)): + print('faild to find path to page for ' + item['url']) + else: + print('md: ' + srcFile) + + if(not os.path.isdir(destDir + '/'.join(srcFile.split('/')[0:-1]))): + os.mkdir(destDir + '/'.join(srcFile.split('/')[0:-1])) + + if('sidebar' in item): + sidebar = '' + + target = open(destDir + '.'.join(srcFile.split('.')[0:-1]) + '.html', "w") + target.write(template.render( + header = header, + sidebar = sidebar, + body = renderMD(srcDir + srcFile) + )) + target.close() + + if('sidebar' in item): + listPages(item['sidebar'], item['url'], renderPage) + sidebar = '' + if('sub' in item): + listPages(item['sub'], item['url'], renderPage) + + return '' + +def copyAssets(d): + global srcDir, destDir + for f in os.listdir(srcDir + d): + if(os.path.isdir(srcDir + d + f)): + if(not os.path.isdir(destDir + d + f)): + os.mkdir(destDir + d + f) + copyAssets(d + f + '/') + continue + ext = f.split('.')[-1] + + + if(ext == 'md'): + # print('md: ' + d + f) + # target = open(destDir + d + '.'.join(f.split('.')[0:-1]) + '.html', "w") + # target.write(template.render( + # header = header, + # body = renderMD(srcDir + d + f) + # )) + # target.close() + continue + + + if(ext == 'scss'): + print('scss: ' + d + f) + target = open(destDir + d + '.'.join(f.split('.')[0:-1]) + '.css', "w") + target.write(renderSCSS(srcDir + d + f)) + target.close() + continue + + print("copy: " + d + f) + shutil.copyfile(srcDir + d + f, destDir + d + f) + +if(__name__ == '__main__'): + with open('index.yml', 'r') as file: + index = yaml.safe_load(file) + + header = '
    ' + + copyAssets('/') + listPages(index, '', renderPage) diff --git a/render.sh b/render.sh new file mode 100644 index 0000000..432fc0c --- /dev/null +++ b/render.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +cd $HOME/webTemplate + +rm -r ../public/* + +python3 render.py + +# cd ../public/ && python3 -m http.server 8000 + diff --git a/renderMD.py b/renderMD.py new file mode 100644 index 0000000..4885c64 --- /dev/null +++ b/renderMD.py @@ -0,0 +1,48 @@ +import html +from misaka import Markdown, HtmlRenderer +import latex2mathml.converter +import re + +def renderLatex(code): + code = code.strip() + code = code.replace("=>", "\\Rightarrow") + code = code.replace("->", "\\rightarrow") + code = code.replace("*", "\\cdot") + + a = re.search(r"{[^{}]*} */ *{[^{}]*}", code) + while a is not None: + print(a) + print(code[a.span()[0] : a.span()[1]]) + newcode = code[:a.span()[0]] + newcode += "\\frac" + newcode += re.sub(r'}[ ]*/[ ]*{', '}{', code[a.span()[0] : a.span()[1]]) + newcode += code[a.span()[1]:] + code = newcode + print(code) + a = re.search(r"{[^{}}]*} */ *{[^{}}]*}", code) + + return latex2mathml.converter.convert(code) + +class HighlighterRenderer(HtmlRenderer): + def codespan(self, code): + lang = code.split(' ')[0] + if(lang == 'tex'): + return '{}\n'.format(renderLatex(' '.join(code.split(' ')[1:]).strip())) + return '{}\n'.format(code.strip()) + def blockcode(self, code, lang): + if(lang == 'latex/equetion'): + return '

    {}

    \n'.format(code.strip(), renderLatex(code)) + return '
    {}
    \n'.format(lang.replace('/', '-'), code) + +renderer = HighlighterRenderer() +md = Markdown(renderer, extensions=('fenced-code','tables')) + +# print(md(markdown_example)) + +def renderMD(src): + srcFile = open(src, 'r') + html = md(srcFile.read()) + srcFile.close() + return html + +# print(renderMD('../notes/HR/DIS10/week-2.md')) diff --git a/renderSCSS.py b/renderSCSS.py new file mode 100644 index 0000000..f649194 --- /dev/null +++ b/renderSCSS.py @@ -0,0 +1,13 @@ +code = """li { + display: block; +} + +""" +import sass + +def renderSCSS(src): + srcFile = open(src, 'r') + # print(src) + css = sass.compile(string=srcFile.read()) + srcFile.close() + return css diff --git a/sidemenu.py b/sidemenu.py new file mode 100644 index 0000000..1d652c4 --- /dev/null +++ b/sidemenu.py @@ -0,0 +1,50 @@ +import yaml + +def parseHTML(item): + if(not ('klickable' in item and item['klickable'] is False)): + item['lable'] = '' + item["lable"] + '' + + if('sub' not in item): + return '
  • ' + item["lable"] + '
  • ' + + html = '
  • ' + item["lable"] + '
  • ' + +def genHTML(items, parentUrl): + html = "" + for item in items: + + if(type(item) is dict): + if('url' not in item): + if('lable' not in item): + print('url or lable reqired') + continue + if('klickable' in item and item['klickable'] is False): + item["url"] = parentUrl + else: + item["url"] = parentUrl + '/' + item["lable"] + + if(item["url"][0] != '/'): + item["url"] = parentUrl + '/' + item["url"] + + #WARNING: XSS vanrable! + if('lable' not in item): + item["lable"] = item["url"].split('/')[-1] + + html += parseHTML(item) + continue + + + if(type(item) is str): + html += parseHTML({"lable": item, "url": parentUrl + '/' + item}) + continue + + return html + +def getSidebar(items, parentUrl): + html = '' + return html diff --git a/template.html b/template.html new file mode 100644 index 0000000..bd0b3de --- /dev/null +++ b/template.html @@ -0,0 +1,18 @@ + + + + + + + + Notes + + + {{ header }} + {{ sidebar }} +
    + {{ body }} +
    + + + \ No newline at end of file