Интерфейс ввода Aspose.TeX | Python
Формальные определения реализации ввода-вывода в Aspose.TeX для Python см. в справочнике API.
Идея входного каталога
Учитывая, что примитивы ввода-вывода языка TeX могут обрабатывать только имена файлов, Aspose.TeX for Python определяет каталог как сопоставление между именами и наборами данных. Этими коллекциями данных могут быть файлы, потоки, массивы или любой другой тип. API позволяет отдельно указывать входные и выходные рабочие каталоги. Он предоставляет общий класс InputWorkingDirectory, который пользователи могут реализовать для своих конкретных нужд. Кроме того, API предоставляет встроенные реализации, которые будут обсуждаться позже. Интерфейс включает метод get_file(), который извлекает поток данных и определяет полное имя файла на основе заданного имени, которое служит ключом сопоставления.
Получение входных файлов из файловой системы диска
Вот какой подход мы бы выбрали:
1# Create conversion options instance.
2...
3# Specify a file system working directory for the input.
4options.input_working_directory = InputFileSystemDirectory(Utils.input_directory)
Этот конкретный вариант использования довольно прост, поэтому мы можем двигаться дальше.
Получение ввода файла из ZIP-архива
Другой вариант — сохранить входные файлы в ZIP-архиве и использовать его как входной каталог. В таком случае следует выполнить следующие шаги:
1# Open the stream for the ZIP archive that will serve as the input working directory.
2with open(path.join(Utils.input_directory, "zip-in.zip")) as in_zip_stream:
3 # Create conversion options instance.
4 ...
5 # Specify a ZIP archive working directory for the input. You can also specify a path inside the archive.
6 options.input_working_directory = InputZipDirectory(in_zip_stream, "in")
Для начала мы создаем поток, содержащий ZIP-файл. Впоследствии, после создания параметров преобразования, мы присваиваем экземпляр класса InputZipDirectory свойству input_working_directory. Второй параметр конструктора представляет базовый путь внутри архива. Если мы хотим, чтобы весь архив функционировал как входной каталог, мы должны предоставить в качестве аргумента пустую строку.
Идея входного терминала
Теперь давайте рассмотрим концепцию терминального ввода. Aspose.TeX для Python определяет общий интерфейс IInputTerminal специально для этой цели, который включает в себя одно свойство, возвращающее экземпляр реализации TerminalReader. Доступные реализации будут обсуждаться позже.
Получение терминального ввода с консоли
Для этого нам нужно назначить экземпляр класса InputConsoleTerminal опции terminal_in.
1# Create conversion options instance.
2...
3# Specify the console as the input terminal.
4options.terminal_in = InputConsoleTerminal() # Default. Arbitrary assignment.
Однако, честно говоря, это значение параметра по умолчанию, поэтому нет необходимости явно указывать его. Учитывая отсутствие других реализаций, этот раздел предназначен исключительно для демонстрационных целей.
Теоретически, если у нас есть интерактивный файл (или сценарий) TeX с предсказуемым поведением, может быть желательно реализовать версию входного терминала, включающую соответствующий сценарий для ответа на запросы движка TeX. Не стесняйтесь попробовать, когда у вас будет возможность!