def build_replacement_pandoc_element(self): if not os.path.exists(self.image_path): os.makedirs(os.path.dirname(self.image_path), exist_ok=True) self.generate_image() if not os.path.exists(self.image_path): raise errors.NoFigureProduced() alt_text = pandocfilters.Code(['', [], []], errors.make_pandoc_for_block(self)) image = pandocfilters.Image( [self.identifier, self.classes, list(self.attributes.items())], [alt_text], [self.image_path, errors.make_pandoc_for_block(self)]) result = pandocfilters.Para([image]) return result
def figure_replacement(self, key, value, format, metadata): """Replace figures with appropriate representation. This works with Figure, which is our special type for images with attributes. This allows us to set an id in the attributes. The other way of doing it would be to pull out a '\label{(.*)}' from the caption of an Image and use that to update the references. """ _caption, (filename, target), attrs = value caption = pf.stringify(_caption) attr = PandocAttributes(attrs) if 'unnumbered' in attr.classes: star = '*' fcaption = caption else: self.fig_replacement_count += 1 if not attr.id: attr.id = self.auto_fig_id(self.fig_replacement_count) ref = self.references[attr.id] star = '' if caption: fcaption = u'Figure {n}: {caption}'.format(n=ref['id'], caption=caption) else: fcaption = u'Figure {n}'.format(n=ref['id']) if 'figure' not in attr.classes: attr.classes.insert(0, 'figure') if format in self.formats: figure = self.figure_styles[format].format(attr=attr, filename=filename, alt=fcaption, fcaption=fcaption, caption=caption, star=star).encode('utf-8') return RawBlock(format, figure) else: alt = [pf.Str(fcaption)] target = (filename, '') image = pf.Image(alt, target) figure = pf.Para([image]) return pf.Div(attr.to_pandoc(), [figure])