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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __license__ = 'GPL v3'
  5. __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
  6. import sys
  7. import logging
  8. import os
  9. from calibre import setup_cli_handlers
  10. from calibre.utils.config import OptionParser
  11. from calibre.ebooks import ConversionError
  12. from calibre.ebooks.lrf.meta import get_metadata
  13. from calibre.ebooks.lrf.lrfparser import LRFDocument
  14. from calibre.ebooks.metadata.opf import OPFCreator
  15. from calibre.ebooks.lrf.objects import PageAttr, BlockAttr, TextAttr
  16. from calibre.ebooks.lrf.pylrs.pylrs import TextStyle
  17.  
  18. class BlockStyle(object):
  19.     
  20.     def __init__(self, ba):
  21.         self.ba = ba
  22.  
  23.     
  24.     def __str__(self):
  25.         ans = '.' + str(self.ba.id) + ' {\n'
  26.         if hasattr(self.ba, 'sidemargin'):
  27.             margin = str(self.ba.sidemargin) + 'px'
  28.             ans += '\tmargin-left: %(m)s; margin-right: %(m)s;\n' % dict(m = margin)
  29.         
  30.         if hasattr(self.ba, 'topskip'):
  31.             ans += '\tmargin-top: %dpx;\n' % (self.ba.topskip,)
  32.         
  33.         if hasattr(self.ba, 'footskip'):
  34.             ans += '\tmargin-bottom: %dpx;\n' % (self.ba.footskip,)
  35.         
  36.         if hasattr(self.ba, 'framewidth'):
  37.             ans += '\tborder-width: %dpx;\n' % (self.ba.framewidth,)
  38.             ans += '\tborder-style: solid;\n'
  39.         
  40.         if hasattr(self.ba, 'framecolor'):
  41.             if self.ba.framecolor.a < 255:
  42.                 ans += '\tborder-color: %s;\n' % self.ba.framecolor.to_html()
  43.             
  44.         
  45.         if hasattr(self.ba, 'bgcolor'):
  46.             if self.ba.bgcolor.a < 255:
  47.                 ans += '\tbackground-color: %s;\n' % self.ba.bgcolor.to_html()
  48.             
  49.         
  50.         return ans + '}\n'
  51.  
  52.  
  53.  
  54. class LRFConverter(object):
  55.     
  56.     def __init__(self, document, opts, logger):
  57.         self.lrf = document
  58.         self.opts = opts
  59.         self.output_dir = opts.out
  60.         self.logger = logger
  61.         logger.info('Parsing LRF...')
  62.         self.lrf.parse()
  63.         self.create_metadata()
  64.         self.create_styles()
  65.  
  66.     
  67.     def create_metadata(self):
  68.         self.logger.info('Reading metadata...')
  69.         mi = get_metadata(self.lrf)
  70.         self.opf = OPFCreator(self.output_dir, mi)
  71.  
  72.     
  73.     def create_page_styles(self):
  74.         self.page_css = ''
  75.         for obj in self.lrf.objects.values():
  76.             if isinstance(obj, PageAttr):
  77.                 selector = 'body.' + str(obj.id)
  78.                 self.page_css = selector + ' {\n'
  79.                 self.page_css += '}\n'
  80.                 continue
  81.             self
  82.         
  83.  
  84.     
  85.     def create_block_styles(self):
  86.         self.block_css = ''
  87.         for obj in self.lrf.objects.values():
  88.             if isinstance(obj, BlockAttr):
  89.                 self.block_css += str(BlockStyle(obj))
  90.                 continue
  91.             self
  92.         
  93.  
  94.     
  95.     def create_text_styles(self):
  96.         self.text_css = ''
  97.         for obj in self.lrf.objects.values():
  98.             if isinstance(obj, TextAttr):
  99.                 self.text_css += str(TextStyle(obj))
  100.                 continue
  101.             self
  102.         
  103.         print self.text_css
  104.  
  105.     
  106.     def create_styles(self):
  107.         self.logger.info('Creating CSS stylesheet...')
  108.         self.create_page_styles()
  109.         self.create_block_styles()
  110.  
  111.  
  112.  
  113. def option_parser():
  114.     parser = OptionParser(usage = '%prog book.lrf')
  115.     parser.add_option('--output-dir', '-o', default = None, help = 'Output directory in which to store created HTML files. If it does not exist, it is created. By default the current directory is used.', dest = 'out')
  116.     parser.add_option('--verbose', default = False, action = 'store_true', dest = 'verbose')
  117.     return parser
  118.  
  119.  
  120. def process_file(lrfpath, opts, logger = None):
  121.     if logger is None:
  122.         level = None if opts.verbose else logging.INFO
  123.         logger = logging.getLogger('lrf2html')
  124.         setup_cli_handlers(logger, level)
  125.     
  126.     if opts.out is None:
  127.         opts.out = os.getcwdu()
  128.     else:
  129.         opts.out = os.path.abspath(opts.out)
  130.         if not os.path.isdir(opts.out):
  131.             raise ConversionError(opts.out + ' is not a directory')
  132.         os.path.isdir(opts.out)
  133.     if not os.path.exists(opts.out):
  134.         os.makedirs(opts.out)
  135.     
  136.     document = LRFDocument(open(lrfpath, 'rb'))
  137.     LRFConverter(document, opts, logger)
  138.  
  139.  
  140. def main(args = sys.argv):
  141.     parser = option_parser()
  142.     (opts, args) = parser.parse_args(args)
  143.     if len(args) != 2:
  144.         parser.print_help()
  145.         return 1
  146.     process_file(args[1], opts)
  147.     return 0
  148.  
  149. if __name__ == '__main__':
  150.     sys.exit(main())
  151.  
  152.