diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-02-05 18:24:21 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-02-05 18:24:21 +0100 |
commit | 4610cb3ae9c41237e662faf30a340a61fac51d1a (patch) | |
tree | 5aa1fdcbb5b1c0e72662f64e83fce2b5668f8e38 | |
parent | cf9d8d6bba5b0a713e8c0edf15499545b1dc4244 (diff) | |
parent | facd4c6f19190f061ad4db9e8ab37c347b31b105 (diff) | |
download | Nim-4610cb3ae9c41237e662faf30a340a61fac51d1a.tar.gz |
Merge pull request #3813 from flyx/rst-svg
RST: Output <object> for SVG images in HTML
-rw-r--r-- | lib/packages/docutils/rstgen.nim | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/packages/docutils/rstgen.nim b/lib/packages/docutils/rstgen.nim index 22d944597..602f03328 100644 --- a/lib/packages/docutils/rstgen.nim +++ b/lib/packages/docutils/rstgen.nim @@ -757,10 +757,15 @@ proc renderImage(d: PDoc, n: PRstNode, result: var string) = template valid(s): expr = s.len > 0 and allCharsInSet(s, {'.','/',':','%','_','\\','\128'..'\xFF'} + Digits + Letters + WhiteSpace) - - var options = "" + let + arg = getArgument(n) + isObject = arg.toLower().endsWith(".svg") + var + options = "" + content = "" var s = getFieldValue(n, "scale") - if s.valid: dispA(d.target, options, " scale=\"$1\"", " scale=$1", [strip(s)]) + if s.valid: dispA(d.target, options, if isObject: "" else: " scale=\"$1\"", + " scale=$1", [strip(s)]) s = getFieldValue(n, "height") if s.valid: dispA(d.target, options, " height=\"$1\"", " height=$1", [strip(s)]) @@ -769,16 +774,21 @@ proc renderImage(d: PDoc, n: PRstNode, result: var string) = if s.valid: dispA(d.target, options, " width=\"$1\"", " width=$1", [strip(s)]) s = getFieldValue(n, "alt") - if s.valid: dispA(d.target, options, " alt=\"$1\"", "", [strip(s)]) + if s.valid: + # <object> displays its content if it cannot render the image + if isObject: dispA(d.target, content, "$1", "", [strip(s)]) + else: dispA(d.target, options, " alt=\"$1\"", "", [strip(s)]) s = getFieldValue(n, "align") if s.valid: dispA(d.target, options, " align=\"$1\"", "", [strip(s)]) if options.len > 0: options = dispF(d.target, "$1", "[$1]", [options]) - - let arg = getArgument(n) + if arg.valid: - dispA(d.target, result, "<img src=\"$1\"$2 />", "\\includegraphics$2{$1}", + let htmlOut = if isObject: + "<object data=\"$1\" type=\"image/svg+xml\"$2 >" & content & "</object>" + else: "<img src=\"$1\"$2 />" + dispA(d.target, result, htmlOut, "\\includegraphics$2{$1}", [arg, options]) if len(n) >= 3: renderRstToOut(d, n.sons[2], result) |