home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1127 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  16.8 KB  |  488 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os
  6. import tempfile
  7. from calibre.ebooks.rtf2xml import copy, border_parse
  8.  
  9. class Styles:
  10.     
  11.     def __init__(self, in_file, bug_handler, copy = None, run_level = 1):
  12.         self._Styles__file = in_file
  13.         self._Styles__bug_handler = bug_handler
  14.         self._Styles__copy = copy
  15.         self._Styles__write_to = tempfile.mktemp()
  16.         self._Styles__run_level = run_level
  17.  
  18.     
  19.     def __initiate_values(self):
  20.         self._Styles__border_obj = border_parse.BorderParse()
  21.         self._Styles__styles_dict = {
  22.             'par': { },
  23.             'char': { } }
  24.         self._Styles__styles_num = '0'
  25.         self._Styles__type_of_style = 'par'
  26.         self._Styles__text_string = ''
  27.         self._Styles__state = 'before_styles_table'
  28.         self._Styles__state_dict = {
  29.             'before_styles_table': self._Styles__before_styles_func,
  30.             'in_styles_table': self._Styles__in_styles_func,
  31.             'in_individual_style': self._Styles__in_individual_style_func,
  32.             'after_styles_table': self._Styles__after_styles_func,
  33.             'mi<mk<styles-beg': self._Styles__found_styles_table_func,
  34.             'mi<mk<styles-end': self._Styles__found_end_styles_table_func,
  35.             'mi<mk<stylei-beg': self._Styles__found_beg_ind_style_func,
  36.             'mi<mk<stylei-end': self._Styles__found_end_ind_style_func,
  37.             'cw<ss<para-style': self._Styles__para_style_func,
  38.             'cw<ss<char-style': self._Styles__char_style_func }
  39.         self._Styles__body_dict = {
  40.             'cw<ss<para-style': (self._Styles__para_style_in_body_func, 'par'),
  41.             'cw<ss<char-style': (self._Styles__para_style_in_body_func, 'char') }
  42.         self._Styles__token_dict = {
  43.             'par-end___': 'para',
  44.             'par-def___': 'paragraph-definition',
  45.             'keep-w-nex': 'keep-with-next',
  46.             'widow-cntl': 'widow-control',
  47.             'adjust-rgt': 'adjust-right',
  48.             'language__': 'language',
  49.             'right-inde': 'right-indent',
  50.             'fir-ln-ind': 'first-line-indent',
  51.             'left-inden': 'left-indent',
  52.             'space-befo': 'space-before',
  53.             'space-afte': 'space-after',
  54.             'line-space': 'line-spacing',
  55.             'default-ta': 'default-tab',
  56.             'align_____': 'align',
  57.             'widow-cntr': 'widow-control',
  58.             'margin-lef': 'left-indent',
  59.             'margin-rig': 'right-indent',
  60.             'margin-bot': 'space-after',
  61.             'margin-top': 'space-before',
  62.             'style-shet': 'stylesheet',
  63.             'based-on__': 'based-on-style',
  64.             'next-style': 'next-style',
  65.             'char-style': 'character-style',
  66.             'para-style': 'paragraph-style',
  67.             'picture___': 'pict',
  68.             'obj-class_': 'obj_class',
  69.             'mac-pic___': 'mac-pict',
  70.             'section___': 'section-new',
  71.             'sect-defin': 'section-reset',
  72.             'sect-note_': 'endnotes-in-section',
  73.             'list-text_': 'list-text',
  74.             'list-text_': 'list-text',
  75.             'list______': 'list',
  76.             'list-lev-d': 'list-level-definition',
  77.             'list-cardi': 'list-cardinal-numbering',
  78.             'list-decim': 'list-decimal-numbering',
  79.             'list-up-al': 'list-uppercase-alphabetic-numbering',
  80.             'list-up-ro': 'list-uppercae-roman-numbering',
  81.             'list-ord__': 'list-ordinal-numbering',
  82.             'list-ordte': 'list-ordinal-text-numbering',
  83.             'list-bulli': 'list-bullet',
  84.             'list-simpi': 'list-simple',
  85.             'list-conti': 'list-continue',
  86.             'list-hang_': 'list-hang',
  87.             'list-level': 'level',
  88.             'list-id___': 'list-id',
  89.             'list-start': 'list-start',
  90.             'nest-level': 'nest-level',
  91.             'list-level': 'list-level',
  92.             'footnote__': 'footnote',
  93.             'type______': 'type',
  94.             'toc_______': 'anchor-toc',
  95.             'book-mk-st': 'bookmark-start',
  96.             'book-mk-en': 'bookmark-end',
  97.             'index-mark': 'anchor-index',
  98.             'place_____': 'place',
  99.             'field_____': 'field',
  100.             'field-inst': 'field-instruction',
  101.             'field-rslt': 'field-result',
  102.             'datafield_': 'data-field',
  103.             'font-table': 'font-table',
  104.             'colr-table': 'color-table',
  105.             'lovr-table': 'list-override-table',
  106.             'listtable_': 'list-table',
  107.             'revi-table': 'revision-table',
  108.             'hidden____': 'hidden',
  109.             'italics___': 'italics',
  110.             'bold______': 'bold',
  111.             'strike-thr': 'strike-through',
  112.             'shadow____': 'shadow',
  113.             'outline___': 'outline',
  114.             'small-caps': 'small-caps',
  115.             'dbl-strike': 'double-strike-through',
  116.             'emboss____': 'emboss',
  117.             'engrave___': 'engrave',
  118.             'subscript_': 'subscript',
  119.             'superscrip': 'superscript',
  120.             'plain_____': 'plain',
  121.             'font-style': 'font-style',
  122.             'font-color': 'font-color',
  123.             'font-size_': 'font-size',
  124.             'font-up___': 'superscript',
  125.             'font-down_': 'subscript',
  126.             'red_______': 'red',
  127.             'blue______': 'blue',
  128.             'green_____': 'green',
  129.             'caps______': 'caps',
  130.             'row-def___': 'row-definition',
  131.             'cell______': 'cell',
  132.             'row_______': 'row',
  133.             'in-table__': 'in-table',
  134.             'columns___': 'columns',
  135.             'row-pos-le': 'row-position-left',
  136.             'cell-posit': 'cell-position',
  137.             'underlined': 'underlined',
  138.             'bor-t-r-hi': 'border-table-row-horizontal-inside',
  139.             'bor-t-r-vi': 'border-table-row-vertical-inside',
  140.             'bor-t-r-to': 'border-table-row-top',
  141.             'bor-t-r-le': 'border-table-row-left',
  142.             'bor-t-r-bo': 'border-table-row-bottom',
  143.             'bor-t-r-ri': 'border-table-row-right',
  144.             'bor-cel-bo': 'border-cell-bottom',
  145.             'bor-cel-to': 'border-cell-top',
  146.             'bor-cel-le': 'border-cell-left',
  147.             'bor-cel-ri': 'border-cell-right',
  148.             'bor-par-bo': 'border-paragraph-bottom',
  149.             'bor-par-to': 'border-paragraph-top',
  150.             'bor-par-le': 'border-paragraph-left',
  151.             'bor-par-ri': 'border-paragraph-right',
  152.             'bor-par-bo': 'border-paragraph-box',
  153.             'bor-for-ev': 'border-for-every-paragraph',
  154.             'bor-outsid': 'border-outisde',
  155.             'bor-none__': 'border',
  156.             'bdr-single': 'single',
  157.             'bdr-doubtb': 'double-thickness-border',
  158.             'bdr-shadow': 'shadowed-border',
  159.             'bdr-double': 'double-border',
  160.             'bdr-dotted': 'dotted-border',
  161.             'bdr-dashed': 'dashed',
  162.             'bdr-hair__': 'hairline',
  163.             'bdr-inset_': 'inset',
  164.             'bdr-das-sm': 'dash-small',
  165.             'bdr-dot-sm': 'dot-dash',
  166.             'bdr-dot-do': 'dot-dot-dash',
  167.             'bdr-outset': 'outset',
  168.             'bdr-trippl': 'tripple',
  169.             'bdr-thsm__': 'thick-thin-small',
  170.             'bdr-htsm__': 'thin-thick-small',
  171.             'bdr-hthsm_': 'thin-thick-thin-small',
  172.             'bdr-thm__': 'thick-thin-medium',
  173.             'bdr-htm__': 'thin-thick-medium',
  174.             'bdr-hthm_': 'thin-thick-thin-medium',
  175.             'bdr-thl__': 'thick-thin-large',
  176.             'bdr-hthl_': 'think-thick-think-large',
  177.             'bdr-wavy_': 'wavy',
  178.             'bdr-d-wav': 'double-wavy',
  179.             'bdr-strip': 'striped',
  180.             'bdr-embos': 'emboss',
  181.             'bdr-engra': 'engrave',
  182.             'bdr-frame': 'frame',
  183.             'bdr-li-wid': 'line-width',
  184.             'tab-center': 'center',
  185.             'tab-right_': 'right',
  186.             'tab-dec___': 'decimal',
  187.             'leader-dot': 'leader-dot',
  188.             'leader-hyp': 'leader-hyphen',
  189.             'leader-und': 'leader-underline' }
  190.         self._Styles__tabs_dict = {
  191.             'cw<pf<tab-stop__': self._Styles__tab_stop_func,
  192.             'cw<pf<tab-center': self._Styles__tab_type_func,
  193.             'cw<pf<tab-right_': self._Styles__tab_type_func,
  194.             'cw<pf<tab-dec___': self._Styles__tab_type_func,
  195.             'cw<pf<leader-dot': self._Styles__tab_leader_func,
  196.             'cw<pf<leader-hyp': self._Styles__tab_leader_func,
  197.             'cw<pf<leader-und': self._Styles__tab_leader_func,
  198.             'cw<pf<tab-bar-st': self._Styles__tab_bar_func }
  199.         self._Styles__tab_type_dict = {
  200.             'cw<pf<tab-center': 'center',
  201.             'cw<pf<tab-right_': 'right',
  202.             'cw<pf<tab-dec___': 'decimal',
  203.             'cw<pf<leader-dot': 'leader-dot',
  204.             'cw<pf<leader-hyp': 'leader-hyphen',
  205.             'cw<pf<leader-und': 'leader-underline' }
  206.         self._Styles__ignore_list = [
  207.             'list-tebef']
  208.         self._Styles__tabs_list = self._Styles__tabs_dict.keys()
  209.         self._Styles__tab_type = 'left'
  210.         self._Styles__leader_found = 0
  211.  
  212.     
  213.     def __in_individual_style_func(self, line):
  214.         action = self._Styles__state_dict.get(self._Styles__token_info)
  215.         if action:
  216.             action(line)
  217.         elif line[0:5] == 'cw<bd':
  218.             border_dict = self._Styles__border_obj.parse_border(line)
  219.             keys = border_dict.keys()
  220.             for key in keys:
  221.                 self._Styles__enter_dict_entry(key, border_dict[key])
  222.             
  223.         elif self._Styles__token_info in self._Styles__tabs_list:
  224.             action = self._Styles__tabs_dict.get(self._Styles__token_info)
  225.             if action != None:
  226.                 action(line)
  227.             
  228.         elif line[0:2] == 'cw':
  229.             info = line[6:16]
  230.             att = self._Styles__token_dict.get(info)
  231.             if att == None:
  232.                 if info not in self._Styles__ignore_list:
  233.                     if self._Styles__run_level > 3:
  234.                         msg = 'no value for key %s\n' % info
  235.                         raise self._Styles__bug_handler, msg
  236.                     self._Styles__run_level > 3
  237.                 
  238.             else:
  239.                 value = line[20:-1]
  240.                 self._Styles__enter_dict_entry(att, value)
  241.         elif line[0:2] == 'tx':
  242.             self._Styles__text_string += line[17:-1]
  243.         
  244.  
  245.     
  246.     def __tab_stop_func(self, line):
  247.         
  248.         try:
  249.             if self._Styles__leader_found:
  250.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s:' % self._Styles__tab_type
  251.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % line[20:-1]
  252.             else:
  253.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s:' % self._Styles__tab_type
  254.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % line[20:-1]
  255.         except KeyError:
  256.             self._Styles__enter_dict_entry('tabs', '')
  257.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s:' % self._Styles__tab_type
  258.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % line[20:-1]
  259.  
  260.         self._Styles__tab_type = 'left'
  261.         self._Styles__leader_found = 0
  262.  
  263.     
  264.     def __tab_type_func(self, line):
  265.         type = self._Styles__tab_type_dict.get(self._Styles__token_info)
  266.         if type != None:
  267.             self._Styles__tab_type = type
  268.         elif self._Styles__run_level > 3:
  269.             msg = 'no entry for %s\n' % self._Styles__token_info
  270.             raise self._Styles__bug_handler, msg
  271.         
  272.  
  273.     
  274.     def __tab_leader_func(self, line):
  275.         self._Styles__leader_found = 1
  276.         leader = self._Styles__tab_type_dict.get(self._Styles__token_info)
  277.         if leader != None:
  278.             leader += '^'
  279.             
  280.             try:
  281.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += ':%s;' % leader
  282.             except KeyError:
  283.                 self._Styles__enter_dict_entry('tabs', '')
  284.                 self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % leader
  285.             except:
  286.                 None<EXCEPTION MATCH>KeyError
  287.             
  288.  
  289.         None<EXCEPTION MATCH>KeyError
  290.         if self._Styles__run_level > 3:
  291.             msg = 'no entry for %s\n' % self._Styles__token_info
  292.             raise self._Styles__bug_handler, msg
  293.         self._Styles__run_level > 3
  294.  
  295.     
  296.     def __tab_bar_func(self, line):
  297.         
  298.         try:
  299.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += 'bar:'
  300.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % line[20:-1]
  301.         except KeyError:
  302.             self._Styles__enter_dict_entry('tabs', '')
  303.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += 'bar:'
  304.             self._Styles__styles_dict['par'][self._Styles__styles_num]['tabs'] += '%s;' % line[20:-1]
  305.  
  306.         self._Styles__tab_type = 'left'
  307.  
  308.     
  309.     def __enter_dict_entry(self, att, value):
  310.         
  311.         try:
  312.             self._Styles__styles_dict[self._Styles__type_of_style][self._Styles__styles_num][att] = value
  313.         except KeyError:
  314.             self._Styles__add_dict_entry(att, value)
  315.  
  316.  
  317.     
  318.     def __add_dict_entry(self, att, value):
  319.         if self._Styles__type_of_style == 'par':
  320.             type_dict = self._Styles__styles_dict['par']
  321.         elif self._Styles__type_of_style == 'char':
  322.             type_dict = self._Styles__styles_dict['char']
  323.         elif self._Styles__run_level > 3:
  324.             msg = self._Styles__type_of_style + 'error\n'
  325.             raise self._Styles__bug_handler, msg
  326.         
  327.         smallest_dict = { }
  328.         smallest_dict[att] = value
  329.         type_dict[self._Styles__styles_num] = smallest_dict
  330.         self._Styles__styles_dict[self._Styles__type_of_style] = type_dict
  331.  
  332.     
  333.     def __para_style_func(self, line):
  334.         self._Styles__type_of_style = 'par'
  335.         self._Styles__styles_num = line[20:-1]
  336.  
  337.     
  338.     def __char_style_func(self, line):
  339.         self._Styles__type_of_style = 'char'
  340.         self._Styles__styles_num = line[20:-1]
  341.  
  342.     
  343.     def __found_beg_ind_style_func(self, line):
  344.         self._Styles__state = 'in_individual_style'
  345.  
  346.     
  347.     def __found_end_ind_style_func(self, line):
  348.         name = self._Styles__text_string[:-1]
  349.         name = name.strip()
  350.         self._Styles__enter_dict_entry('name', name)
  351.         self._Styles__text_string = ''
  352.  
  353.     
  354.     def __found_end_styles_table_func(self, line):
  355.         self._Styles__state = 'after_styles_table'
  356.         self._Styles__fix_based_on()
  357.         self._Styles__print_style_table()
  358.  
  359.     
  360.     def __fix_based_on(self):
  361.         types = [
  362.             'par',
  363.             'char']
  364.         for type in types:
  365.             keys = self._Styles__styles_dict[type].keys()
  366.             for key in keys:
  367.                 styles = [
  368.                     'next-style',
  369.                     'based-on-style']
  370.                 for style in styles:
  371.                     value = self._Styles__styles_dict[type][key].get(style)
  372.                     if value != None:
  373.                         temp_dict = self._Styles__styles_dict[type].get(value)
  374.                         if temp_dict:
  375.                             changed_value = self._Styles__styles_dict[type][value].get('name')
  376.                             if changed_value:
  377.                                 self._Styles__styles_dict[type][key][style] = changed_value
  378.                             
  379.                         elif value == 0 or value == '0':
  380.                             pass
  381.                         elif self._Styles__run_level > 4:
  382.                             msg = '%s %s is based on %s\n' % (type, key, value)
  383.                             msg = 'There is no style with %s\n' % value
  384.                             raise self._Styles__bug_handler, msg
  385.                         
  386.                         del self._Styles__styles_dict[type][key][style]
  387.                         continue
  388.                 
  389.             
  390.         
  391.  
  392.     
  393.     def __print_style_table(self):
  394.         types = [
  395.             'par',
  396.             'char']
  397.         for type in types:
  398.             if type == 'par':
  399.                 prefix = 'paragraph'
  400.             else:
  401.                 prefix = 'character'
  402.             self._Styles__write_obj.write('mi<tg<open______<%s-styles\n' % prefix)
  403.             style_numbers = self._Styles__styles_dict[type].keys()
  404.             for num in style_numbers:
  405.                 self._Styles__write_obj.write('mi<tg<empty-att_<%s-style-in-table<num>%s' % (prefix, num))
  406.                 attributes = self._Styles__styles_dict[type][num].keys()
  407.                 for att in attributes:
  408.                     this_value = self._Styles__styles_dict[type][num][att]
  409.                     self._Styles__write_obj.write('<%s>%s' % (att, this_value))
  410.                 
  411.                 self._Styles__write_obj.write('\n')
  412.             
  413.             self._Styles__write_obj.write('mi<tg<close_____<%s-styles\n' % prefix)
  414.         
  415.  
  416.     
  417.     def __found_styles_table_func(self, line):
  418.         self._Styles__state = 'in_styles_table'
  419.  
  420.     
  421.     def __before_styles_func(self, line):
  422.         action = self._Styles__state_dict.get(self._Styles__token_info)
  423.         if not action:
  424.             self._Styles__write_obj.write(line)
  425.         else:
  426.             action(line)
  427.  
  428.     
  429.     def __in_styles_func(self, line):
  430.         action = self._Styles__state_dict.get(self._Styles__token_info)
  431.         if action == None:
  432.             self._Styles__write_obj.write(line)
  433.         else:
  434.             action(line)
  435.  
  436.     
  437.     def __para_style_in_body_func(self, line, type):
  438.         if type == 'par':
  439.             prefix = 'para'
  440.         else:
  441.             prefix = 'char'
  442.         num = line[20:-1]
  443.         
  444.         try:
  445.             value = self._Styles__styles_dict[type][num]['name']
  446.         except KeyError:
  447.             value = None
  448.  
  449.         if value:
  450.             self._Styles__write_obj.write('cw<ss<%s-style<nu<%s\n' % (prefix, value))
  451.         else:
  452.             self._Styles__write_obj.write('cw<ss<%s_style<nu<not-defined\n' % prefix)
  453.  
  454.     
  455.     def __after_styles_func(self, line):
  456.         (action, type) = self._Styles__body_dict.get(self._Styles__token_info, (None, None))
  457.         if action:
  458.             action(line, type)
  459.         else:
  460.             self._Styles__write_obj.write(line)
  461.  
  462.     
  463.     def convert_styles(self):
  464.         self._Styles__initiate_values()
  465.         read_obj = open(self._Styles__file, 'r')
  466.         self._Styles__write_obj = open(self._Styles__write_to, 'w')
  467.         line_to_read = 1
  468.         while line_to_read:
  469.             line_to_read = read_obj.readline()
  470.             line = line_to_read
  471.             self._Styles__token_info = line[:16]
  472.             action = self._Styles__state_dict.get(self._Styles__state)
  473.             if action == None:
  474.                 sys.stderr.write('no matching state in module styles.py\n')
  475.                 sys.stderr.write(self._Styles__state + '\n')
  476.             
  477.             action(line)
  478.         read_obj.close()
  479.         self._Styles__write_obj.close()
  480.         copy_obj = copy.Copy(bug_handler = self._Styles__bug_handler)
  481.         if self._Styles__copy:
  482.             copy_obj.copy_file(self._Styles__write_to, 'styles.data')
  483.         
  484.         copy_obj.rename(self._Styles__write_to, self._Styles__file)
  485.         os.remove(self._Styles__write_to)
  486.  
  487.  
  488.