diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f68badca57f01e444ce01171b6aeb3415d8a7d3e..d7909ad7dfbbb330bcae4e6e5702caea830c37a9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,6 +28,7 @@ Build pythonForPandocFilter docker image: - generateChangemarks/changemarks.py - generateChangemarks/addTrackedChanges.py - generateChangemarks/generateTOC.py + - generateChangemarks/svg2png.py Build Pandoc docker image: stage: build diff --git a/generateChangemarks/dockerfile b/generateChangemarks/dockerfile index 5c80471ab54c9a69468631025c8b89507b47754b..020792e8ba789f50a2eaf71b8944e4d7b2661b81 100644 --- a/generateChangemarks/dockerfile +++ b/generateChangemarks/dockerfile @@ -2,6 +2,7 @@ FROM python:3.9-slim-bullseye ADD . /generateChangemarks/ RUN apt-get update -y && \ + apt-get install -y libcairo2 && \ rm -rf /var/lib/apt/lists/* &&\ pip install -e generateChangemarks/ &&\ pip install -r generateChangemarks/requirements.txt diff --git a/generateChangemarks/dockerfile.pandoc b/generateChangemarks/dockerfile.pandoc index bb9d0bfc5b8082187151ba9fa4e35cba95e5b3a3..54dae98615f4d677512748839f85f49171dc0802 100644 --- a/generateChangemarks/dockerfile.pandoc +++ b/generateChangemarks/dockerfile.pandoc @@ -1,4 +1,4 @@ -FROM pandoc/core:3-ubuntu +FROM pandoc/core:3.4.0-ubuntu RUN apt-get update -y && \ apt-get install -y npm &&\ diff --git a/generateChangemarks/pandocFilter.py b/generateChangemarks/pandocFilter.py index 19294e3b2e1ed2ed0eeff7eed2d323a88cce31f5..23e6a254943651d40b1b5230f874c3923c6f5c54 100644 --- a/generateChangemarks/pandocFilter.py +++ b/generateChangemarks/pandocFilter.py @@ -127,6 +127,26 @@ def replaceFigureCaptions(progress:Progress, mdLines:list[str]) -> list[str]: return _lines +def replaceFiguresPathSvgToPng(progress: Progress, mdLines: list[str]) -> list[str]: + """ Replace figure extensions from svg to png. + """ + _taskID = progress.add_task('[blue]Replacing figure captions', total=0) + # progress.update() + figurePathRegex = re.compile('media\/.*\.svg') + + _lines: list[str] = [] + for line in mdLines: + matches = re.findall(figurePathRegex, line) + if matches: + # Replace figure path to png + _lines.append(re.sub(r'\.svg', f'.png', line)) + else: + _lines.append(line) + + progress.stop_task(_taskID) + return _lines + + def replaceLineBreaks(progress: Progress, mdLines: list[str]) -> list[str]: """ Replace <br /> linebreaks by pandoc escaped_line_breaks extension \(newline). """ @@ -162,6 +182,7 @@ def process(document:str, outDirectory:str) -> None: mdLines = correctTOC(progress, mdLines) mdLines = replaceTableCaptions(progress, mdLines) mdLines = replaceFigureCaptions(progress, mdLines) + mdLines = replaceFiguresPathSvgToPng(progress, mdLines) mdLines = replaceLineBreaks(progress, mdLines) writeMDFile(progress, mdLines, document, outDirectory) diff --git a/generateChangemarks/requirements.txt b/generateChangemarks/requirements.txt index 6aa5ec74dc2760809cc1b1be536a44863721b7a0..e993258c978b968c2503214a55c4aedd28d29260 100644 --- a/generateChangemarks/requirements.txt +++ b/generateChangemarks/requirements.txt @@ -15,4 +15,5 @@ pygments==2.15.1 rich==13.4.2 # via oneM2M-markdown-to-pandoc-filter (setup.py) requests==2.31.0 -unidiff==0.7.5 \ No newline at end of file +unidiff==0.7.5 +cairosvg==2.7.1 \ No newline at end of file diff --git a/generateChangemarks/setup.py b/generateChangemarks/setup.py index 7353e00df3b56daac61aeaff67a4ac6641ab30ca..4d8e8ede8fc78b2e26622f083eba3b1fc53a4f6c 100644 --- a/generateChangemarks/setup.py +++ b/generateChangemarks/setup.py @@ -16,6 +16,7 @@ setup( 'changemarks=changemarks:main', 'addTrackedChanges=addTrackedChanges:main', 'generateTOC=generateTOC:main', + 'svg2png=svg2png:main', ] } diff --git a/generateChangemarks/svg2png.py b/generateChangemarks/svg2png.py new file mode 100644 index 0000000000000000000000000000000000000000..5b0d0c3bb3c6d3eea42a0ee8431f0d22540d7901 --- /dev/null +++ b/generateChangemarks/svg2png.py @@ -0,0 +1,19 @@ +import argparse, sys +import cairosvg +import os + +def svg_to_png(input_svg_path, output_png_path): + cairosvg.svg2png(url=input_svg_path, write_to=output_png_path) + +# Example usage + +def main(args=None): + # Parse command line arguments + parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('image', help = 'image to convert') + args = parser.parse_args() + + svg_to_png(args.image, f'{args.image.removesuffix(".svg")}.png') + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/publish_spec.sh b/publish_spec.sh index faaa51e404ea8374193119063783d86e20201e82..70d912d664d1fb251f0061ebb63c3f8890df24d2 100755 --- a/publish_spec.sh +++ b/publish_spec.sh @@ -27,9 +27,14 @@ if [ ! $specs ] ; then exit 0 fi +for i in media/*.svg ; do + echo "\n------ Converting SVG to PNG for pandoc --------" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$TOOLS_DOCKER_IMAGE" svg2png "/tmp/$i" +done + for i in *.md ; do if [ $i != 'README.md' ]; then - echo "\n------ Adding TOC to spec --------" + echo "\n------ Adding TOC to spec --------" docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$TOOLS_DOCKER_IMAGE" generateTOC --add-content "/tmp/$i" echo "\n------ Preparaing spec --------" docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$TOOLS_DOCKER_IMAGE" pandocFilter -o "/tmp/" "/tmp/$i"