První pokus o #1, zabalíčkování.
This commit is contained in:
parent
f3309d6569
commit
6982b31996
15 changed files with 116 additions and 81 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -10,3 +10,7 @@ public/
|
|||
*.jpeg
|
||||
*.svg
|
||||
!test/1px.png
|
||||
**/.mypy_cache
|
||||
**/*.egg-info
|
||||
build/
|
||||
dist/
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from typing import List
|
||||
import os
|
||||
|
||||
# Import local files
|
||||
from transform import transform
|
||||
from util import *
|
||||
from context import Context, Group
|
||||
from katex import KatexClient
|
||||
from html import html
|
||||
from tex import tex
|
||||
from images import ImageProcessor
|
||||
|
||||
from mj_show import show
|
||||
|
||||
# Initialize command line arguments
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument("-l", "--img-lookup-dirs", help="Image lookup directories. When processing images, the program will try to find the image in them first. Always looks for images in the same folder as the markdown file.", nargs="+", default=[])
|
||||
parser.add_argument("-p", "--img-public-dir", help="Directory to put processed images into. The program will not overwrite existing images.", default="public")
|
||||
parser.add_argument("-i", "--img-web-path", help="Path where the processed images are available on the website.", default="/")
|
||||
parser.add_argument("-w", "--output-html", help="The HTML file (for Web) to write into.", default="output.html")
|
||||
parser.add_argument("-t", "--output-tex", help="The TEX file to write into.", default="output.tex")
|
||||
parser.add_argument("input_filename", help="The markdown file to process.")
|
||||
parser.add_argument("--debug", action='store_true')
|
||||
args = parser.parse_args()
|
||||
# TODO: Accept path to unix socket for katexClient, then don't init our own,
|
||||
# just connect to an existing one. For formátíking many files in a row.
|
||||
|
||||
# Use panflute to parse the input MD file
|
||||
doc = import_md(open(args.input_filename, "r").read())
|
||||
|
||||
if args.debug:
|
||||
print(show(doc))
|
||||
|
||||
# The language metadatum is important, so it's read before transformation and
|
||||
# then attached to a group inside the Doc
|
||||
language = doc.get_metadata("language", None, True)
|
||||
context = Context(doc, args.input_filename)
|
||||
|
||||
# Transform the document. This includes all the fancy formatting this software does.
|
||||
doc = doc.walk(transform, context)
|
||||
|
||||
# Now wrap the document contents in a group, which is able to pop its language
|
||||
# setting out to TeX
|
||||
doc.content = [Group(*doc.content, metadata={"language":language})]
|
||||
|
||||
# Initialize the image processor (this just keeps some basic state)
|
||||
imageProcessor = ImageProcessor(args.img_public_dir, args.img_web_path, *args.img_lookup_dirs)
|
||||
|
||||
# Initialize KaTeX client (this runs the node app and connects to a unix socket)
|
||||
with KatexClient() as katexClient:
|
||||
# Generate HTML and TeX out of the transformed document
|
||||
open(args.output_html, "w").write(html(doc, katexClient, imageProcessor))
|
||||
open(args.output_tex, "w").write(tex(doc, imageProcessor))
|
||||
|
||||
if args.debug:
|
||||
print(show(doc))
|
||||
|
26
pyproject.toml
Normal file
26
pyproject.toml
Normal file
|
@ -0,0 +1,26 @@
|
|||
[build-system]
|
||||
requires = ["setuptools>=61.0"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "formatitko"
|
||||
version = "0.0.1"
|
||||
authors = [
|
||||
{ name="Greenscreener ", email="gs@grsc.cz" },
|
||||
{ name="Organizers of KSP", email="ksp-tech@ksp.mff.cuni.cz" }
|
||||
]
|
||||
description = "A python program based on pandoc and its python library panflute for converting from markdown to TeX and HTML with added fancy features like image processing, python-based macros and much more."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.9"
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Operating System :: Linux",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
"Homepage" = "https://gitea.ks.matfyz.cz/KSP/formatitko"
|
||||
"Bug Tracker" = "https://gitea.ks.matfyz.cz/KSP/formatitko/issues"
|
||||
|
||||
[project.scripts]
|
||||
formatitko = "formatitko.formatitko:main"
|
0
src/formatitko/__init__.py
Normal file
0
src/formatitko/__init__.py
Normal file
|
@ -2,9 +2,9 @@ from panflute import Div,Span,Para
|
|||
from typing import List
|
||||
|
||||
# Import local files
|
||||
from util import *
|
||||
from context import Context
|
||||
from mj_show import show
|
||||
from .util import *
|
||||
from .context import Context
|
||||
from .mj_show import show
|
||||
|
||||
class Command:
|
||||
pass
|
67
src/formatitko/formatitko.py
Executable file
67
src/formatitko/formatitko.py
Executable file
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from typing import List
|
||||
import os
|
||||
|
||||
# Import local files
|
||||
from .transform import transform
|
||||
from .util import *
|
||||
from .context import Context, Group
|
||||
from .katex import KatexClient
|
||||
from .html import html
|
||||
from .tex import tex
|
||||
from .images import ImageProcessor
|
||||
|
||||
from .mj_show import show
|
||||
|
||||
def main():
|
||||
# Initialize command line arguments
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument("-l", "--img-lookup-dirs", help="Image lookup directories. When processing images, the program will try to find the image in them first. Always looks for images in the same folder as the markdown file.", nargs="+", default=[])
|
||||
parser.add_argument("-p", "--img-public-dir", help="Directory to put processed images into. The program will not overwrite existing images.", default="public")
|
||||
parser.add_argument("-i", "--img-web-path", help="Path where the processed images are available on the website.", default="/")
|
||||
parser.add_argument("-w", "--output-html", help="The HTML file (for Web) to write into.", default="output.html")
|
||||
parser.add_argument("-t", "--output-tex", help="The TEX file to write into.", default="output.tex")
|
||||
parser.add_argument("input_filename", help="The markdown file to process.")
|
||||
parser.add_argument("--debug", action='store_true')
|
||||
args = parser.parse_args()
|
||||
# TODO: Accept path to unix socket for katexClient, then don't init our own,
|
||||
# just connect to an existing one. For formátíking many files in a row.
|
||||
|
||||
# Use panflute to parse the input MD file
|
||||
doc = import_md(open(args.input_filename, "r").read())
|
||||
|
||||
if args.debug:
|
||||
print(show(doc))
|
||||
|
||||
# The language metadatum is important, so it's read before transformation and
|
||||
# then attached to a group inside the Doc
|
||||
language = doc.get_metadata("language", None, True)
|
||||
context = Context(doc, args.input_filename)
|
||||
|
||||
# Transform the document. This includes all the fancy formatting this software does.
|
||||
doc = doc.walk(transform, context)
|
||||
|
||||
# Now wrap the document contents in a group, which is able to pop its language
|
||||
# setting out to TeX
|
||||
doc.content = [Group(*doc.content, metadata={"language":language})]
|
||||
|
||||
# Initialize the image processor (this just keeps some basic state)
|
||||
imageProcessor = ImageProcessor(args.img_public_dir, args.img_web_path, *args.img_lookup_dirs)
|
||||
|
||||
# Initialize KaTeX client (this runs the node app and connects to a unix socket)
|
||||
with KatexClient() as katexClient:
|
||||
# Generate HTML and TeX out of the transformed document
|
||||
open(args.output_html, "w").write(html(doc, katexClient, imageProcessor))
|
||||
open(args.output_tex, "w").write(tex(doc, imageProcessor))
|
||||
|
||||
if args.debug:
|
||||
print(show(doc))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -5,12 +5,12 @@ from pygments.formatters import HtmlFormatter
|
|||
from pygments.util import ClassNotFound
|
||||
import os
|
||||
|
||||
from whitespace import NBSP
|
||||
from transform import FQuoted
|
||||
from katex import KatexClient
|
||||
from util import inlinify
|
||||
from context import Group
|
||||
from images import ImageProcessor
|
||||
from .whitespace import NBSP
|
||||
from .transform import FQuoted
|
||||
from .katex import KatexClient
|
||||
from .util import inlinify
|
||||
from .context import Group
|
||||
from .images import ImageProcessor
|
||||
|
||||
def html(e: Element, k: KatexClient, i: ImageProcessor, indent_level: int=0, indent_str: str="\t") -> str:
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
from panflute import *
|
||||
import os
|
||||
|
||||
from whitespace import NBSP
|
||||
from transform import FQuoted
|
||||
from util import inlinify
|
||||
from context import Group
|
||||
from images import ImageProcessor
|
||||
from .whitespace import NBSP
|
||||
from .transform import FQuoted
|
||||
from .util import inlinify
|
||||
from .context import Group
|
||||
from .images import ImageProcessor
|
||||
|
||||
# Heavily inspired by: git://git.ucw.cz/labsconf2022.git
|
||||
def tex(e: Element, i: ImageProcessor, indent_level: int=0, indent_str: str="\t") -> str:
|
|
@ -2,10 +2,10 @@ from panflute import *
|
|||
import re
|
||||
|
||||
# Import local files
|
||||
from whitespace import *
|
||||
from command import *
|
||||
from util import *
|
||||
from context import *
|
||||
from .whitespace import *
|
||||
from .command import *
|
||||
from .util import *
|
||||
from .context import *
|
||||
|
||||
|
||||
# This is a small extension to the Quoted panflute elements which allows to
|
|
@ -2,7 +2,7 @@ from panflute import Space, SoftBreak, Str, Math
|
|||
from typing import Union
|
||||
|
||||
# Import local files
|
||||
from context import Context
|
||||
from .context import Context
|
||||
|
||||
Whitespace = Union[Space,SoftBreak]
|
||||
|
Loading…
Reference in a new issue