Класс HTMLDocument.HTMLReader
- java.lang.Object
-
- javax.swing.text.html.HTMLEditorKit.ParserCallback
-
- javax.swing.text.html.HTMLDocument.HTMLReader
- Вложенный класс:
- HTMLDocument
public class HTMLDocument.HTMLReader extends HTMLEditorKit.ParserCallback
Чтец HTML для загрузки документа HTML со структурой HTML-элементов. Это набор обратных вызовов от анализатора, реализованных для создания набора элементов, помеченных атрибутами. Анализ строит токены (ElementSpec), описывающие желаемое поддерево элементов, и вставляет его в документ под защитой блокировки записи, используя метод insert внешнего класса документа.
Чтец можно настроить, зарегистрировав действия (типа HTMLDocument.HTMLReader.TagAction), описывающие, как обработать действие. Идея, стоящая за предоставленными действиями, заключается в том, что наиболее естественные операции редактирования текста могут быть предоставлены, если структура элементов сводится к абзацам с последовательностями какого-либо стиля. Некоторые вещи более естественно задавать структурно, поэтому произвольная структура должна быть разрешена выше абзацев, но её нужно будет редактировать с помощью структурных действий. Следствием этого является то, что некоторые HTML-элементы, указанные в анализируемом потоке, будут сжаты в атрибуты, а в некоторых случаях будут синтезированы абзацы. Когда HTML-элементы были преобразованы в атрибуты, ключ атрибута будет типа HTML.Tag, а значение — типа AttributeSet, чтобы не потерять никакой информации. Это позволяет многим существующим действиям работать так, чтобы пользователь мог вводить текст, нажимать клавишу Enter, Backspace, Delete и т. д. и получать разумный результат. Можно создавать выделения, применять или удалять атрибуты и т. д. С учётом этого, работу читателя можно разделить на следующие виды задач:
- Блок
- Построить структуру так, как она указана в потоке. Это создаёт элементы, содержащие другие элементы.
- Абзац
- Как блок, за исключением того, что ожидается, что элемент будет использоваться с видом абзаца, поэтому абзац-элемент не нужно будет синтезировать.
- Символ
- Внести элемент в качестве атрибута, который будет начинаться и заканчиваться в произвольных местах текста. В конечном итоге он будет смешан в последовательность текста со всеми текущими сжатыми HTML-элементами символов.
- Специальный
- Создать встроенный графический элемент.
- Форма
- Создать элемент, подобный встроенному графическому элементу, но также связанный с моделью компонента.
- Скрытый
- Создать элемент, скрытый при просмотре документа только для чтения и видимый при редактировании документа. Это полезно, чтобы модель не теряла информацию, и используется для хранения таких вещей, как комментарии и нераспознанные теги.
В настоящее время теги <APPLET>, <PARAM>, <MAP>, <AREA>, <LINK>, <SCRIPT> и <STYLE> не поддерживаются.
Присвоение описанных действий показано в следующей таблице для тегов, определённых в HTML.Tag.
| Тег | Действие |
|---|---|
HTML.Tag.A |
CharacterAction |
HTML.Tag.ADDRESS |
CharacterAction |
HTML.Tag.APPLET |
HiddenAction |
HTML.Tag.AREA |
AreaAction |
HTML.Tag.B |
CharacterAction |
HTML.Tag.BASE |
BaseAction |
HTML.Tag.BASEFONT |
CharacterAction |
HTML.Tag.BIG |
CharacterAction |
HTML.Tag.BLOCKQUOTE |
BlockAction |
HTML.Tag.BODY |
BlockAction |
HTML.Tag.BR |
SpecialAction |
HTML.Tag.CAPTION |
BlockAction |
HTML.Tag.CENTER |
BlockAction |
HTML.Tag.CITE |
CharacterAction |
HTML.Tag.CODE |
CharacterAction |
HTML.Tag.DD |
BlockAction |
HTML.Tag.DFN |
CharacterAction |
HTML.Tag.DIR |
BlockAction |
HTML.Tag.DIV |
BlockAction |
HTML.Tag.DL |
BlockAction |
HTML.Tag.DT |
ParagraphAction |
HTML.Tag.EM |
CharacterAction |
HTML.Tag.FONT |
CharacterAction |
HTML.Tag.FORM |
С 1.4 BlockAction |
HTML.Tag.FRAME |
SpecialAction |
HTML.Tag.FRAMESET |
BlockAction |
HTML.Tag.H1 |
ParagraphAction |
HTML.Tag.H2 |
ParagraphAction |
HTML.Tag.H3 |
ParagraphAction |
HTML.Tag.H4 |
ParagraphAction |
HTML.Tag.H5 |
ParagraphAction |
HTML.Tag.H6 |
ParagraphAction |
HTML.Tag.HEAD |
HeadAction |
HTML.Tag.HR |
SpecialAction |
HTML.Tag.HTML |
BlockAction |
HTML.Tag.I |
CharacterAction |
HTML.Tag.IMG |
SpecialAction |
HTML.Tag.INPUT |
FormAction |
HTML.Tag.ISINDEX |
IsndexAction |
HTML.Tag.KBD |
CharacterAction |
HTML.Tag.LI |
BlockAction |
HTML.Tag.LINK |
LinkAction |
HTML.Tag.MAP |
MapAction |
HTML.Tag.MENU |
BlockAction |
HTML.Tag.META |
MetaAction |
HTML.Tag.NOFRAMES |
BlockAction |
HTML.Tag.OBJECT |
SpecialAction |
HTML.Tag.OL |
BlockAction |
HTML.Tag.OPTION |
FormAction |
HTML.Tag.P |
ParagraphAction |
HTML.Tag.PARAM |
HiddenAction |
HTML.Tag.PRE |
PreAction |
HTML.Tag.SAMP |
CharacterAction |
HTML.Tag.SCRIPT |
HiddenAction |
HTML.Tag.SELECT |
FormAction |
HTML.Tag.SMALL |
CharacterAction |
HTML.Tag.STRIKE |
CharacterAction |
HTML.Tag.S |
CharacterAction |
HTML.Tag.STRONG |
CharacterAction |
HTML.Tag.STYLE |
StyleAction |
HTML.Tag.SUB |
CharacterAction |
HTML.Tag.SUP |
CharacterAction |
HTML.Tag.TABLE |
BlockAction |
HTML.Tag.TD |
BlockAction |
HTML.Tag.TEXTAREA |
FormAction |
HTML.Tag.TH |
BlockAction |
HTML.Tag.TITLE |
TitleAction |
HTML.Tag.TR |
BlockAction |
HTML.Tag.TT |
CharacterAction |
HTML.Tag.U |
CharacterAction |
HTML.Tag.UL |
BlockAction |
HTML.Tag.VAR |
CharacterAction |
После встречи с </html>, действия больше не уведомляются.
Вложенные классы
| Модификатор и тип | Класс | Описание |
|---|---|---|
class | HTMLDocument.HTMLReader.BlockAction | Действие по умолчанию для обработки задачи Блок читателя. |
class | HTMLDocument.HTMLReader.CharacterAction | Действие по умолчанию для обработки задачи Символ читателя. |
class | HTMLDocument.HTMLReader.FormAction | Действие для поддержки форм путём создания всех элементов, используемых для представления элементов управления формой. |
class | HTMLDocument.HTMLReader.HiddenAction | Действие по умолчанию для обработки задачи Скрытый читателя. |
class | HTMLDocument.HTMLReader.IsindexAction | Действие по умолчанию для обработки задачи Isindex читателя. |
class | HTMLDocument.HTMLReader.ParagraphAction | Действие по умолчанию для обработки задачи Абзац читателя. |
class | HTMLDocument.HTMLReader.PreAction | Действие по умолчанию для обработки задачи Блок Pre читателя. |
class | HTMLDocument.HTMLReader.SpecialAction | Действие по умолчанию для обработки задачи Специальный читателя. |
class | HTMLDocument.HTMLReader.TagAction | Действие, которое должно быть выполнено в ответ на разбор тега. |
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected MutableAttributeSet |
charAttr |
Текущий набор атрибутов символа. |
protected Vector<DefaultStyledDocument.ElementSpec> |
parseBuffer |
Буфер для дальнейшего построения элементов. |
Поля, объявленные в классе javax.swing.text.html.HTMLEditorKit.ParserCallback
IMPLIED
Конструкторы
| Конструктор | Описание |
|---|---|
HTMLReader(int offset) |
Создаёт HTMLReader с использованием стандартной глубины стеков push и pop и без тега для вставки. |
HTMLReader(int offset,
int popDepth,
int pushDepth,
HTML.Tag insertTag) |
Создаёт HTMLReader. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
addContent(char[] data,
int offs,
int length) |
Добавляет текст с текущими атрибутами символа. |
protected void |
addContent(char[] data,
int offs,
int length,
boolean generateImpliedPIfNecessary) |
Добавляет текст с текущими атрибутами символа. |
protected void |
addSpecialElement(HTML.Tag t,
MutableAttributeSet a) |
Добавляет контент, полностью определяемый набором атрибутов. |
protected void |
blockClose(HTML.Tag t) |
Добавляет в буфер разбора инструкцию для закрытия элемента блока заданного типа. |
protected void |
blockOpen(HTML.Tag t,
MutableAttributeSet attr) |
Добавляет в буфер разбора инструкцию для создания элемента блока с заданными атрибутами. |
void |
flush() |
Последний вызываемый метод на чтеце. |
void |
handleEndOfLineString(String eol) |
Вызывается после разбора потока, но перед |
void |
handleEndTag(HTML.Tag t,
int pos) |
Обработчик от разбора. |
void |
handleSimpleTag(HTML.Tag t,
MutableAttributeSet a,
int pos) |
Обработчик от разбора. |
void |
handleStartTag(HTML.Tag t,
MutableAttributeSet a,
int pos) |
Обработчик от разбора. |
void |
handleText(char[] data,
int pos) |
Вызывается разборщиком для указания на блок текста. |
protected void |
popCharacterStyle() |
Извлекает ранее помещённый стиль символа из стека, чтобы вернуться к предыдущему стилю. |
protected void |
preContent(char[] data) |
Добавляет полученный контент из элемента PRE. |
protected void |
pushCharacterStyle() |
Помещает текущий стиль символа в стек, в подготовке к формированию нового вложенного стиля символа. |
protected void |
registerTag(HTML.Tag t,
HTMLDocument.HTMLReader.TagAction a) |
Регистрирует обработчик для заданного тега. |
protected void |
textAreaContent(char[] data) |
Добавляет указанный контент в документ текстового поля. |
Методы, объявленные в классе javax.swing.text.html.HTMLEditorKit.ParserCallback
handleComment, handleError
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Поля
parseBuffer
protected Vector<DefaultStyledDocument.ElementSpec> parseBuffer
Буфер для накопления элементов.
charAttr
protected MutableAttributeSet charAttr
Текущий набор атрибутов символов.
Конструкторы
HTMLReader
public HTMLReader(int offset)
Создаёт HTMLReader с настройками по умолчанию для глубины стека и без тега для вставки.
- Параметры:
-
offset- начальное смещение
HTMLReader
public HTMLReader(int offset,
int popDepth,
int pushDepth,
HTML.Tag insertTag) Создаёт HTMLReader.
- Параметры:
-
offset- начальное смещение -
popDepth- количество предков для подъёма перед вставкой нового элемента -
pushDepth- количество предков для спуска (относительно popDepth) перед вставкой -
insertTag- тег для вставки (может быть null)
Методы
flush
public void flush()
throws BadLocationException Последний метод, вызываемый для чтения. Он позволяет сбросить все ожидаемые изменения в документ. Поскольку в данный момент загрузка происходит синхронно, весь набор изменений передаётся на этом этапе.
- Переопределяет:
-
flushв классеHTMLEditorKit.ParserCallback - Исключение:
-
BadLocationException- если заданная позиция не представляет собой допустимое местоположение в связанном документе.
handleText
public void handleText(char[] data,
int pos) Вызывается парсером для указания блока текста.
- Переопределяет:
-
handleTextв классеHTMLEditorKit.ParserCallback - Параметры:
-
data- данные -
pos- позиция
handleStartTag
public void handleStartTag(HTML.Tag t,
MutableAttributeSet a,
int pos) Обратный вызов от парсера. Перенаправление к соответствующему обработчику для тега.
- Переопределяет:
-
handleStartTagв классеHTMLEditorKit.ParserCallback - Параметры:
-
t- тег HTML -
a- набор атрибутов -
pos- позиция
handleEndTag
public void handleEndTag(HTML.Tag t,
int pos) Обратный вызов от парсера. Перенаправление к соответствующему обработчику для тега.
- Переопределяет:
-
handleEndTagв классеHTMLEditorKit.ParserCallback - Параметры:
-
t- тег HTML -
pos- позиция
handleSimpleTag
public void handleSimpleTag(HTML.Tag t,
MutableAttributeSet a,
int pos) Обратный вызов от парсера. Перенаправление к соответствующему обработчику для тега.
- Переопределяет:
-
handleSimpleTagв классеHTMLEditorKit.ParserCallback - Параметры:
-
t- тег HTML -
a- набор атрибутов -
pos- позиция
handleEndOfLineString
public void handleEndOfLineString(String eol)
Вызывается после разбора потока, но перед flush. eol будет одним из \n, \r или \r\n, в зависимости от того, какой из них встречается чаще при разборе потока.
- Переопределяет:
-
handleEndOfLineStringв классеHTMLEditorKit.ParserCallback - Параметры:
-
eol- значение eol - С тех пор:
- 1.3
registerTag
protected void registerTag(HTML.Tag t,
HTMLDocument.HTMLReader.TagAction a) Регистрирует обработчик для данного тега. По умолчанию все известные теги будут зарегистрированы. Это можно использовать для изменения обработки определённого тега или добавления поддержки пользовательских тегов.
- Параметры:
-
t- тег HTML -
a- обработчик действий с тегом
pushCharacterStyle
protected void pushCharacterStyle()
Помещает текущий стиль символов в стек для подготовки к формированию нового вложенного стиля символов.
popCharacterStyle
protected void popCharacterStyle()
Извлекает ранее помещённый стиль символов из стека, чтобы вернуться к предыдущему стилю.
textAreaContent
protected void textAreaContent(char[] data)
Добавляет заданное содержимое в документ textarea. Этот метод вызывается, когда мы находимся в контексте textarea. Следовательно, весь видимый текст относится к области ввода текста и добавляется в TextAreaDocument, связанный с областью ввода текста.
- Параметры:
-
data- заданное содержимое
preContent
protected void preContent(char[] data)
Добавляет заданное содержимое, которое было встречено в элементе PRE. Это синтезирует строки для хранения блоков текста и вызывает addContent для фактического добавления текста.
- Параметры:
-
data- заданное содержимое
blockOpen
protected void blockOpen(HTML.Tag t,
MutableAttributeSet attr) Добавляет инструкцию в буфер разбора для создания блока элемента с указанными атрибутами.
- Параметры:
-
t- тег HTML -
attr- набор атрибутов
blockClose
protected void blockClose(HTML.Tag t)
Добавляет инструкцию в буфер разбора для закрытия элемента блока указанного типа.
- Параметры:
-
t- тег HTML
addContent
protected void addContent(char[] data,
int offs,
int length) Добавляет текст с текущими атрибутами символов.
- Параметры:
-
data- содержимое для добавления -
offs- начальное смещение -
length- длина
addContent
protected void addContent(char[] data,
int offs,
int length,
boolean generateImpliedPIfNecessary) Добавляет текст с текущими атрибутами символов.
- Параметры:
-
data- содержимое для добавления -
offs- начальное смещение -
length- длина -
generateImpliedPIfNecessary- генерировать ли неявные абзацы
addSpecialElement
protected void addSpecialElement(HTML.Tag t,
MutableAttributeSet a) Добавляет содержимое, которое в основном полностью задано в наборе атрибутов.
- Параметры:
-
t- тег HTML -
a- набор атрибутов
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/text/html/HTMLDocument.HTMLReader.html