Add files via upload

master
Lars Müller 2018-07-03 19:36:36 +02:00 committed by GitHub
parent efa550f7ec
commit 82aa717d49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 2002 additions and 0 deletions

100
jumbotron.css Normal file
View File

@ -0,0 +1,100 @@
:root {
--selection-color: white;
--selection-bg: skyblue;
}
h3 {
font-size: 120%;
text-decoration: underline;
}
ul.justify-content-center {
padding-top: 0.5rem;
}
label.btn {
padding: 0.15rem 1rem;
}
::-moz-selection {
color: var(--selection-color);
background: var(--selection-bg);
}
::selection {
color: var(--selection-color);
background: var(--selection-bg);
}
div.col-md-4, div.col-lg {
padding: 10px;
background: rgba(255, 255, 255, 0.6);
}
body {
position: relative;
}
div.position-fixed {
position:fixed;
padding:0;
margin:0;
overflow-y: scroll;
top: 20px;
right: 20px;
z-index: 1000;
width:17.5%;
height:90%;
background: rgba(255, 255, 255, 0.6);
}
.affix {
padding: 0;
margin: 0;
/*overflow-x: scroll;*/
}
li.a.nav-link {
display: table;
margin: 5px;
width: 100%;
}
li.a.nav-link h1, li.a.nav-link h1,h2,h3,h4,h5,h6 {
margin-top:0px;
margin-bottom:0px;
}
a.nav-link:active, a.nav-link.active {
background-color: grey;
}
a.nav-link h1 {
font-size:120%;
font-weight: bold;
}
a.nav-link h2 {
margin-left: 30px;
text-decoration: underline;
font-size:110%
}
a.nav-link h3 {
margin-left: 60px;
font-size: 100%;
text-decoration:none;
}
a.nav-link h4 {
margin-left: 90px;
font-size: 75%
}
a.nav-link h5 {
margin-left: 120px;
font-size: 75%
}
a.nav-link h6 {
margin-left: 150px;
font-size: 75%
}

1569
lua_api.html Normal file

File diff suppressed because one or more lines are too long

267
parserv6.py Normal file
View File

@ -0,0 +1,267 @@
# -*- coding: utf-8 -*-
print("**Minetest lua_api.txt Markdown parser - mt-lua-api-pyparse - converts Markdown to HTML document with navigation**")
print("**Written by Lars Müller alias LMD in Python 3.5 - requires Python >= 3.2**")
print("**Furthermore, this script has to be in the same folder as generate_bg.py, template.html, jumbotron.css, and the images taken from Minetest Game.**")
print("**The images taken from Minetest Game are licensed under CC-BY-SA 3.0, credits go to the Minetest Artists.**")
#from cgi import html
from xml.sax.saxutils import escape, unescape
html_escape_table = {
'"': """,
"'": "'"
}
def html_escape(text):
return escape(text, html_escape_table)
import urllib.request as url
import urllib.parse as parse
print("**Generating underground Minetest scene...**")
exec(open("generate_bg.py","r").read()) # IMPORTANT - GENERATES THE BEAUTIFUL BACKGROUND !
print("**...finished generating scene.**")
import math
# This python script grabs the newest lua_api.txt from Minetest GitHub repo and converts it to HTML, plus adding some bookmarks & css
# So mainly MD -> HTML. Written by me to improve my rusty Python skills.
# © Lars Müller @appguru.eu
print("**Grabbing newest lua_api.txt, make sure you have an internet connection...**")
link = "https://raw.githubusercontent.com/minetest/minetest/master/doc/lua_api.txt" # Grab newest lua_api.txt
f = url.urlopen(link)
markdown = parse.unquote(str(f.read().decode("ascii","ignore"))) # Read & convert
print("**...grabbed newest lua_api.txt from official Minetest repository.**")
liste=0 # Which sublist we are in right NOW
headers=[] # Stores all the headers + IDs
ID=0 # Stores header ID counter
print("**Starting parsing...**")
def parse_markdown(string,parent=False): # PARSES A SINGLE LINE !
global liste
global ID
global headers
suffix=""
prefix=""
if string.find("*") != -1 and (string[0:string.find("*")].count(" ") == string.find("*")) and not (parent or string[string.find("*")+1]=="*"): # LISTS
prevliste=liste
liste=1+int(string.find("*")/3)
if (liste > prevliste):
for i in range(0,liste-prevliste):
prefix+="<ul>"
elif (liste < prevliste):
for i in range(0,prevliste-liste):
prefix+="</ul>"
return prefix+"<li>"+parse_markdown(string[string.find("*")+2:],parent=True)+"</li>"+suffix
if not parent and liste != 0 and string=="":
for i in range(0,liste):
prefix+="</ul>"
liste=0
if (len(string)) == 0:
return prefix+"<br>"
if (string[-2:]==" "):
return prefix+parse_markdown(string[:-2],parent=True)+"<br>"
if (string[0]=="#"):
space=string.find(" ")
c=string[0:space-1].count("#")
if space==-1 or string[space+1:].count(" ")==len(string)-space-1:
return "<br>"
if (space-1==c):
ID+=1
c+=1
temp="<h"+str(c)+'>'+parse_markdown(string[space+1:],parent=True)+"</h"+str(c)+">"
headers.append((temp,str(ID)))
temp=prefix+temp[:3]+' id="gheader'+str(ID)+'"'+temp[3:]
return temp
bold=False
boldamount=string.count("**")
ba=0
italic=False
code=False
link=False
link2=False
codeamount=string.count("`")
ca=0
startindex=0
tags=[]
currentstring=""
index=-1
while index in range(-1,len(string)-1):
index+=1
appendtag=False
c=string[index]
if c == "`":
if ca < codeamount:
code=not code
ca=ca+1
if not code: # We have just closed a code fragment
tags.append((string[startindex+1:index],"code"))
continue
else: # A new one starts : SAVE INDEX + SAVE CURRENT STRING !
appendtag=True
elif not code:
if c == "*" and len(string) > index+1 and string[index+1] == "*":
if ba < boldamount:
index+=1
bold=not bold
ba=ba+1
if not bold: # We have just closed a code fragment
tags.append((string[startindex+1:index-1],"bold"))
continue
else: # A new one starts : SAVE INDEX + SAVE CURRENT STRING !
appendtag=True
elif c == "<" and not link:
appendtag=True
link=True
elif c == ">" and link:
link=False
tags.append((string[startindex+1:index],"link"))
continue
elif c == "[":
breakit=False
text=""
for i in range(index+2,len(string)-3):
c2=string[i]
if (c2 == "]"):
text=string[index+1:i]
if string[i+1]=="(":
for j in range(i+3,len(string)):
c3=string[j]
if (c3 == ")"):
breakit=True
tags.append((text,"link",string[i+2:j]))
index=j+1
break
if breakit:
continue
if appendtag:
tags.append((currentstring,"normal"))
currentstring=""
startindex=index
continue
if not bold and not code and not link and not link2:
currentstring+=c
if len(currentstring) != 0:
tags.append((currentstring,"normal"))
result=""
for tag in tags:
string=tag[0]
p=""
s=""
if tag[1]=="code":
p,s="<code>","</code>"
elif tag[1]=="bold":
p,s="<b>","</b>"
elif tag[1]=="link":
if len(tag) == 2:
if tag[0][0:4] == "http": # CHECK LINKS !
p,s='<a href="'+tag[0]+'">',"</a>"
else:
p,s='<a href="'+tag[2]+'">',"</a>"
elif tag[1]=="italic":
p,s="<em>","</em>"
result+=p+html_escape(string)+s
return prefix+"<p>"+result+"</p>"
def parse_md(string): # Parse line by line
lines=string.split("\n")
ret=""
for i in range(len(lines)-1,0,-1): # Convert alternate header writings(underlines)
if abs(len(lines[i-1])-len(lines[i])) < 3:
if lines[i].count("=")==len(lines[i]):
lines[i]=""
lines[i-1]="# "+lines[i-1]
elif lines[i].count("-")==len(lines[i]):
lines[i]=""
lines[i-1]="## "+lines[i-1]
i=0
ident=False
segments=0
for line in lines:
prefix=""
suffix=""
asteriskpos=line.find("*")
# or (len(line) > 1 and line[0]=="\t" and (asteriskpos==-1 or line[0:asteriskpos].count("\t") != asteriskpos)))
if liste== 0 and ((len(line) > 4 and line[0:4]==" "*4 and (asteriskpos==-1 or asteriskpos > 1 or line[0:asteriskpos].count(" ") != asteriskpos))):
if not ident:
prefix="<pre><code>"
#print("START : "+line[4:])
ident=True
elif ident:
ident=False
prefix="</code></pre>"
segments+=1
#else:
#if (len(line > 4)
#print("{"+line[0:4]+";"+line[0]+"}")
lval=""
if ident:
lval=html_escape(line[4:])+"\n"
else:
lval=parse_markdown(line)
ret+=prefix+lval
i=i+1
print("**Found "+str(segments)+" multi-line code segments.**")
if ident:
ident=False
return ret+"</code></pre>"
return ret
def code(): # Parse multi-line code fragments
global markdown
last=-1
i=0
stuff=[]
while (i < len(markdown)):
if markdown[i:i+3]=="`"*3: # Handle GitHub style code tags
i=i+3
if last < 0:
start=-(last+1)
last=i
stuff.append((markdown[start:last-3],False))
else:
stuff.append((markdown[last:i-3],True))
last=-i-1
i=i+1
start=-(last+1)
stuff.append((markdown[start:],False))
#print(stuff)
markdown=""
for s in stuff:
if s[1]:
markdown+="<pre><code>"+s[0]+"</code></pre>"
else:
markdown+=parse_md(s[0])
code()
print("**...finished parsing.**")
nav=""
print("**Creating content table...**")
for header in headers:
nav+="""<li><a class="nav-link" href="#gheader"""+header[1]+"""">"""+header[0]+"""</a></li>""" # Create navbar
print("**...finished creating content table. "+str(len(headers))+" Headers are included.**")
# FINAL - THE FINAL HTML, BOOTSTRAP BASED DOCUMENT OUR HTML IS INSERTED IN
final = open('template.html', 'r').read()
print("**Inserting content into template file...**")
markdown=final.replace("<!--PLACESTUFF-->",markdown)
print("**...finished inserting content.**")
print("**Inserting content table into template file...**")
markdown=markdown.replace("<!--PLACENAV-->",nav)
print("**...finished inserting content table.**")
print("**Saving as lua_api.html...**")
file = open('lua_api.html', 'w') # SAVE AS lua_api.html
file.write(markdown)
print("**...saved.**")
print("**Parser finished successfully and lua_api.html was generated.**")
file.close()

66
template.html Normal file
View File

@ -0,0 +1,66 @@
<!doctype html>
<!-- Template for lua_api.html -->
<html lang="en">
<body data-spy="scroll" data-target="#contenttable" data-offset="15" style="background: url('background.png') no-repeat center center fixed;background-size: 100% 100%;background-repeat: no-repeat;image-rendering:optimizeSpeed">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Minetest Lua API">
<meta name="author" content="Minetest Core Developers">
<link rel="icon" href="icon.png">
<div class="bg"></div>
<title>Minetest Lua API</title>
<link rel="shortcut icon" href="https://forum.minetest.net/styles/mt_v1/theme/images/favicon.ico">
<!-- Scripts and stylesheets -->
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link href="jumbotron.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<!-- Table of content -->
<div class="position-fixed" id="toc">
<nav class="col-lg" id="contenttable">
<ul class="nav flex-column nav-pills affix" id="v-pills-tab" data-spy="affix" data-offset-top="205">
<!--PLACENAV-->
<!--Python script places stuff here-->
</ul>
</nav>
</div>
<!--<div class="jumbotron" style="background-color:rgba(0,0,0,0)">-->
<div class="container">
<div class="row" style="width:85%;">
<div class="col-lg" style="display:inline-block;height:100%;">
<div>
<!--PLACESTUFF-->
</div>
<!--Python script places stuff here-->
<hr>
<p>Minetest is a free software game engine currently under development to create various games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”). </p>
<a>Generated out of <a href="https://github.com/minetest/minetest/blob/master/doc/lua_api.txt">lua_api.txt</a> by </a><a href="https://github.com/appgurueu/mt-lua-api-pyparse">mt-lua-api-pyparse</a><a>.</a>
</div>
</div>
</div>
<!--</div>-->
<script>
var last=""
var objDiv=document.getElementById("toc")
function scroll() {
var elem=document.getElementsByClassName("nav-link active")[0]
if (elem != null && last != elem.textContent) {
last=elem.textContent;
objDiv.scrollTop = elem.offsetTop;
}
}
window.setInterval(scroll,5)
</script>
</body>
</html>