Browse Source

Use custom xml_declaration avoiding conflict with processing instructions

pull/291/merge 2.0.12
Florian Mounier 9 years ago
parent
commit
c5aba2048f
  1. 63
      demo/moulinrouge/tests.py
  2. 6
      docs/changelog.rst
  3. 2
      pygal/__init__.py
  4. 17
      pygal/svg.py

63
demo/moulinrouge/tests.py

@ -893,6 +893,69 @@ def get_test_routes(app):
line.add('_', [1, 32, 12, .4, .009]) line.add('_', [1, 32, 12, .4, .009])
return line.render_response() return line.render_response()
@app.route('/test/custom_css_file')
def test_custom_css_file():
from tempfile import NamedTemporaryFile
custom_css = '''
{{ id }}text {
fill: green;
font-family: monospace;
}
{{ id }}.legends .legend text {
font-size: {{ font_sizes.legend }};
}
{{ id }}.axis {
stroke: #666;
}
{{ id }}.axis text {
font-size: {{ font_sizes.label }};
font-family: sans;
stroke: none;
}
{{ id }}.axis.y text {
text-anchor: end;
}
{{ id }}#tooltip text {
font-size: {{ font_sizes.tooltip }};
}
{{ id }}.dot {
fill: yellow;
}
{{ id }}.color-0 {
stroke: #ff1100;
fill: #ff1100;
}
{{ id }}.color-1 {
stroke: #ffee00;
fill: #ffee00;
}
{{ id }}.color-2 {
stroke: #66bb44;
fill: #66bb44;
}
{{ id }}.color-3 {
stroke: #88bbdd;
fill: #88bbdd;
}
{{ id }}.color-4 {
stroke: #0000ff;
fill: #0000ff;
}
'''
custom_css_file = '/tmp/pygal_custom_style.css'
with open(custom_css_file, 'w') as f:
f.write(custom_css)
config = Config(fill=True, interpolate='cubic')
config.css.append(custom_css_file)
chart = StackedLine(config)
chart.add('A', [1, 3, 5, 16, 13, 3, 7])
chart.add('B', [5, 2, 3, 2, 5, 7, 17])
chart.add('C', [6, 10, 9, 7, 3, 1, 0])
chart.add('D', [2, 3, 5, 9, 12, 9, 5])
chart.add('E', [7, 4, 2, 1, 2, 10, 0])
return chart.render_response()
@app.route('/test/legendlink/<chart>') @app.route('/test/legendlink/<chart>')
def test_legend_link_for(chart): def test_legend_link_for(chart):
chart = CHARTS_BY_NAME[chart]() chart = CHARTS_BY_NAME[chart]()

6
docs/changelog.rst

@ -2,6 +2,12 @@
Changelog Changelog
========= =========
2.0.12
======
* Use custom xml_declaration avoiding conflict with processing instructions
2.0.11 2.0.11
====== ======

2
pygal/__init__.py

@ -24,7 +24,7 @@ and the maps extensions namespace module.
""" """
__version__ = '2.0.11' __version__ = '2.0.12'
import pkg_resources import pkg_resources
import sys import sys

17
pygal/svg.py

@ -321,25 +321,24 @@ class Svg(object):
args = { args = {
'encoding': 'utf-8' 'encoding': 'utf-8'
} }
svg = b'' svg = b''
if etree.lxml: if etree.lxml:
args['pretty_print'] = pretty_print args['pretty_print'] = pretty_print
args['xml_declaration'] = not self.graph.disable_xml_declaration
else:
if not self.graph.disable_xml_declaration: if not self.graph.disable_xml_declaration:
svg = b"<?xml version='1.0' encoding='utf-8'?>\n" svg = b"<?xml version='1.0' encoding='utf-8'?>\n"
svg += etree.tostring(
self.root, **args)
if 'xml_declaration' in args:
args.pop('xml_declaration')
if not self.graph.disable_xml_declaration: if not self.graph.disable_xml_declaration:
svg = b'\n'.join( svg += b'\n'.join(
[etree.tostring( [etree.tostring(
pi, **args) pi, **args)
for pi in self.processing_instructions] + [svg] for pi in self.processing_instructions]
) )
svg += etree.tostring(
self.root, **args)
if self.graph.disable_xml_declaration or is_unicode: if self.graph.disable_xml_declaration or is_unicode:
svg = svg.decode('utf-8') svg = svg.decode('utf-8')
return svg return svg

Loading…
Cancel
Save