Add files via upload
parent
efa550f7ec
commit
82aa717d49
|
@ -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%
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -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()
|
|
@ -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>
|
Loading…
Reference in New Issue