Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/docutils/parsers/rst/directives/html.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d30785e31577 |
---|---|
1 # $Id: html.py 8347 2019-08-26 12:12:02Z milde $ | |
2 # Author: David Goodger <goodger@python.org> | |
3 # Copyright: This module has been placed in the public domain. | |
4 | |
5 """ | |
6 Directives for typically HTML-specific constructs. | |
7 """ | |
8 | |
9 __docformat__ = 'reStructuredText' | |
10 | |
11 import sys | |
12 from docutils import nodes, utils | |
13 from docutils.parsers.rst import Directive | |
14 from docutils.parsers.rst import states | |
15 from docutils.transforms import components | |
16 | |
17 | |
18 class MetaBody(states.SpecializedBody): | |
19 | |
20 class meta(nodes.Special, nodes.PreBibliographic, nodes.Element): | |
21 """HTML-specific "meta" element.""" | |
22 pass | |
23 | |
24 def field_marker(self, match, context, next_state): | |
25 """Meta element.""" | |
26 node, blank_finish = self.parsemeta(match) | |
27 self.parent += node | |
28 return [], next_state, [] | |
29 | |
30 def parsemeta(self, match): | |
31 name = self.parse_field_marker(match) | |
32 name = utils.unescape(utils.escape2null(name)) | |
33 indented, indent, line_offset, blank_finish = \ | |
34 self.state_machine.get_first_known_indented(match.end()) | |
35 node = self.meta() | |
36 pending = nodes.pending(components.Filter, | |
37 {'component': 'writer', | |
38 'format': 'html', | |
39 'nodes': [node]}) | |
40 node['content'] = utils.unescape(utils.escape2null( | |
41 ' '.join(indented))) | |
42 if not indented: | |
43 line = self.state_machine.line | |
44 msg = self.reporter.info( | |
45 'No content for meta tag "%s".' % name, | |
46 nodes.literal_block(line, line)) | |
47 return msg, blank_finish | |
48 tokens = name.split() | |
49 try: | |
50 attname, val = utils.extract_name_value(tokens[0])[0] | |
51 node[attname.lower()] = val | |
52 except utils.NameValueError: | |
53 node['name'] = tokens[0] | |
54 for token in tokens[1:]: | |
55 try: | |
56 attname, val = utils.extract_name_value(token)[0] | |
57 node[attname.lower()] = val | |
58 except utils.NameValueError as detail: | |
59 line = self.state_machine.line | |
60 msg = self.reporter.error( | |
61 'Error parsing meta tag attribute "%s": %s.' | |
62 % (token, detail), nodes.literal_block(line, line)) | |
63 return msg, blank_finish | |
64 self.document.note_pending(pending) | |
65 return pending, blank_finish | |
66 | |
67 | |
68 class Meta(Directive): | |
69 | |
70 has_content = True | |
71 | |
72 SMkwargs = {'state_classes': (MetaBody,)} | |
73 | |
74 def run(self): | |
75 self.assert_has_content() | |
76 node = nodes.Element() | |
77 new_line_offset, blank_finish = self.state.nested_list_parse( | |
78 self.content, self.content_offset, node, | |
79 initial_state='MetaBody', blank_finish=True, | |
80 state_machine_kwargs=self.SMkwargs) | |
81 if (new_line_offset - self.content_offset) != len(self.content): | |
82 # incomplete parse of block? | |
83 error = self.state_machine.reporter.error( | |
84 'Invalid meta directive.', | |
85 nodes.literal_block(self.block_text, self.block_text), | |
86 line=self.lineno) | |
87 node += error | |
88 return node.children |