|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
File Parser Requirements
Every file parser must implement the following functions.
VwStreamCloseFunc VwStreamSectionFunc VwStreamOpenFunc VwStreamSeekFunc VwStreamReadFunc VwStreamTellFunc VwStreamReadRecordFunc
The display engine calls these functions to display a file of the type supported by the file parser. The display engine starts the file viewing process by calling VwStreamOpenFunc, sending the name of a file to the file parser. The first responsibility of any parser is to verify that the given file has the proper format and can be processed. If the file is viewable, the file parser returns a value to the display engine acknowledging the request. Once the parser completes verification, the display engine calls VwStreamSectionFunc, directing the file parser to identify the type and name of the first section of the file to be processed. A section is a portion of the file in which all the data is of one type; it forms a logical breaking point for the processing of the file. The standard section types are word processing, spreadsheet, database, bitmapped graphics, and vector graphics. A file can consist of a single section, multiple sections of the same type, or a combination of sections of different types. The actions that the display engine takes to display the file depend on the type of section currently being processed. The file parser must call the SOPutSectionType and SOPutSectionName functions to output the section type and to set the section name.
Before the file parser returns from VwStreamSectionFunc, it may need to provide the display engine with additional information. If the portion to be processed is a word processing section, the file parser must set entries for the font table by using the SOPutFontTableEntry function. If it is a spreadsheet section, the file parser must set the column width by calling the SOPutColumnInfo function. If it is a database section, the file parser must set the field format by calling the SOPutFieldInfo function. The file parser can also set the date base used by spreadsheets and databases to calculate dates by using the SOSetDateBase function. In addition, the file parser can set header entries by calling the SOPutHdrEntry function.
After the section type and general information is set, the display engine requests data for the section by calling VwStreamReadFunc. The file parser fulfills this request by calling the stream output functions. These functions pass the data to the display engine in a form that is easiest for the engine to display, copy to the clipboard, or write to disk. The stream output functions used by the file parser depend on the section type. For word processing sections, the file parser uses the SOPutParaSpacing, SOPutCharAttr, and SOPutChar functions to set the spacing for paragraphs, set the style attributes for characters, and output characters. For spreadsheet sections, the parser uses the SOPutDataCell and SOPutTextCell functions to output the content (data or text) of cells. For database sections, it uses the SOPutField and SOPutVarField functions to output the data of fields. The parser uses the SOPutBitmapHeader and SOPutScanLineData functions for bitmapped graphics sections and the SOVectorAttr and SOVectorObject functions for vector graphics sections.
To set a break for a paragraph, cell, or field, the file parser calls the SOPutBreak function with an appropriate value, either SO_PARABREAK, SO_CELLBREAK, or SO_RECORDBREAK. The return value from SOPutBreak tells the file parser how to proceed. If it is the SO_STOP value, the file parser stops all processing and returns from VwStreamReadFunc. The file parser continues to output data until it reaches the end of the section. The parser must end a section by calling SOPutBreak with the SO_SECTIONBREAK value. If this is the last section in the file, the file parser indicates that the end of the file has been reached by using the SO_EOFBREAK value instead.
If there are subsequent sections in the file, the display engine calls VwStreamSectionFunc again to request the type and name of the next section, and processing continues just as it did for the first section. After the last section, the display engine calls VwStreamCloseFunc to indicate that processing is complete and that no further requests for data will be made. The file parser must close the file and any related files it has opened and clean up resources, such as freeing memory.
If an error occurs while a file is parsed, the file parser should call the SOBailOut function to notify the display engine of the error condition. The parser must immediately return from VwStreamReadFunc after calling the SOBailOut function.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Файловые Требования Синтаксического анализатора
Каждый файловый синтаксический анализатор должен осуществить следующее функций.
VwStreamCloseFunc VwStreamSectionFunc VwStreamOpenFunc VwStreamSeekFunc VwStreamReadFunc VwStreamTellFunc VwStreamReadRecordFunc
Дисплейный двигатель называет эти функции, чтобы отображать файл типа поддерживанного файловым синтаксическим анализатором. Дисплейный двигатель начинает файл, рассматривающий процесс вызывая VwStreamOpenFunc, посылая имя файла в файловый синтаксический анализатор. Первая ответственность любого синтаксического анализатора должна проверить, что данный файл имеет соответствующий формат и может быть обработан. Если файл - viewable, файловый синтаксический анализатор возвращает величину в дисплейный двигатель, признающий запрос. Как только синтаксический анализатор завершит проверку, дисплейные машинные вызовы VwStreamSectionFunc, направляющие файловый синтаксический анализатор, чтобы идентифицировать тип и имя первой секции файла, которые нужно обрабатываться. Секция является частью файла в котором все данные - одного типа; это формирует логический момент разрыва для обработки файла. Стандартные типы секции - текстовая обработка, электронная таблица, база данных, bitmapped графика, и векторная графика. Файл может состоять из единственной секции, многочисленных секций того же самого типа, или комбинации секций других типов. Действия, что дисплейный двигатель берет, чтобы отображать что файл зависит от типа секции к настоящему времени обрабатыванной. Файловый синтаксический анализатор должен назвать SOPutSectionType и функции SOPutSectionName на выход тип секции и, чтобы устанавливать имя секции.
Прежде, чем файловый синтаксический анализатор возвращается из VwStreamSectionFunc, ему возможно нужно обеспечивать дисплейный двигатель дополнительной информацией. Если часть, которая нужно обрабатывать, - текстовая обработка секции, файловый синтаксический анализатор должен установить данные для шрифтовой таблицы используя функцию SOPutFontTableEntry. Если это - секция электронной таблицы, файловый синтаксический анализатор должен установить ширину столбца вызывая функцию SOPutColumnInfo. Если это - база данных секции, файловый синтаксический анализатор должен установить формат области вызывая функцию SOPutFieldInfo. Файловый синтаксический анализатор может также установить дату базы использованную электронными таблицами и базами данных, чтобы вычислять даты используя функцию SOSetDateBase. Кроме того, файловый синтаксический анализатор может установить данные заголовка вызывая функцию SOPutHdrEntry.
После того, как тип секции и общая информация будет установлена, дисплейный двигатель запрашивает данные о секции вызывая VwStreamReadFunc. Файловый синтаксический анализатор выполняет этот запрос вызывая выходные функции потока. Эти функции передают данные в дисплейный двигатель в форме, которые легчайшие для двигателя, чтобы отображать, копироваться в буфер или записываться на диск. Выходные функции потока использованные файловым синтаксическим анализатором зависят от типа секции. Для текстовой обработки секций, файловый синтаксический анализатор использует SOPutParaSpacing, SOPutCharAttr, и функции SOPutChar, чтобы устанавливать расстояние для параграфов, устанавливать атрибутам стиля для символов, и выходных символов. Для секций электронной таблицы, синтаксический анализатор использует SOPutDataCell и функции SOPutTextCell на выход содержимое (данные или текст) ячеек. Для базы данных секций, это использует SOPutField и функции SOPutVarField на выход данные областей. Синтаксический анализатор использует SOPutBitmapHeader и функциям SOPutScanLineData для bitmapped графических секций и SOVectorAttr и функции SOVectorObject для векторных графических секций.
Для того, чтобы устанавливать прерыванию для параграфа, ячейки, или область, файловый синтаксический анализатор называет функцию SOPutBreak с подходящей величиной, также SO_PARABREAK, SO_CELLBREAK, или SO_RECORDBREAK. Обратная величина из SOPutBreak сообщает файловый синтаксический анализатор как, чтобы приступать. Если это - величина SO_STOP, файловый синтаксический анализатор перестает их обрабатывать и возвращается из VwStreamReadFunc. Файловый синтаксический анализатор остается в выходные данные пока он не достигнет конца секции. Синтаксический анализатор должен закончить секцию вызывая SOPutBreak с величиной SO_SECTIONBREAK. Если это - последняя секция в файле, файловый синтаксический анализатор указывает, что конец файла достигнут использованием величины SO_EOFBREAK взамен.
Если есть последующие секции в файле, дисплейный двигатель называет VwStreamSectionFunc снова, чтобы запрашивать тип и имя следующей секции, и обработка остается подобно тому, как она делала для первой секции. После последней секции, дисплейные машинные вызовы VwStreamCloseFunc, чтобы указывать, что обработка завершенна и, что никакие дальнейшие запросы о данных будут сделаны. Файловый синтаксический анализатор должен закрыть файловые и любые связанные файлы, которые он открыл и наводил порядок ресурсы, как например, освобождение памяти.
Если ошибка происходит пока файл разобран, файловый синтаксический анализатор должен называть функцию SOBailOut, чтобы уведомлять дисплейный двигатель об условии ошибки. Синтаксический анализатор должен немедленно возвращаться из VwStreamReadFunc после вызова функции SOBailOut.
|
|
|
|
| |