Show More
@@ -1,6 +1,6 b'' | |||
|
1 | 1 | # minirst.py - minimal reStructuredText parser |
|
2 | 2 | # |
|
3 | # Copyright 2009 Matt Mackall <mpm@selenic.com> and others | |
|
3 | # Copyright 2009, 2010 Matt Mackall <mpm@selenic.com> and others | |
|
4 | 4 | # |
|
5 | 5 | # This software may be used and distributed according to the terms of the |
|
6 | 6 | # GNU General Public License version 2 or any later version. |
@@ -186,6 +186,42 b' def updatefieldlists(blocks):' | |||
|
186 | 186 | return blocks |
|
187 | 187 | |
|
188 | 188 | |
|
189 | def prunecontainers(blocks, keep): | |
|
190 | """Prune unwanted containers. | |
|
191 | ||
|
192 | The blocks must have a 'type' field, i.e., they should have been | |
|
193 | run through findliteralblocks first. | |
|
194 | """ | |
|
195 | i = 0 | |
|
196 | while i + 1 < len(blocks): | |
|
197 | # Searching for a block that looks like this: | |
|
198 | # | |
|
199 | # +-------+---------------------------+ | |
|
200 | # | ".. container ::" type | | |
|
201 | # +---+ | | |
|
202 | # | blocks | | |
|
203 | # +-------------------------------+ | |
|
204 | if (blocks[i]['type'] == 'paragraph' and | |
|
205 | blocks[i]['lines'][0].startswith('.. container::')): | |
|
206 | indent = blocks[i]['indent'] | |
|
207 | adjustment = blocks[i + 1]['indent'] - indent | |
|
208 | containertype = blocks[i]['lines'][0][15:] | |
|
209 | prune = containertype not in keep | |
|
210 | ||
|
211 | # Always delete "..container:: type" block | |
|
212 | del blocks[i] | |
|
213 | j = i | |
|
214 | while j < len(blocks) and blocks[j]['indent'] > indent: | |
|
215 | if prune: | |
|
216 | del blocks[j] | |
|
217 | i -= 1 # adjust outer index | |
|
218 | else: | |
|
219 | blocks[j]['indent'] -= adjustment | |
|
220 | j += 1 | |
|
221 | i += 1 | |
|
222 | return blocks | |
|
223 | ||
|
224 | ||
|
189 | 225 | def findsections(blocks): |
|
190 | 226 | """Finds sections. |
|
191 | 227 | |
@@ -281,12 +317,13 b' def formatblock(block, width):' | |||
|
281 | 317 | subsequent_indent=subindent) |
|
282 | 318 | |
|
283 | 319 | |
|
284 | def format(text, width, indent=0): | |
|
320 | def format(text, width, indent=0, keep=[]): | |
|
285 | 321 | """Parse and format the text according to width.""" |
|
286 | 322 | blocks = findblocks(text) |
|
287 | 323 | for b in blocks: |
|
288 | 324 | b['indent'] += indent |
|
289 | 325 | blocks = findliteralblocks(blocks) |
|
326 | blocks = prunecontainers(blocks, keep) | |
|
290 | 327 | blocks = inlineliterals(blocks) |
|
291 | 328 | blocks = splitparagraphs(blocks) |
|
292 | 329 | blocks = updatefieldlists(blocks) |
@@ -298,8 +335,8 b' def format(text, width, indent=0):' | |||
|
298 | 335 | if __name__ == "__main__": |
|
299 | 336 | from pprint import pprint |
|
300 | 337 | |
|
301 |
def debug(func, |
|
|
302 |
blocks = func( |
|
|
338 | def debug(func, *args): | |
|
339 | blocks = func(*args) | |
|
303 | 340 | print "*** after %s:" % func.__name__ |
|
304 | 341 | pprint(blocks) |
|
305 | 342 | |
@@ -308,6 +345,7 b' if __name__ == "__main__":' | |||
|
308 | 345 | text = open(sys.argv[1]).read() |
|
309 | 346 | blocks = debug(findblocks, text) |
|
310 | 347 | blocks = debug(findliteralblocks, blocks) |
|
348 | blocks = debug(prunecontainers, blocks, sys.argv[2:]) | |
|
311 | 349 | blocks = debug(inlineliterals, blocks) |
|
312 | 350 | blocks = debug(splitparagraphs, blocks) |
|
313 | 351 | blocks = debug(updatefieldlists, blocks) |
@@ -2,10 +2,10 b'' | |||
|
2 | 2 | |
|
3 | 3 | from mercurial import minirst |
|
4 | 4 | |
|
5 | def debugformat(title, text, width): | |
|
5 | def debugformat(title, text, width, **kwargs): | |
|
6 | 6 | print "%s formatted to fit within %d characters:" % (title, width) |
|
7 | 7 | print "-" * 70 |
|
8 | print minirst.format(text, width) | |
|
8 | print minirst.format(text, width, **kwargs) | |
|
9 | 9 | print "-" * 70 |
|
10 | 10 | |
|
11 | 11 | |
@@ -143,3 +143,25 b' Next list:' | |||
|
143 | 143 | |
|
144 | 144 | debugformat('fields', fields, 60) |
|
145 | 145 | debugformat('fields', fields, 30) |
|
146 | ||
|
147 | containers = """ | |
|
148 | Normal output. | |
|
149 | ||
|
150 | .. container:: debug | |
|
151 | ||
|
152 | Initial debug output. | |
|
153 | ||
|
154 | .. container:: verbose | |
|
155 | ||
|
156 | Verbose output. | |
|
157 | ||
|
158 | .. container:: debug | |
|
159 | ||
|
160 | Debug output. | |
|
161 | """ | |
|
162 | ||
|
163 | debugformat('containers (normal)', containers, 60) | |
|
164 | debugformat('containers (verbose)', containers, 60, keep=['verbose']) | |
|
165 | debugformat('containers (debug)', containers, 60, keep=['debug']) | |
|
166 | debugformat('containers (verbose debug)', containers, 60, | |
|
167 | keep=['verbose', 'debug']) |
@@ -246,3 +246,33 b' much too large' | |||
|
246 | 246 | own line. |
|
247 | 247 | ---------------------------------------------------------------------- |
|
248 | 248 | |
|
249 | containers (normal) formatted to fit within 60 characters: | |
|
250 | ---------------------------------------------------------------------- | |
|
251 | Normal output. | |
|
252 | ---------------------------------------------------------------------- | |
|
253 | ||
|
254 | containers (verbose) formatted to fit within 60 characters: | |
|
255 | ---------------------------------------------------------------------- | |
|
256 | Normal output. | |
|
257 | ||
|
258 | Verbose output. | |
|
259 | ---------------------------------------------------------------------- | |
|
260 | ||
|
261 | containers (debug) formatted to fit within 60 characters: | |
|
262 | ---------------------------------------------------------------------- | |
|
263 | Normal output. | |
|
264 | ||
|
265 | Initial debug output. | |
|
266 | ---------------------------------------------------------------------- | |
|
267 | ||
|
268 | containers (verbose debug) formatted to fit within 60 characters: | |
|
269 | ---------------------------------------------------------------------- | |
|
270 | Normal output. | |
|
271 | ||
|
272 | Initial debug output. | |
|
273 | ||
|
274 | Verbose output. | |
|
275 | ||
|
276 | Debug output. | |
|
277 | ---------------------------------------------------------------------- | |
|
278 |
General Comments 0
You need to be logged in to leave comments.
Login now