InterpolationParser

class Object
trait Matchable
class Any

Value members

Concrete methods

def parseHtmlParts[Fragment <: DocumentFragment](parts: IndexedSeq[String], argumentErrorHandler: (String, Int) => Unit { def apply(message: String, argumentIndex: Int): Unit; }, document: Document { def createDocumentFragment(): Fragment; }): Fragment

Concatenate parts and parse it as HTML, assuming there are arguments between each parts.

Concatenate parts and parse it as HTML, assuming there are arguments between each parts.

Example:

Given two HTML elements, and an argument as the content of the first element,

 val parts = IndexedSeq("<section>", "</section><br><footer></footer>")

when parsing it,

 val htmlFragment = InterpolationParser.parseHtmlParts(
   parts,
   { (message, _) => fail(message) },
 )

then the result should be an HTML fragment including the two elements,

 import javax.xml.transform.stream.StreamResult
 import javax.xml.transform.TransformerFactory
 import javax.xml.transform.OutputKeys
 import javax.xml.transform.dom.DOMSource
 import java.io.StringWriter
 import scala.util.chaining.given
 val writer = new StringWriter()
 TransformerFactory
   .newInstance()
   .newTransformer()
   .tap(_.setOutputProperty(OutputKeys.METHOD, "html"))
   .tap(_.setOutputProperty(OutputKeys.INDENT, "no"))
   .transform(new DOMSource(htmlFragment), new StreamResult(writer))
 writer.toString() should be("<SECTION></SECTION><BR><FOOTER></FOOTER>")

and there should be a placeholder in the first element.

 val placeholder = htmlFragment.getFirstChild().getFirstChild()
 val argIndex = placeholder.getUserData(
   InterpolationParser.ElementArgumentUserDataKey
 )
 argIndex should be(0)

Concrete fields