# -*- coding: utf-8 -*- # vim: set ts=4: # # Name: FitxUtil # # Copyright: Copyright (c) 2008 Loya Liu # # $Id$ # # Author: loya.liu@gmail.com (Loya Liu) # __author__ = "loya.liu@gmail.com (Loya Liu)" from xml.dom.minidom import parse import codecs class FitxConfig: def __init__(self,path): self._path=path self._trad_chinese=0 self._input_mode=u'PY' self._wbxmode=u'Normal' self._pymode=u'QP' self._sp_scheme=u'自然码' self._enable_v_mode=1 self._enable_v_mode_internal=1 self._enable_i_mode=1 self._enable_i_mode_internal=1 self._disable_punct_commit=0 self._enable_comma_period_commit=0 self._enable_comma_period_commit_internal=0 self._enable_minus_equal_commit=0 self._enable_minus_equal_commit_internal=0 self._enable_bracket_page=0 self._lookup_table_page_size=5 self._sp_scheme_list=[u'自然码',u'微软',u'紫光',u'智能ABC',u'中文之星',u'拼音加加'] self._input_mode_list=[u'QP',u'QP',u'SP',u'QPSP'] self._wbxmode_list=[u'Normal',u'Mix'] self._half_punct_after_number=True def _get_node_text(self,elm): data="" for x in elm.childNodes: if x.nodeType == x.TEXT_NODE: data=data+x.data return data.strip() def _next_tag(self,elm): n=elm.nextSibling if(not n):return None if n.nodeType==n.ELEMENT_NODE: return n else: return self._next_tag(n) def _auto_config(self): self._enable_v_mode=self._enable_v_mode_internal self._enable_i_mode=self._enable_i_mode_internal if self._disable_punct_commit: self._enable_comma_period_commit=0 else: self._enable_comma_period_commit=self._enable_comma_period_commit_internal if self._disable_punct_commit: self._enable_minus_equal_commit=0 else: self._enable_minus_equal_commit = self._enable_minus_equal_commit_internal if self._input_mode=='PY' and (self._pymode=='SP' or self._pymode=='QPSP'): self._enable_v_mode=0 self._enable_i_mode=0 if self._input_mode=='WBX': self._enable_v_mode=0 self._enable_i_mode=0 def load(self): dom=parse(self._path) root=dom.getElementsByTagName('dict')[0] keys=root.getElementsByTagName('key') for x in keys: key_name=self._get_node_text(x) val=self._next_tag(x) if key_name=='InputMode': self._input_mode=self._get_node_text(val) continue elif key_name=='MHPYSetting': mhpy_keys=val.getElementsByTagName('key') self._mhpy_setting={} for m in mhpy_keys: m_key_name=self._get_node_text(m) m_val_int=int(self._get_node_text(self._next_tag(m))) self._mhpy_setting[m_key_name]=m_val_int continue elif key_name=='PYMode': self._pymode=self._get_node_text(val) continue elif key_name=='SPScheme': self._sp_scheme=self._get_node_text(val) if self._sp_scheme ==None or (self._sp_scheme not in self._sp_scheme_list): self._sp_scheme=u'自然码' continue elif key_name=='WBXMode': self._wbxmode=self._get_node_text(val) continue elif key_name=='TradChinese': self._trad_chinese=bool(int(self._get_node_text(val))) continue elif key_name=='LookupTablePageSize': self._lookup_table_page_size=int(self._get_node_text(val)) continue elif key_name=='HalfPunctAfterNumber': self._half_punct_after_number=bool(int(self._get_node_text(val))) elif key_name=='DisableIMode': self._enable_i_mode_internal=not bool(int(self._get_node_text(val))) elif key_name=='DisableVMode': self._enable_v_mode_internal=not bool(int(self._get_node_text(val))) elif key_name=='DisablePunctCommit': self._disable_punct_commit=bool(int(self._get_node_text(val))) elif key_name=='EnableMinusEqualCommit': self._enable_minus_equal_commit_internal=bool(int(self._get_node_text(val))) elif key_name=='EnableBracketPage': self._enable_bracket_page=bool(int(self._get_node_text(val))) self._auto_config() return True def save(self): f=codecs.open(self._path,"w",'utf-8') f.write('\n') f.write('\n') f.write('\n\n') f.write('\tInputMode\n\t%s\n' % self._input_mode) f.write('\tMHPYSetting\n\t\n') for k,v in self._mhpy_setting.iteritems(): f.write('\t\t%s\n\t\t%d\n' % (k,v)) f.write('\t\n') f.write('\tPYMode\n\t%s\n' % self._pymode) f.write('\tSPScheme\n\t%s\n' % self._sp_scheme) f.write('\tWBXMode\n\t%s\n' % self._wbxmode) f.write('\tTradChinese\n\t%d\n' % int(self._trad_chinese)) f.write('\tLookupTablePageSize\n\t%d\n' % int(self._lookup_table_page_size)) f.write('\tHalfPunctAfterNumber\n\t%d\n' % int(self._half_punct_after_number)) f.write('\tDisableIMode\n\t%d\n' % int(not self._enable_i_mode_internal)) f.write('\tDisableVMode\n\t%d\n' % int(not self._enable_v_mode_internal)) f.write('\tDisablePunctCommit\n\t%d\n' % int(self._disable_punct_commit)) f.write('\tEnableCommaPeriodCommit\n\t%d\n' % int(self._enable_comma_period_commit_internal)) f.write('\tEnableMinusEqualCommit\n\t%d\n' % int(self._enable_minus_equal_commit_internal)) f.write('\tEnableBracketPage\n\t%d\n' % self._enable_bracket_page) f.write('\n') f.close(); def main(): cfg=FitxConfig('./fitd.conf') cfg.load() cfg.save() #print cfg.pymode() if __name__ == '__main__': main()