Show More
@@ -24,6 +24,8 b' It only supports a small subset of reStr' | |||||
24 |
|
24 | |||
25 | - definition lists |
|
25 | - definition lists | |
26 |
|
26 | |||
|
27 | - specific admonitions | |||
|
28 | ||||
27 | - bullet lists (items must start with '-') |
|
29 | - bullet lists (items must start with '-') | |
28 |
|
30 | |||
29 | - enumerated lists (no autonumbering) |
|
31 | - enumerated lists (no autonumbering) | |
@@ -37,6 +39,8 b' It only supports a small subset of reStr' | |||||
37 |
|
39 | |||
38 | import re, sys |
|
40 | import re, sys | |
39 | import util, encoding |
|
41 | import util, encoding | |
|
42 | from i18n import _ | |||
|
43 | ||||
40 |
|
44 | |||
41 | def replace(text, substs): |
|
45 | def replace(text, substs): | |
42 | utext = text.decode(encoding.encoding) |
|
46 | utext = text.decode(encoding.encoding) | |
@@ -292,12 +296,58 b' def addmargins(blocks):' | |||||
292 | i += 2 |
|
296 | i += 2 | |
293 | return blocks |
|
297 | return blocks | |
294 |
|
298 | |||
|
299 | def findadmonitions(blocks): | |||
|
300 | """ | |||
|
301 | Makes the type of the block an admonition block if | |||
|
302 | the first line is an admonition directive | |||
|
303 | """ | |||
|
304 | ||||
|
305 | i = 0 | |||
|
306 | ||||
|
307 | pattern = (r"\.\. (admonition|attention|caution|danger|error|hint|" | |||
|
308 | r"important|note|tip|warning)::") | |||
|
309 | ||||
|
310 | prog = re.compile(pattern, flags=re.IGNORECASE) | |||
|
311 | while i < len(blocks): | |||
|
312 | m = prog.match(blocks[i]['lines'][0]) | |||
|
313 | if m: | |||
|
314 | blocks[i]['type'] = 'admonition' | |||
|
315 | admonitiontitle = blocks[i]['lines'][0][3:m.end() - 2].lower() | |||
|
316 | ||||
|
317 | firstline = blocks[i]['lines'][0][m.end() + 1:] | |||
|
318 | if firstline != '': | |||
|
319 | blocks[i]['lines'].insert(1, ' ' + firstline + '') | |||
|
320 | ||||
|
321 | ||||
|
322 | blocks[i]['admonitiontitle'] = admonitiontitle | |||
|
323 | del blocks[i]['lines'][0] | |||
|
324 | i = i + 1 | |||
|
325 | return blocks | |||
295 |
|
326 | |||
296 | def formatblock(block, width): |
|
327 | def formatblock(block, width): | |
297 | """Format a block according to width.""" |
|
328 | """Format a block according to width.""" | |
298 | if width <= 0: |
|
329 | if width <= 0: | |
299 | width = 78 |
|
330 | width = 78 | |
300 | indent = ' ' * block['indent'] |
|
331 | indent = ' ' * block['indent'] | |
|
332 | if block['type'] == 'admonition': | |||
|
333 | titles = {'attention': _('Attention:'), | |||
|
334 | 'caution': _('Caution:'), | |||
|
335 | 'danger': _('!Danger!') , | |||
|
336 | 'error': _('Error:'), | |||
|
337 | 'hint': _('Hint:'), | |||
|
338 | 'important': _('Important:'), | |||
|
339 | 'note': _('Note:'), | |||
|
340 | 'tip': _('Tip:'), | |||
|
341 | 'warning': _('Warning!')} | |||
|
342 | ||||
|
343 | admonition = titles[block['admonitiontitle']] | |||
|
344 | hang = len(block['lines'][-1]) - len(block['lines'][-1].lstrip()) | |||
|
345 | ||||
|
346 | defindent = indent + hang * ' ' | |||
|
347 | text = ' '.join(map(str.strip, block['lines'])) | |||
|
348 | return '%s\n%s' % (indent + admonition, util.wrap(text, width=width, | |||
|
349 | initindent=defindent, | |||
|
350 | hangindent=defindent)) | |||
301 | if block['type'] == 'margin': |
|
351 | if block['type'] == 'margin': | |
302 | return '' |
|
352 | return '' | |
303 | if block['type'] == 'literal': |
|
353 | if block['type'] == 'literal': | |
@@ -363,6 +413,7 b' def format(text, width, indent=0, keep=N' | |||||
363 | blocks = splitparagraphs(blocks) |
|
413 | blocks = splitparagraphs(blocks) | |
364 | blocks = updatefieldlists(blocks) |
|
414 | blocks = updatefieldlists(blocks) | |
365 | blocks = addmargins(blocks) |
|
415 | blocks = addmargins(blocks) | |
|
416 | blocks = findadmonitions(blocks) | |||
366 | text = '\n'.join(formatblock(b, width) for b in blocks) |
|
417 | text = '\n'.join(formatblock(b, width) for b in blocks) | |
367 | if keep is None: |
|
418 | if keep is None: | |
368 | return text |
|
419 | return text | |
@@ -389,4 +440,5 b' if __name__ == "__main__":' | |||||
389 | blocks = debug(updatefieldlists, blocks) |
|
440 | blocks = debug(updatefieldlists, blocks) | |
390 | blocks = debug(findsections, blocks) |
|
441 | blocks = debug(findsections, blocks) | |
391 | blocks = debug(addmargins, blocks) |
|
442 | blocks = debug(addmargins, blocks) | |
|
443 | blocks = debug(findadmonitions, blocks) | |||
392 | print '\n'.join(formatblock(b, 30) for b in blocks) |
|
444 | print '\n'.join(formatblock(b, 30) for b in blocks) |
@@ -197,3 +197,20 b' Markup: ``foo`` and :hg:`help`' | |||||
197 | ------------------------------ |
|
197 | ------------------------------ | |
198 | """ |
|
198 | """ | |
199 | debugformat('sections', sections, 20) |
|
199 | debugformat('sections', sections, 20) | |
|
200 | ||||
|
201 | ||||
|
202 | admonitions = """ | |||
|
203 | .. note:: | |||
|
204 | This is a note | |||
|
205 | ||||
|
206 | - Bullet 1 | |||
|
207 | - Bullet 2 | |||
|
208 | ||||
|
209 | .. warning:: This is a warning Second | |||
|
210 | input line of warning | |||
|
211 | ||||
|
212 | .. danger:: | |||
|
213 | This is danger | |||
|
214 | """ | |||
|
215 | ||||
|
216 | debugformat('admonitions', admonitions, 30) |
@@ -318,3 +318,19 b' Markup: "foo" and "hg help"' | |||||
318 | --------------------------- |
|
318 | --------------------------- | |
319 | ---------------------------------------------------------------------- |
|
319 | ---------------------------------------------------------------------- | |
320 |
|
320 | |||
|
321 | admonitions formatted to fit within 30 characters: | |||
|
322 | ---------------------------------------------------------------------- | |||
|
323 | Note: | |||
|
324 | This is a note | |||
|
325 | ||||
|
326 | - Bullet 1 | |||
|
327 | - Bullet 2 | |||
|
328 | ||||
|
329 | Warning! | |||
|
330 | This is a warning Second | |||
|
331 | input line of warning | |||
|
332 | ||||
|
333 | !Danger! | |||
|
334 | This is danger | |||
|
335 | ---------------------------------------------------------------------- | |||
|
336 |
General Comments 0
You need to be logged in to leave comments.
Login now