gen HTML & BB-CODE
ทดลองเขียนสคริปต์ช่วยผลิต html กับ bbcode เพื่อลดข้อผิดพลาด
ตั้งชื่อว่า d_genhtbb.py
$ vi d_genhtbb.py
#!/usr/bin/env python """ Gen HTML code and BB code from text file "- " = <li>, [li] : for listing "$ " = <code class="green">, [color=green] : command line for user "# " = <code class="blue">, [color=blue] : command line for root "c " = <pre>, [code] : preformat/code block "g " = <code class="grey">, [color=orange] : comment """ import sys def usage(prog): test("- test list") test("$ test normal user") test("a@b:~# test root user") test("abcde <<<--- xxx yyy") test("c this is code") test("g this is comment") test("test normal") print "Usage: %s file.txt" % prog print "Will generate file.txt.html and file.txt.bbcode as above" def bare_tag(tag): """ Determine bare tag from head tag """ if " " in tag: return tag[:tag.find(" ")] elif "=" in tag: return tag[:tag.find("=")] else: return tag def tag_ins(code_type=0, is_del_old=False, is_after=False, line="", d_tag="", tag=""): """ Find & replace of d_tag in line """ if code_type==0: #HTML tag_beg="<"+tag+">" tag_end="</"+bare_tag(tag)+">" else: #BB-CODE tag_beg="["+tag+"]" tag_end="[/"+bare_tag(tag)+"]" if d_tag=="": #PLAIN return tag_beg+line+tag_end if is_del_old: #IS DELETE D_TAG return line.replace(d_tag,tag_beg)+tag_end else: if is_after: #INSERT BEFORE return line.replace(d_tag,d_tag+tag_beg)+tag_end else: #INSERT AFTER return line.replace(d_tag,tag_beg+d_tag).strip()+tag_end # # def gen_html(line): """ Print html line using function tag_ins \n \ def tag_ins(code_type=0, is_del_old=False, is_after=False, line="", d_tag="- ", tag="li"): """ if line=="": return line if line[:2] in ("- "): return tag_ins(0, True, True, line, "- ", "li") elif line[:2] in ("$ "): return tag_ins(0, False, True, line, "$ ", 'code class="green"') elif line[:2] in ("# "): return tag_ins(0, False, True, line, "# ", 'code class="blue"') elif line[:2] in ("c "): return tag_ins(0, True, True, line, "c ", 'pre') elif line[:2] in ("g "): return tag_ins(0, True, True, line, "g ", 'code class="grey"') elif "~$ " in line: return tag_ins(0, False, True, line, "~$ ", 'code class="green"') elif "~# " in line: return tag_ins(0, False, True, line, "~# ", 'code class="blue"') elif "mysql> " in line: return tag_ins(0, False, True, line, "mysql> ", 'code class="blue"') elif "<<<--- " in line: return tag_ins(0, False, True, line, "<<<--- ", 'code class="red"') else: return tag_ins(0, False, True, line, "", "p") def gen_bb(line): """ Print bb-code line using function tag_ins \n \ def tag_ins(code_type=0, is_del_old=False, is_after=False, line="", d_tag="- ", tag="li"): """ if line == "": return line if line[:2] in ("- "): return tag_ins(1, True, True, line, "- ", "li") elif line[:2] in ("$ "): return tag_ins(1, False, True, line, "$ ", "color=green") elif line[:2] in ("# "): return tag_ins(1, False, True, line, "# ", "color=blue") elif line[:2] in ("c "): return tag_ins(1, True, True, line, "c ", 'code') elif line[:2] in ("g "): return tag_ins(1, True, True, line, "g ", "color=teal") elif "~$ " in line: return tag_ins(1, False, True, line, "~$ ", "color=green") elif "~# " in line: return tag_ins(1, False, True, line, "~# ", "color=blue") elif "mysql> " in line: return tag_ins(1, False, True, line, "mysql> ", "color=blue") elif "<<<--- " in line: return tag_ins(1, False, True, line, "<<<--- ", 'color=red') else: return line def test(line): """ Print out test tag """ print "input =",line print "html =",gen_html(line.strip()) print "bbcode=",gen_bb(line.strip()) print def main(sys_argv): """ Main routine """ filename=sys_argv[1] try: fs=open(filename) except: print "Cannot open %s" % filename sys.exit(1) try: fs_html=open(filename+".html","w") except: print "Cannot open %s for writing" % filename+".html" sys.exit(2) try: fs_bbcode=open(filename+".bbcode","w") except: print "Cannot open %s for writing" % filename+".bbcode" sys.exit(3) for line in fs: fs_html.write(gen_html(line.strip())+"\n") fs_bbcode.write(gen_bb(line.strip())+"\n") fs.close() fs_html.close() fs_bbcode.close() print "%s -> %s and %s succeed" % (filename, filename+".html", filename+".bbcode") if __name__=="__main__": if len(sys.argv)==1: usage(sys.argv[0]) else: main(sys.argv)
เวลาสั่งรันก็ใช้
$ ./d_genhtbb.py x.txt
เขาจะผลิต x.txt.html กับ x.txt.bbcode ออกมา
แต่ยังต้องปรับแต่งด้วยมืออีกเพียบ
แล้วก็มีเรื่องต้องปรับปรุงอีกเยอะ แต่เวลาไม่เอื้อ เอาแค่นี้ก่อนละกัน
ตัวอย่าง ข้อมูลเข้า
- test list $ test normal user a@b:~# test root user abcde <<<--- xxx yyy c this is code g this is comment test normal
ได้ html แบบนี้
$ test normal user
a@b:~# test root user
abcde <<<--- xxx yyy
this is code
this is comment
test normal
ได้ bbcode แบบนี้
[list][li]test list[/li][/list] $ [color=green]test normal user[/color] a@b:~# [color=blue]test root user[/color] abcde <<<--- [color=red]xxx yyy[/color] [code]this is code[/code] [color=teal]this is comment[/color] test normal
สำหรับ html
ตรง <li> ต้องมาเพิ่ม <ul> ด้วยมือเอาเอง ถึงจะถูกมาตรฐาน
ตรง <code> class="COLOR"</code> ต้องเขียนสไตล์ชึตเพิ่มเรื่องสีเอาเอง ตัวอย่างคือ
.grey { color: #999; } .blue { color: #00c; } .green { color: #090; }
ยังขาดเรื่อง แปลงเครื่องหมายน้อยกว่า < เป็น & lt;
ขาดการตรวจสอบ <pre> แบบหลายบรรทัด
ใช้มือแก้ไปก่อนแล้วกัน เดี๋ยวมีเวลาค่อยกลับมาดูใหม่
Recent comments