opensandwich

markdown in progress

Sep 9th, 2012
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.66 KB | None | 0 0
  1. # Markdown to html
  2. # Author: Chapman
  3. import re
  4.  
  5. a = 'D:/Markdown/a.txt'
  6. file = open(a,'r')
  7. lines = file.read()
  8. file.close()
  9.  
  10. lines = '\n'+lines+'\n'
  11.  
  12. def blockQuote(lines):
  13.     lines = re.sub('(\n>){1,}','\n>',lines)
  14.     #lines = re.sub(r'(\n>)','\n>',lines)
  15.     lines1 = re.split(r'(\n>)',lines)
  16.     lines2=''
  17.     for idx, elem in enumerate(lines1):
  18.         #if previous element is \n> then append it,
  19.         #if previous element is \n> and next element is not \n> then append block code
  20.         #else append with nothing
  21.         if lines1[idx]=='\n>':
  22.             lines2=lines2
  23.         elif lines1[idx-1]!='\n>':
  24.             if idx != len(lines1)-1:
  25.                 if lines1[idx+1]=='\n>':
  26.                     lines2=lines2+str(elem)+'\n<blockquote>'
  27.                 else:
  28.                     lines2=lines2+str(elem)
  29.             else:
  30.                 lines2=lines2+str(elem)
  31.         elif lines1[idx-1] == '\n>':
  32.             if idx != len(lines1)-1:
  33.                 if lines1[idx+1] != '\n>':
  34.                     lines2 = lines2 + re.sub(r'(?=\n)',r''+'\n</blockquote>',elem,count =1)
  35.                 else:
  36.                     lines2=lines2+'\n>'+str(elem)
  37.             else:
  38.                 lines2 = lines2 +'\n>'+re.sub(r'(?=\n)',r''+'\n</blockquote>',elem,count =1)
  39.     return lines2
  40.  
  41. def header(lines):
  42.     for x in reversed(range(1,6)): # headers only work from 1 to 6
  43.         lines = re.sub(r'(?<=\n)(?:[#]{'+str(x)+'}\s)([^\n]+)',r'\1'+'</h'+str(x)+'>\n',lines)
  44.         lines = re.sub(r'(?<=\n)(?:(?:> )[#]{'+str(x)+'}\s)([^\n]+)',r'> \1'+'</h'+str(x)+'>\n',lines) #for block quotes
  45.         lines = re.sub(r'([\s#]+)(</h[1-6]?)',r'\2',lines)
  46.     lines = re.sub(r'\n[=]+\n',r'</h1>\n',lines)
  47.     lines = re.sub(r'\n[-]+\n',r'</h2>\n',lines)
  48.     for x in reversed(range(1,6)): #add the h tags to the beginning of the line
  49.         lines = re.sub(r'(?<=\n)(?=[^\n]+</h'+str(x)+'>)',r'<h'+str(x)+'>',lines)
  50.     return lines
  51.  
  52. def paragraph(lines):
  53.     lines = re.sub(r'(<[hH][1-6]>)>\s+',r'\1',lines)
  54.     lines = re.sub(r'\n>','\n<p>',lines)
  55.     lines = re.sub(r'(?<=\n\n)(?=[^><\s])','<p>',lines)
  56.     lines = re.sub(r'([\n]{3,})','\n\n',lines)
  57.     lines = re.sub(r'(?<=[^>])(?=\n\n)',r'</p>',lines)
  58.     return lines
  59.  
  60. def emphasis(lines):
  61.     lines = re.sub(r'\*{2}([^\n]+)\*{2}',r'<strong>\1</strong>',lines)
  62.     lines = re.sub(r'_{2}([^\n]+)_{2}',r'<strong>\1</strong>',lines)
  63.     lines = re.sub(r'[\*_]([^\n]+)[\*_]',r'<b>\1</b>',lines)
  64.     return lines
  65.  
  66. def List(lines):
  67.     lines1 = re.split(r'(\n[0-9]+\.)',lines)
  68.     #get the indices for 1.
  69.     b = [elem for elem in range(len(lines1)) if lines1[elem]=='\n1.']
  70.     lines2 = lines1
  71.  
  72.     for elem in b:
  73.         lines2[elem] = '\n\n<ol>\n<li>'
  74.         i = 1
  75.         dummy = str(i+1)
  76.         index = min(elem+2,len(lines2)-1)
  77.         while (dummy==str(i+1)):
  78.             index = min(index,len(lines2)-1)
  79.             dummy = re.sub(r'\n([0-9]+)\.',r'\1',lines2[index])
  80.             if dummy==str(i+1):
  81.                 lines2[index] = '\n<li>'
  82.                 i+=1
  83.                 dummy = str(i+1)
  84.                 index += 2
  85.     lines3 = ''
  86.     for elem in lines2:
  87.         lines3 = lines3 + elem
  88.     lines3 = re.sub(r'(<li>[^\n]+)(?=\n)',r'\1</li>',lines3)
  89.     lines3 = re.sub(r'(</li>\n)(?=[^<])',r'\1</ol>\n\n',lines3)
  90.     lines3 = re.sub(r'(?<=\n)([\*+-])',r'<li>\1',lines3)
  91.     lines3 = re.sub(r'(<li>[\*+-][^\n]+)(?=\n)',r'\1</li>',lines3)
  92.     lines3 = re.sub(r'(<li>[\*+-][\s]+)','<li>',lines3)
  93.     return lines3
  94.  
  95. lines = List(lines)
  96. lines = emphasis(lines)
  97. lines = blockQuote(lines)
  98. lines = header(lines)
  99. lines = paragraph(lines)
  100.  
  101. f = open("D:/test1.html","w")
  102. f.write(lines)
  103. f.close()
Advertisement
Add Comment
Please, Sign In to add comment