summaryrefslogtreecommitdiff
path: root/sphinx
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-03-22 23:39:17 +0900
committerGitHub <noreply@github.com>2020-03-22 23:39:17 +0900
commit9ae34e1757c957703d11178bee20a93f186b6dff (patch)
treea7b8432e84d38278bf4d750732676c81e08a907b /sphinx
parent0fb7b8f5254cd83f168e3ed7fc71fb89bd39aa6e (diff)
parent2659a37c1f7278f451da763364e80a13489304f8 (diff)
downloadsphinx-git-9ae34e1757c957703d11178bee20a93f186b6dff.tar.gz
Merge pull request #7360 from tk0miya/7357_ValueError_on_resizing_SVG
Fix #7357: html: Resizing SVG image fails with ValueError
Diffstat (limited to 'sphinx')
-rw-r--r--sphinx/writers/html.py19
-rw-r--r--sphinx/writers/html5.py19
2 files changed, 32 insertions, 6 deletions
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index e74c0334f..85eeb4376 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -11,6 +11,7 @@
import copy
import os
import posixpath
+import re
import warnings
from typing import Any, Iterable, Tuple
from typing import cast
@@ -38,6 +39,19 @@ logger = logging.getLogger(__name__)
# http://www.arnebrodowski.de/blog/write-your-own-restructuredtext-writer.html
+def multiply_length(length: str, scale: int) -> str:
+ """Multiply *length* (width or height) by *scale*."""
+ matched = re.match(r'^(\d*\.?\d*)\s*(\S*)$', length)
+ if not matched:
+ return length
+ elif scale == 100:
+ return length
+ else:
+ amount, unit = matched.groups()
+ result = float(amount) * scale / 100
+ return "%s%s" % (int(result), unit)
+
+
class HTMLWriter(Writer):
# override embed-stylesheet default value to 0.
@@ -597,11 +611,10 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
if 'height' in node:
atts['height'] = node['height']
if 'scale' in node:
- scale = node['scale'] / 100.0
if 'width' in atts:
- atts['width'] = int(atts['width']) * scale
+ atts['width'] = multiply_length(atts['width'], node['scale'])
if 'height' in atts:
- atts['height'] = int(atts['height']) * scale
+ atts['height'] = multiply_length(atts['height'], node['scale'])
atts['alt'] = node.get('alt', uri)
if 'align' in node:
atts['class'] = 'align-%s' % node['align']
diff --git a/sphinx/writers/html5.py b/sphinx/writers/html5.py
index 0c00a1fa4..f94dd60a3 100644
--- a/sphinx/writers/html5.py
+++ b/sphinx/writers/html5.py
@@ -10,6 +10,7 @@
import os
import posixpath
+import re
import warnings
from typing import Any, Iterable, Tuple
from typing import cast
@@ -37,6 +38,19 @@ logger = logging.getLogger(__name__)
# http://www.arnebrodowski.de/blog/write-your-own-restructuredtext-writer.html
+def multiply_length(length: str, scale: int) -> str:
+ """Multiply *length* (width or height) by *scale*."""
+ matched = re.match(r'^(\d*\.?\d*)\s*(\S*)$', length)
+ if not matched:
+ return length
+ elif scale == 100:
+ return length
+ else:
+ amount, unit = matched.groups()
+ result = float(amount) * scale / 100
+ return "%s%s" % (int(result), unit)
+
+
class HTML5Translator(SphinxTranslator, BaseTranslator):
"""
Our custom HTML translator.
@@ -538,11 +552,10 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
if 'height' in node:
atts['height'] = node['height']
if 'scale' in node:
- scale = node['scale'] / 100.0
if 'width' in atts:
- atts['width'] = int(atts['width']) * scale
+ atts['width'] = multiply_length(atts['width'], node['scale'])
if 'height' in atts:
- atts['height'] = int(atts['height']) * scale
+ atts['height'] = multiply_length(atts['height'], node['scale'])
atts['alt'] = node.get('alt', uri)
if 'align' in node:
atts['class'] = 'align-%s' % node['align']