Пример #1
0
    def handle_addpnum(self, cmd, args):
        """Return a new page number (roman and arabic supported).
        The new page number is generated using it's predecessors. It both
        respects the numbering from the predecessor, as also the format (roman
        or arabic)."""
        parser = HelpfulParser(cmd, self.output_formatter, description=(
                "Generate a page number for a given context. A context "
                "consists of a line and a file. The enumeration will "
                "happen automatically (including distinction between roman and "
                "arabic), as well as the detection of the language of the "
                "lecture. This command will not insert the newly created "
                "page number by default, but print it to stdout. This is meant "
                "to be used by applications embedding Matuc's logic."))
        parser.add_argument("-f", dest="read_from_file", action="store_true",
                default=False, help="read from specified path instead of reading from standard input")
        parser.add_argument("-F", dest="rw_from_file", action="store_true",
                default=False, help=("read from specified path instead of "
                    "reading from standard input and write result back to file; "
                    "this could lead to race conditions on concurrent "
                    "modifications"))
        parser.add_argument('path', nargs=1,
                help=("Path to load configuration from. This can be either a "
                "file or a directory. If -f is given, the path is used as "
                "input file (by default, input is read from stdin)."))
        parser.add_argument('line_number', nargs=1,
                help="Line number for which to generate the page number")

        options = parser.parse_args(args)

        path = options.path[0]
        if not os.path.exists(path):
            self.output_formatter.emit_error("Given path has to exist.")
            sys.exit(29)
        try:
            line_number = int(options.line_number[0])
        except ValueError:
            self.output_formatter.emit_error("Argument 2 is not a number.")
            return 5
        # try to read from stdin or from file if -f or -F; write to stdout or to
        # file if -F given
        if options.read_from_file or options.rw_from_file:
            if not os.path.isfile(path):
                self.output_formatter.emit_error("Given path is not a file, "
                        "but reading from it with -f has been requested.")
                sys.exit(99)
            text = pagenumbering.add_page_number(path, line_number).format()

            if options.read_from_file: # print to stdout
                self.output_formatter.emit_result({ 'pagenumber': text })
            else: # read and write into given path
                with open(path, encoding='utf-8') as f:
                    lines = f.read().split('\n')
                lines = insert_line(lines, line_number, text)
                with open(path, 'w', encoding='utf-8') as f:
                    f.write('\n'.join(lines))
        else:
            data = sys.stdin.read()
            self.output_formatter.emit_result({ 'pagenumber':
                pagenumbering.add_page_number_from_str(data, line_number,
                    path=path).format()})
Пример #2
0
    def test_that_roman_numbers_are_detected(self):
        mydocument = """|| - Seite I -

|| - Seite C -

|| - Seite 320 -\n"""
        newpnum = pagenumbering.add_page_number_from_str(mydocument, 2)
        self.assertEqual(newpnum.number, 2)
        self.assertFalse(newpnum.arabic)

        newpnum = pagenumbering.add_page_number_from_str(mydocument, 4)
        self.assertEqual(newpnum.number, 101)
        self.assertFalse(newpnum.arabic)

        newpnum = pagenumbering.add_page_number_from_str(mydocument, 7)
        self.assertEqual(newpnum.number, 321)
        self.assertTrue(newpnum.arabic)
Пример #3
0
 def test_that_pagenumber_before_line_number_is_found(self):
     newpnum = pagenumbering.add_page_number_from_str(EXAMPLE_DOCUMENT, 2)
     self.assertEqual(newpnum.number, 2)
     newpnum = pagenumbering.add_page_number_from_str(EXAMPLE_DOCUMENT, 4)
     self.assertEqual(newpnum.number, 12)