-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(#16459): cannot parse text in xml literal with newline
The parser could not parse `if expr` that contains single-quoted text(s) inside XML literal with newline(s) because `followedByToken`, which is used to detect `do` or `then` token after `if`, unintentionally consumed XMLSTART symbol, which prevented the parser from delegating parse to XML parser. [Cherry-picked 1fc27df]
- Loading branch information
1 parent
45faafb
commit ce35410
Showing
2 changed files
with
66 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
object Test { | ||
import scala.xml.* | ||
def main(args: Array[String]): Unit = { | ||
|
||
val xml = if(true) { | ||
<script type="text/javascript"> | ||
'location.reload()' | ||
'foo bar' | ||
</script> | ||
} else <div>empty</div> | ||
|
||
assert( | ||
xml match | ||
case elm: Elem if | ||
elm.label == "script" | ||
&& elm.child.length == 1 | ||
&& elm.child(0) == Atom(Text("\n 'location.reload()'\n 'foo bar'\n ")) | ||
=> true | ||
case _ => false | ||
, | ||
xml | ||
) | ||
} | ||
} | ||
|
||
package scala.xml { | ||
type MetaData = AnyRef | ||
|
||
class UnprefixedAttribute( | ||
val key: String, | ||
val value: Text, | ||
next1: MetaData | ||
) extends MetaData | ||
|
||
trait NamespaceBinding | ||
object TopScope extends NamespaceBinding | ||
object Null | ||
abstract class Node { | ||
def label: String | ||
def child: Seq[Node] | ||
override def toString = label + child.mkString | ||
} | ||
class Comment(commentText: String) extends Node{ | ||
def label = commentText | ||
def child = Nil | ||
} | ||
class Elem(prefix: String, val label: String, attributes1: MetaData, scope: NamespaceBinding, minimizeEmpty: Boolean, val child: Node*) extends Node | ||
class NodeBuffer extends Seq[Node] { | ||
val nodes = scala.collection.mutable.ArrayBuffer.empty[Node] | ||
def &+(o: Any): NodeBuffer = o match { | ||
case n: Node => nodes.addOne(n) ; this | ||
case t: Text => nodes.addOne(Atom(t)) ; this | ||
} | ||
// Members declared in scala.collection.IterableOnce | ||
def iterator: Iterator[scala.xml.Node] = nodes.iterator | ||
// Members declared in scala.collection.SeqOps | ||
def apply(i: Int): scala.xml.Node = nodes(i) | ||
def length: Int = nodes.length | ||
} | ||
case class Text(text: String) | ||
case class Atom(t: Text) extends Node { | ||
def label = t.text | ||
def child = Nil | ||
} | ||
} |