comparison mercurial/minirst.py @ 10444:e99e0e077bc4

minirst: report pruned container types
author Martin Geisler <mg@lazybytes.net>
date Sat, 13 Feb 2010 18:11:08 +0100
parents 62d484a81dfe
children e957cc7cbd14
comparison
equal deleted inserted replaced
10443:62d484a81dfe 10444:e99e0e077bc4
190 """Prune unwanted containers. 190 """Prune unwanted containers.
191 191
192 The blocks must have a 'type' field, i.e., they should have been 192 The blocks must have a 'type' field, i.e., they should have been
193 run through findliteralblocks first. 193 run through findliteralblocks first.
194 """ 194 """
195 pruned = []
195 i = 0 196 i = 0
196 while i + 1 < len(blocks): 197 while i + 1 < len(blocks):
197 # Searching for a block that looks like this: 198 # Searching for a block that looks like this:
198 # 199 #
199 # +-------+---------------------------+ 200 # +-------+---------------------------+
205 blocks[i]['lines'][0].startswith('.. container::')): 206 blocks[i]['lines'][0].startswith('.. container::')):
206 indent = blocks[i]['indent'] 207 indent = blocks[i]['indent']
207 adjustment = blocks[i + 1]['indent'] - indent 208 adjustment = blocks[i + 1]['indent'] - indent
208 containertype = blocks[i]['lines'][0][15:] 209 containertype = blocks[i]['lines'][0][15:]
209 prune = containertype not in keep 210 prune = containertype not in keep
211 if prune:
212 pruned.append(containertype)
210 213
211 # Always delete "..container:: type" block 214 # Always delete "..container:: type" block
212 del blocks[i] 215 del blocks[i]
213 j = i 216 j = i
214 while j < len(blocks) and blocks[j]['indent'] > indent: 217 while j < len(blocks) and blocks[j]['indent'] > indent:
217 i -= 1 # adjust outer index 220 i -= 1 # adjust outer index
218 else: 221 else:
219 blocks[j]['indent'] -= adjustment 222 blocks[j]['indent'] -= adjustment
220 j += 1 223 j += 1
221 i += 1 224 i += 1
222 return blocks 225 return blocks, pruned
223 226
224 227
225 def findsections(blocks): 228 def findsections(blocks):
226 """Finds sections. 229 """Finds sections.
227 230
315 return textwrap.fill(text, width=width, 318 return textwrap.fill(text, width=width,
316 initial_indent=initindent, 319 initial_indent=initindent,
317 subsequent_indent=subindent) 320 subsequent_indent=subindent)
318 321
319 322
320 def format(text, width, indent=0, keep=[]): 323 def format(text, width, indent=0, keep=None):
321 """Parse and format the text according to width.""" 324 """Parse and format the text according to width."""
322 blocks = findblocks(text) 325 blocks = findblocks(text)
323 for b in blocks: 326 for b in blocks:
324 b['indent'] += indent 327 b['indent'] += indent
325 blocks = findliteralblocks(blocks) 328 blocks = findliteralblocks(blocks)
326 blocks = prunecontainers(blocks, keep) 329 blocks, pruned = prunecontainers(blocks, keep or [])
327 blocks = inlineliterals(blocks) 330 blocks = inlineliterals(blocks)
328 blocks = splitparagraphs(blocks) 331 blocks = splitparagraphs(blocks)
329 blocks = updatefieldlists(blocks) 332 blocks = updatefieldlists(blocks)
330 blocks = findsections(blocks) 333 blocks = findsections(blocks)
331 blocks = addmargins(blocks) 334 blocks = addmargins(blocks)
332 return '\n'.join(formatblock(b, width) for b in blocks) 335 text = '\n'.join(formatblock(b, width) for b in blocks)
336 if keep is None:
337 return text
338 else:
339 return text, pruned
333 340
334 341
335 if __name__ == "__main__": 342 if __name__ == "__main__":
336 from pprint import pprint 343 from pprint import pprint
337 344