class TxtTabToLatexProcessor: def __init__(self): self.mark_word_op = { '<title>': self._set_title_mode, '</title>': self._unset_mode, '<text>': self._set_text_mode, '</text>': self._unset_mode, '<tab>': self._set_tab_mode, '</tab>': self._unset_mode, } self.content = None self.text_writer = None def _set_title_mode(self, *args): self.text_writer = TitleModeWriter(self.content) def _set_text_mode(self, *args): self.text_writer = TextModeWriter(self.content) def _set_tab_mode(self, *args): self.text_writer = TabModeWriter(self.content) def _unset_mode(self, line, line_number): if not self.text_writer: raise ModeNotSetException(line, line_number) self.text_writer.close_mode() self.text_writer = None def process(self, file_path): self.content = Content() raw_content = self._get_content_as_lines_list(file_path) self._write_content(raw_content) content_splitter = ContentSplitter(self.content) result = content_splitter.split() return result.get_string() + NEWPAGE_MARK def _write_content(self, content): for line_number, line in enumerate(content): if line in self.mark_word_op.keys(): self.mark_word_op[line](line, line_number) elif self.text_writer: line = self.text_writer.preprocess_line(line, line_number) self.text_writer.write(line) @staticmethod def _get_content_as_lines_list(file_path): print 'Processing file: ' + file_path f = open(file_path, 'r') content = f.read() return content.split('\n')