From bb5de7bfcc61a654ddd842de83305a8a76a272b3 Mon Sep 17 00:00:00 2001 From: Miguel Angel Reina Ortega <miguelangel.reinaortega@etsi.org> Date: Fri, 13 Sep 2024 14:53:05 +0200 Subject: [PATCH] Support to convert all svg figures to png for pandoc conversion --- .gitlab-ci.yml | 1 + generateChangemarks/dockerfile | 1 + generateChangemarks/dockerfile.pandoc | 2 +- generateChangemarks/pandocFilter.py | 21 +++++++++++++++++++++ generateChangemarks/requirements.txt | 3 ++- generateChangemarks/setup.py | 1 + generateChangemarks/svg2png.py | 19 +++++++++++++++++++ publish_spec.sh | 7 ++++++- 8 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 generateChangemarks/svg2png.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f68badc..d7909ad 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 5c80471..020792e 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 bb9d0bf..54dae98 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 19294e3..23e6a25 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 6aa5ec7..e993258 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 7353e00..4d8e8ed 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 0000000..5b0d0c3 --- /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 faaa51e..70d912d 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" -- GitLab