xhtmlparser.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 56 行
SCALA
56 行
// $Id: XhtmlParser.scala 13983 2008-02-14 01:54:12Z mihaylov $package scala.xml.parsingimport scala.io.{Source}/** * Extends the Markup Parser to do the right thing (tm) with PCData blocks. * (c) David Pollak, 2007 WorldWide Conferencing, LLC */trait PCDataMarkupParser[PCM <: MarkupParser with MarkupHandler] extends MarkupParser { self: PCM => /** '<! CharData ::= [CDATA[ ( {char} - {char}"]]>"{char} ) ']]>' * * see [15] */ override def xCharData: NodeSeq = { xToken("[CDATA[") val pos1 = pos val sb: StringBuilder = new StringBuilder() while (true) { if (ch==']' && { sb.append(ch); nextch; ch == ']' } && { sb.append(ch); nextch; ch == '>' } ) { sb.setLength(sb.length - 2); nextch; return PCData(sb.toString) } else sb.append( ch ); nextch; } // bq: (todo) increase grace when meeting CDATA section throw FatalError("this cannot happen"); }}/** * An XML Parser that preserves CDATA blocks and knows about HtmlEntities. * (c) David Pollak, 2007 WorldWide Conferencing, LLC */class XhtmlParser(val input: Source) extends ConstructingHandler with PCDataMarkupParser[XhtmlParser] with ExternalSources { val preserveWS = true ent ++= XhtmlEntities()}/** * Convenience method that instantiates, initializes and runs an XhtmlParser * (c) Burak Emir */object XhtmlParser { def apply(source: Source): NodeSeq = { val p = new XhtmlParser(source) p.nextch p.document }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?