Improve manual

This commit is contained in:
Joachim Stolberg 2023-08-28 10:35:55 +02:00
parent aee918d025
commit 14440f0cad
5 changed files with 16 additions and 284 deletions

View File

@ -80,7 +80,7 @@ return {
"\n"..
"\n"..
"\n",
"Die Antriebsachsen dienen zur Kraftübertragung von der Dampfmaschine zu anderen Maschinen. Die maximale Länge einer Antriebsachse beträgt 10 Blöcke. Über Getriebeboxen können auch größere Strecken überbrückt\\, sowie Abzweigungen und Richtungswechsel realisiert werden.\n"..
"Die Antriebsachsen dienen zur Kraftübertragung von der Dampfmaschine zu anderen Maschinen. Die maximale Länge einer Antriebsachse beträgt 10 Blöcke. Über Getriebeblöcke können auch größere Strecken überbrückt\\, sowie Abzweigungen und Richtungswechsel realisiert werden.\n"..
"\n"..
"\n"..
"\n",
@ -96,11 +96,11 @@ return {
"\n"..
"Der Energiespeicher besteht aus mehreren Blöcken und muss wie im Plan rechts abgebildet\\, zusammen gebaut werden.\n"..
"\n"..
"Um die maximale Speicherkapazität zu erreichen\\, muss die Kiste mit Gewichten komplett gefüllt\\, und der Mast inklusive der zwei Getriebeboxen 12 Blöcke hoch sein. Kleinere Aufbauten sind aber auch möglich.\n"..
"Um die maximale Speicherkapazität zu erreichen\\, muss die Kiste mit Gewichten komplett gefüllt\\, und der Mast inklusive der zwei Getriebeblöcke 12 Blöcke hoch sein. Kleinere Aufbauten sind aber auch möglich.\n"..
"\n"..
"\n"..
"\n",
"Die Seilwinde muss mit einer Getriebebox verbunden werden und kann so überschüssige Energie aufnehmen und damit eine Gewichtekiste nach oben ziehen. Die maximale Seillänge beträgt 10 Blöcke.\n"..
"Die Seilwinde muss mit einem Getriebeblock verbunden werden und kann so überschüssige Energie aufnehmen und damit eine Gewichtekiste nach oben ziehen. Achte beim Aufbau der Seilwinde darauf\\, dass der Pfeil auf der Blockoberseite zum Getriebeblock zeigt. Die maximale Seillänge beträgt 10 Blöcke.\n"..
"\n"..
"\n"..
"\n",
@ -108,7 +108,7 @@ return {
"\n"..
"\n"..
"\n",
"Mit der Kupplung können Achsen und Maschinen vom Energiespeicher getrennt werden. Damit kommen die Achsen nach der Kupplung zum Stillstand und Maschinenanlagen können umgebaut werden.\n"..
"Mit der Kupplung können Achsen und Maschinen vom Energiespeicher getrennt werden. Damit kommen die Achsen nach der Kupplung zum Stillstand und Maschinenanlagen können umgebaut werden. Achte beim Aufbau der Kupplung darauf\\, dass der Pfeil auf der Blockoberseite zum Energiespeicher zeigt. \n"..
"\n"..
"\n"..
"\n",

View File

@ -98,7 +98,9 @@ return {
"\n"..
"\n"..
"\n",
"The cable winch must be connected to a gear box and can absorb excess energy and thus pull a weight chest upwards. The maximum rope length is 10 blocks. \n"..
"The cable winch must be connected to a gear box and can absorb excess energy and thus pull a weight chest upwards. \n"..
"When assembling the cable winch\\, make sure that the arrow on the top of the block points to the gearbox.\n"..
"The maximum rope length is 10 blocks. \n"..
"\n"..
"\n"..
"\n",
@ -106,7 +108,7 @@ return {
"\n"..
"\n"..
"\n",
"With the clutch\\, axles and machines can be separated from the energy storage. This means that the axles after the clutch come to a standstill and machine systems can be rebuilt.\n"..
"With the clutch\\, axles and machines can be separated from the energy storage. This means that the axles after the clutch come to a standstill and machine systems can be rebuilt. When assembling the clutch\\, make sure that the arrow on the top of the block points to the energy storage system.\n"..
"\n"..
"\n"..
"\n",

View File

@ -66,7 +66,7 @@ Teil der Dampfmaschine. Der Boiler muss mit dem Zylinder über die Dampfleitunge
### TA2 Antriebsachsen / TA2 Drive Axle
Die Antriebsachsen dienen zur Kraftübertragung von der Dampfmaschine zu anderen Maschinen. Die maximale Länge einer Antriebsachse beträgt 10 Blöcke. Über Getriebeboxen können auch größere Strecken überbrückt, sowie Abzweigungen und Richtungswechsel realisiert werden.
Die Antriebsachsen dienen zur Kraftübertragung von der Dampfmaschine zu anderen Maschinen. Die maximale Länge einer Antriebsachse beträgt 10 Blöcke. Über Getriebeblöcke können auch größere Strecken überbrückt, sowie Abzweigungen und Richtungswechsel realisiert werden.
[ta2_driveaxle|image]
@ -87,7 +87,7 @@ Bei größeren Anlagen mit mehreren Dampfmaschinen oder vielen angetriebenen Mas
Der Energiespeicher besteht aus mehreren Blöcken und muss wie im Plan rechts abgebildet, zusammen gebaut werden.
Um die maximale Speicherkapazität zu erreichen, muss die Kiste mit Gewichten komplett gefüllt, und der Mast inklusive der zwei Getriebeboxen 12 Blöcke hoch sein. Kleinere Aufbauten sind aber auch möglich.
Um die maximale Speicherkapazität zu erreichen, muss die Kiste mit Gewichten komplett gefüllt, und der Mast inklusive der zwei Getriebeblöcke 12 Blöcke hoch sein. Kleinere Aufbauten sind aber auch möglich.
[ta2_storage|plan]
@ -95,7 +95,7 @@ Um die maximale Speicherkapazität zu erreichen, muss die Kiste mit Gewichten ko
### TA2 Seilwinde / TA2 Winch
Die Seilwinde muss mit einer Getriebebox verbunden werden und kann so überschüssige Energie aufnehmen und damit eine Gewichtekiste nach oben ziehen. Die maximale Seillänge beträgt 10 Blöcke.
Die Seilwinde muss mit einem Getriebeblock verbunden werden und kann so überschüssige Energie aufnehmen und damit eine Gewichtekiste nach oben ziehen. Achte beim Aufbau der Seilwinde darauf, dass der Pfeil auf der Blockoberseite zum Getriebeblock zeigt. Die maximale Seillänge beträgt 10 Blöcke.
[ta2_winch|image]
@ -111,7 +111,7 @@ Diese Kiste muss mit bis zu 10 Blöcken Abstand unter die Seilwinde gesetzt und
### TA2 Kupplung / TA2 Clutch
Mit der Kupplung können Achsen und Maschinen vom Energiespeicher getrennt werden. Damit kommen die Achsen nach der Kupplung zum Stillstand und Maschinenanlagen können umgebaut werden.
Mit der Kupplung können Achsen und Maschinen vom Energiespeicher getrennt werden. Damit kommen die Achsen nach der Kupplung zum Stillstand und Maschinenanlagen können umgebaut werden. Achte beim Aufbau der Kupplung darauf, dass der Pfeil auf der Blockoberseite zum Energiespeicher zeigt.
[techage:ta2_clutch_off|image]

View File

@ -94,7 +94,9 @@ In order to achieve the maximum storage capacity, the chest must be completely f
### TA2 Winch
The cable winch must be connected to a gear box and can absorb excess energy and thus pull a weight chest upwards. The maximum rope length is 10 blocks.
The cable winch must be connected to a gear box and can absorb excess energy and thus pull a weight chest upwards.
When assembling the cable winch, make sure that the arrow on the top of the block points to the gearbox.
The maximum rope length is 10 blocks.
[ta2_winch|image]
@ -110,7 +112,7 @@ This chest must be placed under the winch with a distance of up to 10 blocks and
### TA2 Clutch
With the clutch, axles and machines can be separated from the energy storage. This means that the axles after the clutch come to a standstill and machine systems can be rebuilt.
With the clutch, axles and machines can be separated from the energy storage. This means that the axles after the clutch come to a standstill and machine systems can be rebuilt. When assembling the clutch, make sure that the arrow on the top of the block points to the energy storage system.
[techage:ta2_clutch_off|image]

View File

@ -1,272 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import re
import sys
import pprint
import mistune # must be v0.8.4, install with 'sudo pip install mistune==0.8.4'
def formspec_escape(text):
text = text.replace("\\", "")
text = text.replace("[", "\\\\[")
text = text.replace("]", "\\\\]")
text = text.replace(";", "\\\\;")
text = text.replace(",", "\\\\,")
text = text.replace('"', '\\"')
text = text.replace('\n', '\\n')
#print ">>>>"+text+"<<<<"
return text
def header_escsape(header):
header = header.lower()
header = header.replace(" ", "-")
header = header.replace("/", "")
return header
lTitel = []
lText = []
lItemName = []
lPlanTable = []
lTocLinks = []
def reset():
global lTitel, lText, lItemName, lPlanTable, lTocLinks
lTitel = []
lText = []
lItemName = []
lPlanTable = []
lTocLinks = []
def lua_table(name, lData):
lOut = []
lOut.append("%s = {" % name)
for line in lData:
lOut.append(' "%s",' % line)
lOut.append("}\n\n")
return "\n".join(lOut)
def lua_text_table(name, lData):
lOut = []
lOut.append("%s = {" % name)
for lines in lData:
for line in lines[:-1]:
line = line.replace('<br>', '\\n')
lOut.append(' "%s\\n"..' % line)
if len(lines) > 0:
lOut.append(' "%s\\n",' % lines[-1])
else:
lOut.append(' "",')
lOut.append("}\n\n")
return "\n".join(lOut)
class WikiLinkInlineLexer(mistune.InlineLexer):
def enable_wiki_link(self):
# add wiki_link rules
self.rules.wiki_link = re.compile(
r'\[' # [
r'([\s\S]+?\|[\s\S]+?)' # name| img-type
r'\](?!\])' # ]
)
# Add wiki_link parser to default rules
# you can insert it some place you like
# but place matters, maybe 3 is not good
self.default_rules.insert(3, 'wiki_link')
def output_wiki_link(self, m):
text = m.group(1)
name, itype = text.split('|')
# you can create an custom render
# you can also return the html if you like
return self.renderer.wiki_link(name, itype)
class MyRenderer(mistune.Renderer):
def __init__(self, *args, **kwargs):
mistune.Renderer.__init__(self, *args, **kwargs)
self.TextChunck = []
self.ItemName = ""
self.PlanTable = ""
self.is_first_header = True
def add_last_paragraph(self):
"""
Used to add a text block before the next header or at the end of the document
"""
lText.append(self.TextChunck)
self.TextChunck = []
lItemName.append(self.ItemName)
self.ItemName = ""
lPlanTable.append(self.PlanTable)
self.PlanTable = ""
##
## Block Level
##
def block_code(self, code, lang):
text = formspec_escape(code.strip())
lines = text.split("\\n")
lines = [" " + item for item in lines]
self.TextChunck.extend(lines)
self.TextChunck.append("")
return ""
# ~ def block_quote(self, text):
# ~ print "block_quote", text
# ~ self.TextChunck.append("\n%s\n" % text)
# ~ return ""
def header(self, text, level, raw=None):
if not self.is_first_header:
self.add_last_paragraph()
self.is_first_header = False
lTitel.append("%u,%s" % (level, formspec_escape(text)))
lTocLinks.append({"level": level, "header": formspec_escape(text), "link": self.src_name})
return ""
def hrule(self):
self.TextChunck.append("\n----------------------------------------------------\n")
return ""
def paragraph(self, text):
lines = text.split("\\n") + [""]
self.TextChunck.extend(lines)
return ""
def list(self, body, ordered=True):
lines = body.split("\n")
self.TextChunck.extend(lines)
return ""
def list_item(self, text):
return " - %s\n" % text.strip()
##
## Span Level
##
def emphasis(self, text):
return "*%s*" % formspec_escape(text)
def double_emphasis(self, text):
return "*%s*" % formspec_escape(text)
def codespan(self, text):
return "'%s'" % formspec_escape(text)
def text(self, text):
return formspec_escape(text)
def link(self, link, title, content):
"""
Used for plans and images:
[myimage](/image/)
[myplan](/plan/)
"""
if link == "/image/":
self.ItemName = content
elif link == "/plan/":
self.PlanTable = content
return ""
def wiki_link(self, name, itype):
"""
Used for plans and images:
[myimage|image]
[myplan|plan]
"""
if itype == "image":
self.ItemName = name
elif itype == "plan":
self.PlanTable = name
return ""
def autolink(self, link, is_email=False):
return link
def linebreak(self):
return "\\n"
def newline(self):
return "\\n"
def inline_html(self, text):
print(text)
# ~
# ~ double_emphasis(text)
# ~ image(src, title, alt_text)
# ~ link(link, title, content)
# ~ strikethrough(text)
# ~ inline_html(text)
def parse_md_file(src_name, mod, manual):
print("Read Lua file '%s'" % src_name)
renderer = MyRenderer()
inline = WikiLinkInlineLexer(renderer)
# enable the feature
inline.enable_wiki_link()
md = mistune.Markdown(renderer=renderer, inline=inline)
md.renderer.src_name = src_name
md.render(open(src_name, 'r').read())
md.renderer.add_last_paragraph()
def gen_lua_file(dest_name):
print("Write Lua file '%s'" % dest_name)
lOut = ["%s.%s = {}\n\n" % (mod, manual)]
lOut.append(lua_table("%s.%s.aTitel" % (mod, manual), lTitel))
lOut.append(lua_text_table("%s.%s.aText" % (mod, manual), lText))
lOut.append(lua_table("%s.%s.aItemName" % (mod, manual), lItemName))
lOut.append(lua_table("%s.%s.aPlanTable" % (mod, manual), lPlanTable))
open(dest_name, "w").write("".join(lOut))
def gen_toc_md_file(dest_name, titel, level_range=[1,6]):
print("Write MD file '%s'" % dest_name)
lOut = ["# "+ titel]
lOut.append("")
for item in lTocLinks:
if item["level"] in range(*level_range):
list_item = " " * (item["level"] - level_range[0]) + "-"
link = "%s#%s" % (item["link"], header_escsape(item["header"]))
lOut.append("%s [%s](%s)" % (list_item, item["header"], link))
open(dest_name, "w").write("\n".join(lOut))
def gen_file_local_toc(dest_name, level_range=[1,6]):
lOut = []
for item in lTocLinks:
if item["level"] in range(*level_range):
list_item = " " * (item["level"] - level_range[0]) + "-"
link = "#%s" % (item["header"].replace(" ", "-").replace("\\", ""))
lOut.append("%s [%s](%s)" % (list_item, item["header"].replace("\\", ""), link))
open(dest_name, "w").write("\n".join(lOut))
########################### German #########################
mod = "techage"
manual = "manual_DE"
parse_md_file("./manual_DE.md", mod, manual)
parse_md_file("./manual_ta1_DE.md", mod, manual)
parse_md_file("./manual_ta2_DE.md", mod, manual)
parse_md_file("./manual_ta3_DE.md", mod, manual)
parse_md_file("./manual_ta4_DE.md", mod, manual)
parse_md_file("./manual_ta5_DE.md", mod, manual)
gen_lua_file("../doc/manual_DE.lua")
gen_toc_md_file("./toc_DE.md", "Inhaltsverzeichnis")
########################### English #########################
reset()
mod = "techage"
manual = "manual_EN"
parse_md_file("./manual_EN.md", mod, manual)
parse_md_file("./manual_ta1_EN.md", mod, manual)
parse_md_file("./manual_ta2_EN.md", mod, manual)
parse_md_file("./manual_ta3_EN.md", mod, manual)
parse_md_file("./manual_ta4_EN.md", mod, manual)
parse_md_file("./manual_ta5_EN.md", mod, manual)
gen_lua_file("../doc/manual_EN.lua")
gen_toc_md_file("./toc_EN.md", "Table of Contents")
########################### Lua Manual #########################
reset()
parse_md_file("./ta4_lua_controller_EN.md", mod, manual)
gen_file_local_toc("toc.txt", level_range=[2,4])