diff --git a/pysollib/tile/tkhtml.py b/pysollib/tile/tkhtml.py
index e5d91001..7728e8ef 100644
--- a/pysollib/tile/tkhtml.py
+++ b/pysollib/tile/tkhtml.py
@@ -45,174 +45,7 @@ from pysollib.ui.tktile.tkutil import bind, unbind_destroy
from tkwidget import MfxMessageDialog
from statusbar import HtmlStatusbar
-
-REMOTE_PROTOCOLS = ("ftp:", "gopher:", "http:", "mailto:", "news:", "telnet:")
-
-
-# ************************************************************************
-# *
-# ************************************************************************
-
-class tkHTMLWriter(formatter.NullWriter):
- def __init__(self, text, viewer, app):
- formatter.NullWriter.__init__(self)
-
- self.text = text
- self.viewer = viewer
-
- ##
- if app:
- font = app.getFont("sans")
- fixed = app.getFont("fixed")
- else:
- font = ('helvetica', 12)
- fixed = ('courier', 12)
- size = font[1]
- sign = 1
- if size < 0: sign = -1
- self.fontmap = {
- "h1" : (font[0], size + 12*sign, "bold"),
- "h2" : (font[0], size + 8*sign, "bold"),
- "h3" : (font[0], size + 6*sign, "bold"),
- "h4" : (font[0], size + 4*sign, "bold"),
- "h5" : (font[0], size + 2*sign, "bold"),
- "h6" : (font[0], size + 1*sign, "bold"),
- "bold" : (font[0], size, "bold"),
- "italic" : (font[0], size, "italic"),
- "pre" : fixed,
- }
-
- self.text.config(cursor=self.viewer.defcursor, font=font)
- for f in self.fontmap.keys():
- self.text.tag_config(f, font=self.fontmap[f])
-
- self.anchor = None
- self.anchor_mark = None
- self.font = None
- self.font_mark = None
- self.indent = ""
-
- def createCallback(self, href):
- class Functor:
- def __init__(self, viewer, arg):
- self.viewer = viewer
- self.arg = arg
- def __call__(self, *args):
- self.viewer.updateHistoryXYView()
- return self.viewer.display(self.arg)
- return Functor(self.viewer, href)
-
- def write(self, data):
- self.text.insert("insert", data)
-
- def anchor_bgn(self, href, name, type):
- if href:
- ##self.text.update_idletasks() # update display during parsing
- self.anchor = (href, name, type)
- self.anchor_mark = self.text.index("insert")
-
- def anchor_end(self):
- if self.anchor:
- url = self.anchor[0]
- tag = "href_" + url
- self.text.tag_add(tag, self.anchor_mark, "insert")
- self.text.tag_bind(tag, "<1>", self.createCallback(url))
- self.text.tag_bind(tag, "", lambda e: self.anchor_enter(url))
- self.text.tag_bind(tag, "", self.anchor_leave)
- fg = 'blue'
- u = self.viewer.normurl(url, with_protocol=False)
- if u in self.viewer.visited_urls:
- fg = '#660099'
- self.text.tag_config(tag, foreground=fg, underline=1)
- self.anchor = None
-
- def anchor_enter(self, url):
- url = self.viewer.normurl(url)
- self.viewer.statusbar.updateText(url=url)
- self.text.config(cursor=self.viewer.handcursor)
-
- def anchor_leave(self, *args):
- self.viewer.statusbar.updateText(url='')
- self.text.config(cursor=self.viewer.defcursor)
-
- def new_font(self, font):
- # end the current font
- if self.font:
- ##print "end_font(%s)" % `self.font`
- self.text.tag_add(self.font, self.font_mark, "insert")
- self.font = None
- # start the new font
- if font:
- ##print "start_font(%s)" % `font`
- self.font_mark = self.text.index("insert")
- if font[0] in self.fontmap:
- self.font = font[0]
- elif font[3]:
- self.font = "pre"
- elif font[2]:
- self.font = "bold"
- elif font[1]:
- self.font = "italic"
- else:
- self.font = None
-
- def new_margin(self, margin, level):
- self.indent = " " * level
-
- def send_label_data(self, data):
- ##self.write(self.indent + data + " ")
- self.write(self.indent)
- if data == '*': #
- img = self.viewer.symbols_img.get('disk')
- if img:
- self.text.image_create(index='insert', image=img,
- padx=0, pady=0)
- else:
- self.write('*')
- else:
- self.write(data)
- self.write(' ')
-
- def send_paragraph(self, blankline):
- self.write('\n' * blankline)
-
- def send_line_break(self):
- self.write('\n')
-
- def send_hor_rule(self, *args):
- width = int(int(self.text["width"]) * 0.9)
- self.write("_" * width)
- self.write("\n")
-
- def send_literal_data(self, data):
- self.write(data)
-
- def send_flowing_data(self, data):
- self.write(data)
-
-
-# ************************************************************************
-# *
-# ************************************************************************
-
-class tkHTMLParser(htmllib.HTMLParser):
- def anchor_bgn(self, href, name, type):
- self.formatter.flush_softspace()
- htmllib.HTMLParser.anchor_bgn(self, href, name, type)
- self.formatter.writer.anchor_bgn(href, name, type)
-
- def anchor_end(self):
- if self.anchor:
- self.anchor = None
- self.formatter.writer.anchor_end()
-
- def do_dt(self, attrs):
- self.formatter.end_paragraph(1)
- self.ddpop()
-
- def handle_image(self, src, alt, ismap, align, width, height):
- self.formatter.writer.viewer.showImage(src, alt, ismap, align, width, height)
-
+from pysollib.ui.tktile.tkhtml import REMOTE_PROTOCOLS, tkHTMLWriter, tkHTMLParser
# ************************************************************************
# *
diff --git a/pysollib/tk/tkhtml.py b/pysollib/tk/tkhtml.py
index 9117e096..1f466a77 100644
--- a/pysollib/tk/tkhtml.py
+++ b/pysollib/tk/tkhtml.py
@@ -44,174 +44,7 @@ from pysollib.ui.tktile.tkutil import bind, unbind_destroy
from tkwidget import MfxMessageDialog
from statusbar import HtmlStatusbar
-
-REMOTE_PROTOCOLS = ("ftp:", "gopher:", "http:", "mailto:", "news:", "telnet:")
-
-
-# ************************************************************************
-# *
-# ************************************************************************
-
-class tkHTMLWriter(formatter.NullWriter):
- def __init__(self, text, viewer, app):
- formatter.NullWriter.__init__(self)
-
- self.text = text
- self.viewer = viewer
-
- ##
- if app:
- font = app.getFont("sans")
- fixed = app.getFont("fixed")
- else:
- font = ('helvetica', 12)
- fixed = ('courier', 12)
- size = font[1]
- sign = 1
- if size < 0: sign = -1
- self.fontmap = {
- "h1" : (font[0], size + 12*sign, "bold"),
- "h2" : (font[0], size + 8*sign, "bold"),
- "h3" : (font[0], size + 6*sign, "bold"),
- "h4" : (font[0], size + 4*sign, "bold"),
- "h5" : (font[0], size + 2*sign, "bold"),
- "h6" : (font[0], size + 1*sign, "bold"),
- "bold" : (font[0], size, "bold"),
- "italic" : (font[0], size, "italic"),
- "pre" : fixed,
- }
-
- self.text.config(cursor=self.viewer.defcursor, font=font)
- for f in self.fontmap.keys():
- self.text.tag_config(f, font=self.fontmap[f])
-
- self.anchor = None
- self.anchor_mark = None
- self.font = None
- self.font_mark = None
- self.indent = ""
-
- def createCallback(self, href):
- class Functor:
- def __init__(self, viewer, arg):
- self.viewer = viewer
- self.arg = arg
- def __call__(self, *args):
- self.viewer.updateHistoryXYView()
- return self.viewer.display(self.arg)
- return Functor(self.viewer, href)
-
- def write(self, data):
- self.text.insert("insert", data)
-
- def anchor_bgn(self, href, name, type):
- if href:
- ##self.text.update_idletasks() # update display during parsing
- self.anchor = (href, name, type)
- self.anchor_mark = self.text.index("insert")
-
- def anchor_end(self):
- if self.anchor:
- url = self.anchor[0]
- tag = "href_" + url
- self.text.tag_add(tag, self.anchor_mark, "insert")
- self.text.tag_bind(tag, "<1>", self.createCallback(url))
- self.text.tag_bind(tag, "", lambda e: self.anchor_enter(url))
- self.text.tag_bind(tag, "", self.anchor_leave)
- fg = 'blue'
- u = self.viewer.normurl(url, with_protocol=False)
- if u in self.viewer.visited_urls:
- fg = '#660099'
- self.text.tag_config(tag, foreground=fg, underline=1)
- self.anchor = None
-
- def anchor_enter(self, url):
- url = self.viewer.normurl(url)
- self.viewer.statusbar.updateText(url=url)
- self.text.config(cursor=self.viewer.handcursor)
-
- def anchor_leave(self, *args):
- self.viewer.statusbar.updateText(url='')
- self.text.config(cursor=self.viewer.defcursor)
-
- def new_font(self, font):
- # end the current font
- if self.font:
- ##print "end_font(%s)" % `self.font`
- self.text.tag_add(self.font, self.font_mark, "insert")
- self.font = None
- # start the new font
- if font:
- ##print "start_font(%s)" % `font`
- self.font_mark = self.text.index("insert")
- if font[0] in self.fontmap:
- self.font = font[0]
- elif font[3]:
- self.font = "pre"
- elif font[2]:
- self.font = "bold"
- elif font[1]:
- self.font = "italic"
- else:
- self.font = None
-
- def new_margin(self, margin, level):
- self.indent = " " * level
-
- def send_label_data(self, data):
- ##self.write(self.indent + data + " ")
- self.write(self.indent)
- if data == '*': #
- img = self.viewer.symbols_img.get('disk')
- if img:
- self.text.image_create(index='insert', image=img,
- padx=0, pady=0)
- else:
- self.write('*')
- else:
- self.write(data)
- self.write(' ')
-
- def send_paragraph(self, blankline):
- self.write('\n' * blankline)
-
- def send_line_break(self):
- self.write('\n')
-
- def send_hor_rule(self, *args):
- width = int(int(self.text["width"]) * 0.9)
- self.write("_" * width)
- self.write("\n")
-
- def send_literal_data(self, data):
- self.write(data)
-
- def send_flowing_data(self, data):
- self.write(data)
-
-
-# ************************************************************************
-# *
-# ************************************************************************
-
-class tkHTMLParser(htmllib.HTMLParser):
- def anchor_bgn(self, href, name, type):
- self.formatter.flush_softspace()
- htmllib.HTMLParser.anchor_bgn(self, href, name, type)
- self.formatter.writer.anchor_bgn(href, name, type)
-
- def anchor_end(self):
- if self.anchor:
- self.anchor = None
- self.formatter.writer.anchor_end()
-
- def do_dt(self, attrs):
- self.formatter.end_paragraph(1)
- self.ddpop()
-
- def handle_image(self, src, alt, ismap, align, width, height):
- self.formatter.writer.viewer.showImage(src, alt, ismap, align, width, height)
-
+from pysollib.ui.tktile.tkhtml import REMOTE_PROTOCOLS, tkHTMLWriter, tkHTMLParser
# ************************************************************************
# *
diff --git a/pysollib/ui/tktile/tkhtml.py b/pysollib/ui/tktile/tkhtml.py
new file mode 100644
index 00000000..91bb94b5
--- /dev/null
+++ b/pysollib/ui/tktile/tkhtml.py
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+# -*- mode: python; coding: utf-8; -*-
+##---------------------------------------------------------------------------##
+##
+## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
+## Copyright (C) 2003 Mt. Hood Playing Card Co.
+## Copyright (C) 2005-2009 Skomoroh
+##
+## This program is free software: you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program. If not, see .
+##
+##---------------------------------------------------------------------------##
+
+import htmllib, formatter
+
+REMOTE_PROTOCOLS = ("ftp:", "gopher:", "http:", "mailto:", "news:", "telnet:")
+
+# ************************************************************************
+# *
+# ************************************************************************
+
+class tkHTMLWriter(formatter.NullWriter):
+ def __init__(self, text, viewer, app):
+ formatter.NullWriter.__init__(self)
+
+ self.text = text
+ self.viewer = viewer
+
+ ##
+ if app:
+ font = app.getFont("sans")
+ fixed = app.getFont("fixed")
+ else:
+ font = ('helvetica', 12)
+ fixed = ('courier', 12)
+ size = font[1]
+ sign = 1
+ if size < 0: sign = -1
+ self.fontmap = {
+ "h1" : (font[0], size + 12*sign, "bold"),
+ "h2" : (font[0], size + 8*sign, "bold"),
+ "h3" : (font[0], size + 6*sign, "bold"),
+ "h4" : (font[0], size + 4*sign, "bold"),
+ "h5" : (font[0], size + 2*sign, "bold"),
+ "h6" : (font[0], size + 1*sign, "bold"),
+ "bold" : (font[0], size, "bold"),
+ "italic" : (font[0], size, "italic"),
+ "pre" : fixed,
+ }
+
+ self.text.config(cursor=self.viewer.defcursor, font=font)
+ for f in self.fontmap.keys():
+ self.text.tag_config(f, font=self.fontmap[f])
+
+ self.anchor = None
+ self.anchor_mark = None
+ self.font = None
+ self.font_mark = None
+ self.indent = ""
+
+ def createCallback(self, href):
+ class Functor:
+ def __init__(self, viewer, arg):
+ self.viewer = viewer
+ self.arg = arg
+ def __call__(self, *args):
+ self.viewer.updateHistoryXYView()
+ return self.viewer.display(self.arg)
+ return Functor(self.viewer, href)
+
+ def write(self, data):
+ self.text.insert("insert", data)
+
+ def anchor_bgn(self, href, name, type):
+ if href:
+ ##self.text.update_idletasks() # update display during parsing
+ self.anchor = (href, name, type)
+ self.anchor_mark = self.text.index("insert")
+
+ def anchor_end(self):
+ if self.anchor:
+ url = self.anchor[0]
+ tag = "href_" + url
+ self.text.tag_add(tag, self.anchor_mark, "insert")
+ self.text.tag_bind(tag, "<1>", self.createCallback(url))
+ self.text.tag_bind(tag, "", lambda e: self.anchor_enter(url))
+ self.text.tag_bind(tag, "", self.anchor_leave)
+ fg = 'blue'
+ u = self.viewer.normurl(url, with_protocol=False)
+ if u in self.viewer.visited_urls:
+ fg = '#660099'
+ self.text.tag_config(tag, foreground=fg, underline=1)
+ self.anchor = None
+
+ def anchor_enter(self, url):
+ url = self.viewer.normurl(url)
+ self.viewer.statusbar.updateText(url=url)
+ self.text.config(cursor=self.viewer.handcursor)
+
+ def anchor_leave(self, *args):
+ self.viewer.statusbar.updateText(url='')
+ self.text.config(cursor=self.viewer.defcursor)
+
+ def new_font(self, font):
+ # end the current font
+ if self.font:
+ ##print "end_font(%s)" % `self.font`
+ self.text.tag_add(self.font, self.font_mark, "insert")
+ self.font = None
+ # start the new font
+ if font:
+ ##print "start_font(%s)" % `font`
+ self.font_mark = self.text.index("insert")
+ if font[0] in self.fontmap:
+ self.font = font[0]
+ elif font[3]:
+ self.font = "pre"
+ elif font[2]:
+ self.font = "bold"
+ elif font[1]:
+ self.font = "italic"
+ else:
+ self.font = None
+
+ def new_margin(self, margin, level):
+ self.indent = " " * level
+
+ def send_label_data(self, data):
+ ##self.write(self.indent + data + " ")
+ self.write(self.indent)
+ if data == '*': #
+ img = self.viewer.symbols_img.get('disk')
+ if img:
+ self.text.image_create(index='insert', image=img,
+ padx=0, pady=0)
+ else:
+ self.write('*')
+ else:
+ self.write(data)
+ self.write(' ')
+
+ def send_paragraph(self, blankline):
+ self.write('\n' * blankline)
+
+ def send_line_break(self):
+ self.write('\n')
+
+ def send_hor_rule(self, *args):
+ width = int(int(self.text["width"]) * 0.9)
+ self.write("_" * width)
+ self.write("\n")
+
+ def send_literal_data(self, data):
+ self.write(data)
+
+ def send_flowing_data(self, data):
+ self.write(data)
+
+
+# ************************************************************************
+# *
+# ************************************************************************
+
+class tkHTMLParser(htmllib.HTMLParser):
+ def anchor_bgn(self, href, name, type):
+ self.formatter.flush_softspace()
+ htmllib.HTMLParser.anchor_bgn(self, href, name, type)
+ self.formatter.writer.anchor_bgn(href, name, type)
+
+ def anchor_end(self):
+ if self.anchor:
+ self.anchor = None
+ self.formatter.writer.anchor_end()
+
+ def do_dt(self, attrs):
+ self.formatter.end_paragraph(1)
+ self.ddpop()
+
+ def handle_image(self, src, alt, ismap, align, width, height):
+ self.formatter.writer.viewer.showImage(src, alt, ismap, align, width, height)
+
diff --git a/scripts/gen_individual_importing_tests.py b/scripts/gen_individual_importing_tests.py
index d1a888d8..68dd7428 100644
--- a/scripts/gen_individual_importing_tests.py
+++ b/scripts/gen_individual_importing_tests.py
@@ -186,6 +186,7 @@ for module_name in [
'pysollib.ui.tktile.solverdialog',
'pysollib.ui.tktile.tkcanvas',
'pysollib.ui.tktile.tkconst',
+'pysollib.ui.tktile.tkhtml',
'pysollib.ui.tktile.tkutil',
'pysollib.ui.tktile.tkwrap',
'pysollib.util',