2005年8月2日星期二

gnochm问题的定位

在网友duh的激励下,对昨天发现的gnochm的索引问题进行了定位。

索引的排序问题很好解决,只要将index那个TreeView的model换成一个可以排序的就可以了。补丁如后面所示。

索引不全的问题其实并不能怪gnochm,而是有些关键字当中有非法字符导致了HTML解析失败
chm文件中的topic和index都是sitemap格式,以HTML格式为载体的






gnochm 采用python编写,很自然地用了HTMLParser这个类来解析这个文件,但碰到上面的非法标识(The "link-selected" signal,注意这里引号是不合法的),后面的就都无法读取出来了,所以会丢掉很多关键字。而xchm就会忽略这个继续往下分析。

不能跳到archor的问题明天再来琢磨,也不知道是不是gtkhtml2的问题。



--------- 8< ---------------------

[bamanzi@saynomdk ~]$ diff -Nurp /usr/bin/gnochm gnochm
--- /usr/bin/gnochm 2005-03-18 09:27:00.000000000 +0800
+++ gnochm 2005-08-02 23:23:35.000000000 +0800
@@ -811,11 +811,13 @@ class MainApp:
# Index
self.imodel = gtk.TreeStore(gobject.TYPE_STRING,
gobject.TYPE_STRING)
+ self.isortmodel = gtk.TreeModelSort(self.imodel)
self.indexview = self.xml.get_widget('IndexTView')
- self.indexview.set_model(self.imodel)
+ self.indexview.set_model(self.isortmodel)
cell2 = gtk.CellRendererText()
column2 = gtk.TreeViewColumn('Index', cell2, text=0)
self.indexview.append_column(column2)
+ self.isortmodel.set_sort_column_id(0, gtk.SORT_ASCENDING)
# Search
self.smodel = gtk.ListStore(gobject.TYPE_STRING,
gobject.TYPE_STRING)



Comments for post
HTMLParser
nick | 03/08/2005, 13:54

Use SGMLParser then. More fault tolerant.

test with sgml
nick | 03/08/2005, 13:59

$ python /usr/lib/python2.3/sgmllib.py sitemap.html

Shows that no big deal for sgml.

sorted list
nick | 03/08/2005, 14:02

For sorted list, I'd rather sort the list before feeding to the treemodel. Should be faster for big list. Treeview is already slow in itself.

But let the treemodel do the sorting is simpler.

Re: SGMLParser
bamanzi | 03/08/2005, 17:41

Really, SGMLParser works!

Thanks!

没有评论: