'Convert HTML files at C{paths} and add to C{book}. After creating
the object, you must call L{self.writeto} to output the LRF/S file.
@param book: The LRF book
@type book:  L{lrf.pylrs.Book}
@param fonts: dict specifying the font families to use'

def __init__(self, book, fonts, options, logger, paths):

    object.__setattr__(self, 'options', options)
    self.log = logger
    self.fonts = fonts
    self.scaled_images = {}
    self.rotated_images = {}
    self.text_styles = []
    self.block_styles = []
    self.images = {}
    self.targets = {}
    self.links = deque()
    self.processed_files = []
    self.extra_toc_entries = []
    self.image_memory = []
    self.id_counter = 0
    self.unused_target_blocks = []
    self.link_level = 0
    self.memory = []
    self.tops = {}
    self.previous_text = ''
    self.stripped_space = ''
    self.preserve_block_style = False
    self.avoid_page_break = False
    self.current_page = book.create_page()
    self.blockquote_style = book.create_block_style(sidemargin=60, topskip=20, footskip=20)
    self.unindented_style = book.create_text_style(parindent=0)
    self.in_table = False
    self.list_level = 0
    self.list_indent = 20
    self.list_counter = 1
    self.book = book
    self.override_css = {}
    self.override_pcss = {}
    if (self._override_css is not None):
        if os.access(self._override_css, os.R_OK):
            src = open(self._override_css, 'rb').read()
        else:
            src = self._override_css
        match = self.PAGE_BREAK_PAT.search(src)
        if (match and (not re.match('avoid', match.group(1), re.IGNORECASE))):
            self.page_break_found = True
        (ncss, npcss) = self.parse_css(src)
        if ncss:
            update_css(ncss, self.override_css)
        if npcss:
            update_css(npcss, self.override_pcss)
    paths = [os.path.abspath(path) for path in paths]
    paths = [(path.decode(sys.getfilesystemencoding()) if (not isinstance(path, unicode)) else path) for path in paths]
    while ((len(paths) > 0) and (self.link_level <= self.link_levels)):
        for path in paths:
            if (path in self.processed_files):
                continue
            try:
                self.add_file(path)
            except KeyboardInterrupt:
                raise
            except:
                if (self.link_level == 0):
                    raise
                for link in self.links:
                    if (link['path'] == path):
                        self.links.remove(link)
                        break
                self.log.warn(('Could    not    process    ' + path))
                if self.verbose:
                    self.log.exception('    ')
        self.links = self.process_links()
        self.link_level += 1
        paths = [link['path'] for link in self.links]
    if ((self.current_page is not None) and self.current_page.has_text()):
        self.book.append(self.current_page)
    for (text, tb) in self.extra_toc_entries:
        self.book.addTocEntry(text, tb)
    if (self.base_font_size > 0):
        self.log.info(' DCTB Rationalizing    font    sizes...')
        self.book.rationalize_font_sizes(self.base_font_size)
