Module java.desktop

Class 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类型,以便不会丢失任何信息。这使得许多现有操作可以正常工作,用户可以输入文本,按回车键,退格,删除等,并获得合理的结果。可以创建选择,应用或删除属性等。考虑到这一点,阅读器完成的工作可以归类为以下几种任务:

像在流中指定的那样构建结构。这会产生包含其他元素的元素。
段落
与块类似,只是预期该元素将与段落视图一起使用,因此不需要合成段落元素。
字符
将元素作为在任意文本位置开始和停止的属性。这最终将混合到文本运行中,其中包含当前所有已展平的HTML字符元素。
特殊
生成嵌入的图形元素。
表单
生成类似于嵌入的图形元素的元素,只是它还具有与之关联的组件模型。
隐藏
创建一个在查看文档时处于隐藏状态,而在编辑文档时可见的元素。这对于防止模型丢失信息很有用,并用于存储诸如注释和未识别标记之类的内容。

目前不支持<APPLET>, <PARAM>, <MAP>, <AREA>, <LINK>, <SCRIPT>和<STYLE>。

为在HTML.Tag中定义的标记分配的操作如下表所示。

HTML标记和分配的操作
标记 操作
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>,操作将不再被通知。

  • Field Details

  • Constructor Details

    • 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)
  • Method Details

    • 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)
      将给定内容添加到文本区域文档中。当我们处于文本区域上下文时,将调用此方法。因此,所见到的所有文本都属于文本区域,因此将其添加到与文本区域关联的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 - 属性集