Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Markdown to html
- import re
- a = 'D:/Markdown/a.txt'
- file = open(a,'r')
- lines = file.read()
- file.close()
- lines = '\n'+lines+'\n'
- def blockQuote(lines):
- lines = re.sub('(\n>){1,}','\n>',lines)
- #lines = re.sub(r'(\n>)','\n>',lines)
- lines1 = re.split(r'(\n>)',lines)
- lines2=''
- for idx, elem in enumerate(lines1):
- #if previous element is \n> then append it,
- #if previous element is \n> and next element is not \n> then append block code
- #else append with nothing
- if lines1[idx]=='\n>':
- lines2=lines2
- elif lines1[idx-1]!='\n>':
- if idx != len(lines1)-1:
- if lines1[idx+1]=='\n>':
- lines2=lines2+str(elem)+'\n<blockquote>'
- else:
- lines2=lines2+str(elem)
- else:
- lines2=lines2+str(elem)
- elif lines1[idx-1] == '\n>':
- if idx != len(lines1)-1:
- if lines1[idx+1] != '\n>':
- lines2 = lines2 + re.sub(r'(?=\n)',r''+'\n</blockquote>',elem,count =1)
- else:
- lines2=lines2+'\n>'+str(elem)
- else:
- lines2 = lines2 +'\n>'+re.sub(r'(?=\n)',r''+'\n</blockquote>',elem,count =1)
- return lines2
- def header(lines):
- for x in reversed(range(1,6)): # headers only work from 1 to 6
- lines = re.sub(r'(?<=\n)(?:[#]{'+str(x)+'}\s)([^\n]+)',r'\1'+'</h'+str(x)+'>\n',lines)
- lines = re.sub(r'(?<=\n)(?:(?:> )[#]{'+str(x)+'}\s)([^\n]+)',r'> \1'+'</h'+str(x)+'>\n',lines) #for block quotes
- lines = re.sub(r'([\s#]+)(</h[1-6]?)',r'\2',lines)
- lines = re.sub(r'\n[=]+\n',r'</h1>\n',lines)
- lines = re.sub(r'\n[-]+\n',r'</h2>\n',lines)
- for x in reversed(range(1,6)): #add the h tags to the beginning of the line
- lines = re.sub(r'(?<=\n)(?=[^\n]+</h'+str(x)+'>)',r'<h'+str(x)+'>',lines)
- return lines
- def paragraph(lines):
- lines = re.sub(r'(<[hH][1-6]>)>\s+',r'\1',lines)
- lines = re.sub(r'\n>','\n<p>',lines)
- lines = re.sub(r'(?<=\n\n)(?=[^><\s])','<p>',lines)
- lines = re.sub(r'([\n]{3,})','\n\n',lines)
- lines = re.sub(r'(?<=[^>])(?=\n\n)',r'</p>',lines)
- return lines
- def emphasis(lines):
- lines = re.sub(r'\*{2}([^\n]+)\*{2}',r'<strong>\1</strong>',lines)
- lines = re.sub(r'_{2}([^\n]+)_{2}',r'<strong>\1</strong>',lines)
- lines = re.sub(r'[\*_]([^\n]+)[\*_]',r'<b>\1</b>',lines)
- return lines
- def List(lines):
- lines1 = re.split(r'(\n[0-9]+\.)',lines)
- #get the indices for 1.
- b = [elem for elem in range(len(lines1)) if lines1[elem]=='\n1.']
- lines2 = lines1
- for elem in b:
- lines2[elem] = '\n\n<ol>\n<li>'
- i = 1
- dummy = str(i+1)
- index = min(elem+2,len(lines2)-1)
- while (dummy==str(i+1)):
- index = min(index,len(lines2)-1)
- dummy = re.sub(r'\n([0-9]+)\.',r'\1',lines2[index])
- if dummy==str(i+1):
- lines2[index] = '\n<li>'
- i+=1
- dummy = str(i+1)
- index += 2
- lines3 = ''
- for elem in lines2:
- lines3 = lines3 + elem
- lines3 = re.sub(r'(<li>[^\n]+)(?=\n)',r'\1</li>',lines3)
- lines3 = re.sub(r'(</li>\n)(?=[^<])',r'\1</ol>\n\n',lines3)
- lines3 = re.sub(r'(?<=\n)([\*+-])',r'<li>\1',lines3)
- lines3 = re.sub(r'(<li>[\*+-][^\n]+)(?=\n)',r'\1</li>',lines3)
- lines3 = re.sub(r'(<li>[\*+-][\s]+)','<li>',lines3)
- return lines3
- lines = List(lines)
- lines = emphasis(lines)
- lines = blockQuote(lines)
- lines = header(lines)
- lines = paragraph(lines)
- f = open("D:/test1.html","w")
- f.write(lines)
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement