| 
					
				 | 
			
			
				@@ -0,0 +1,49 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#!/usr/bin/even/python 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from __future__ import with_statement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import re 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import sys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+RE_CODE_BLOCK = re.compile(r'.. code-block:: (.+?)\s*$') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+RE_REFERENCE = re.compile(r':(.+?):`(.+?)`') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def replace_code_block(lines, pos): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lines[pos] = "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    curpos = pos - 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Find the first previous line with text to append "::" to it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        prev_line = lines[curpos] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not prev_line.isspace(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            prev_line_with_text = curpos 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        curpos -= 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if lines[prev_line_with_text].endswith(":"): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lines[prev_line_with_text] += ":" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        lines[prev_line_with_text] += "::" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+TO_RST_MAP = {RE_CODE_BLOCK: replace_code_block, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              RE_REFERENCE: r'``\2``'} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def _process(lines): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lines = list(lines) # non-destructive 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for i, line in enumerate(lines): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for regex, alt in TO_RST_MAP.items(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if callable(alt): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if regex.match(line): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    alt(lines, i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    line = lines[i] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                lines[i] = regex.sub(alt, line) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return lines 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def sphinx_to_rst(fh): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return "".join(_process(fh)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if __name__ == "__main__": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    with open(sys.argv[1]) as fh: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(sphinx_to_rst(fh)) 
			 |