Интерфейс ввода Aspose.TeX | Java
Пожалуйста, обратитесь к Aspose.TeX for Java ссылка на API для формальных определений реализации ввода-вывода.
Концепция входного каталога
Поскольку примитивы ввода-вывода языка TeX могут работать только с именами файлов, Aspose.TeX для Java определяет каталог как сопоставление имен и объемов данных. Предполагается, что основная часть данных представляет собой файлы, потоки, массивы или что-то еще. API позволяет нам отдельно указывать входные и выходные рабочие каталоги. Он предоставляет общий интерфейс IInputWorkingDirectory, который пользователь может реализовать в своих целях. Он также предоставляет свои собственные реализации, которые будут обсуждаться ниже. В интерфейсе определен метод getFile(), который возвращает поток данных и определяет полное имя файла, при этом в качестве первого аргумента принимает какое-то, гипотетически другое, имя, которое, по сути, и является ключом сопоставления.
Получение входных файлов из файловой системы диска
Вот как мы это сделаем:
1// Create conversion options instance.
2...
3// Specify a file system working directory for the input.
4options.setInputWorkingDirectory(new InputFileSystemDirectory(Utils.getInputDirectory()));
Этот вариант использования достаточно прост, поэтому мы не будем на нем долго останавливаться.
Получение ввода файла из ZIP-архива
Мы также можем поместить входные файлы в ZIP-архив и считать его входным каталогом. В этом случае нам следует поступить следующим образом:
1// Open the stream for the ZIP archive that will serve as the input working directory.
2final Stream inZipStream = File.Open(Path.Combine(RunExamples.InputDirectory, "zip-in.zip"), FileMode.Open))
3{
4 // Create conversion options instance.
5 ...
6 // Specify a ZIP archive working directory for the input. You can also specify a path inside the archive.
7 options.setInputWorkingDirectory(new InputZipDirectory(inZipStream, "in"));
8} finally {
9 if (inZipStream != null)
10 inZipStream.close();
11}
Сначала мы создаем поток, содержащий ZIP-файл. Затем, после создания параметров преобразования, мы устанавливаем параметр InputWorkingDirectory как экземпляр класса InputZipDirectory. Второй аргумент конструктора — базовый путь внутри архива. Если мы хотим, чтобы весь архив был входным каталогом, нам следует передать пустую строку.
Концепция входного терминала
Теперь вспомним, что есть еще и терминальный вход. Что касается этого, Aspose.TeX для Java определяет общий интерфейс IInputTerminal как имеющий два метода. Один из них возвращает экземпляр BufferedReader. Другой метод возвращает InputStream в качестве базового потока. Предоставленные реализации интерфейса обсуждаются ниже.
Получение терминального ввода с консоли
Для этого нам нужно установить опцию TerminalIn как экземпляр класса InputConsoleTerminal.
1// Create conversion options instance.
2...
3// Specify the console as the input terminal.
4options.setTerminalIn(new InputConsoleTerminal()); // Default value. Arbitrary assignment.
Но, по правде говоря, это значение параметра по умолчанию, поэтому указывать его нет особой необходимости. В связи с этим и до тех пор, пока нет других реализаций, данный раздел служит только демонстрационным целям.
Теоретически, если у нас есть интерактивный файл (или скрипт) TeX с предсказуемым поведением, мы можем захотеть реализовать версию входного терминала, которая будет содержать дополнительный скрипт для ответа на запросы движка TeX. Попробуйте свои силы, когда у вас есть время!