def process_code_block(self, block): """Parse block attributes""" if block['type'] != self.code: return block attr = PandocAttributes(block['attributes'], 'markdown') if self.match == 'all': pass elif self.match == 'fenced' and block.get('indent'): return self.new_text_block(content=('\n' + block['icontent'] + '\n')) elif (self.match == 'strict' and 'input' not in attr.classes and 'output' not in attr.classes): return self.new_text_block(content=block['raw']) elif self.match not in list(attr.classes) + ['fenced', 'strict']: return self.new_text_block(content=block['raw']) # set input / output status of cell if 'output' in attr.classes and 'json' in attr.classes: block['IO'] = 'output' elif 'input' in attr.classes: block['IO'] = 'input' attr.classes.remove('input') else: block['IO'] = 'input' if self.caption_comments: # override attributes id and caption with those set in # comments, if they exist id, caption = get_caption_comments(block['content']) if id: attr.id = id if caption: attr['caption'] = caption try: # determine the language as the first class that # is in the block attributes and also in the list # of languages language = set(attr.classes).intersection(languages).pop() attr.classes.remove(language) except KeyError: language = None block['language'] = language block['attributes'] = attr # ensure one identifier for python code if language in ('python', 'py', '', None): block['language'] = self.python # add alternate language execution magic elif language != self.python and self.magic: block['content'] = CodeMagician.magic(language) + block['content'] block['language'] = language return self.new_code_block(**block)
def process_code_block(self, block): """Parse block attributes""" if block['type'] != self.code: return block attr = PandocAttributes(block['attributes'], 'markdown') if self.match == 'all': pass elif self.match == 'fenced' and block.get('indent'): return self.new_text_block(content=('\n' + block['icontent'] + '\n')) elif self.match == 'strict' and 'input' not in attr.classes: return self.new_text_block(content=block['raw']) elif self.match not in list(attr.classes) + ['fenced', 'strict']: return self.new_text_block(content=block['raw']) # set input / output status of cell if 'output' in attr.classes and 'json' in attr.classes: block['IO'] = 'output' elif 'input' in attr.classes: block['IO'] = 'input' attr.classes.remove('input') else: block['IO'] = 'input' if self.caption_comments: # override attributes id and caption with those set in # comments, if they exist id, caption = get_caption_comments(block['content']) if id: attr.id = id if caption: attr['caption'] = caption try: # determine the language as the first class that # is in the block attributes and also in the list # of languages language = set(attr.classes).intersection(languages).pop() attr.classes.remove(language) except KeyError: language = None block['language'] = language block['attributes'] = attr # ensure one identifier for python code if language in ('python', 'py', '', None): block['language'] = self.python # add alternate language execution magic elif language != self.python and self.magic: block['content'] = CodeMagician.magic(language) + block['content'] block['language'] = language return self.new_code_block(**block)
def test_markdown_format(): attr = PandocAttributes() attr.id = 'a' attr.classes = ['b'] attr.kvs['c'] = 'd' md = attr.to_markdown(format='{classes} {id} {kvs}') assert(md == '{.b #a c=d}')
def test_markdown_format(): attr = PandocAttributes() attr.id = 'a' attr.classes = ['b'] attr.kvs['c'] = 'd' md = attr.to_markdown(format='{classes} {id} {kvs}') assert (md == '{.b #a c=d}')
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])
def math_replacement(self, key, value, format, metadata): """Create our own links to equations instead of relying on mathjax. http://meta.math.stackexchange.com/questions/3764/equation-and-equation-is-the-same-for-me """ mathtype, math = value label = re.findall(math_label, math)[-1] attr = PandocAttributes() attr.id = '#' + label if format in ['latex', 'beamer']: return pf.Math(mathtype, math) else: return pf.Span(attr.to_pandoc(), [pf.Math(mathtype, math)])
def math_replacement(self, key, value, format, metadata): """Create our own links to equations instead of relying on mathjax. http://meta.math.stackexchange.com/questions/3764/equation-and-equation-is-the-same-for-me """ mathtype, math = value label = re.findall(math_label, math)[-1] attr = PandocAttributes() attr.id = '#' + label if format == 'latex' or format == 'beamer': return pf.Math(mathtype, math) else: return pf.Span(attr.to_pandoc(), [pf.Math(mathtype, math)])