public final class DOMBuilder extends Object
List of (fixed) Tokens and builds a (raw) XHTML + MathML
DOM tree branch from them.
SnuggleSession.buildDOMSubtree(Element, DOMOutputOptions) and friends.
An instance of this class is intended to be used once and then discarded so can be stateful.
This contains a number of callbacks that CommandHandlers and EnvironmentHandlers
can use to do their magic.
TokenFixer,
DOMBuildingController| Modifier and Type | Class and Description |
|---|---|
static interface |
DOMBuilder.MathContentBuilderCallback
Internal callback interface that specifies how to build the real content of a MathML
element.
|
static class |
DOMBuilder.OutputContext
Trivial enumeration to keep track of where we are in the outgoing DOM.
|
| Constructor and Description |
|---|
DOMBuilder(SessionContext sessionContext,
Element buildRootElement,
DOMOutputOptions options) |
| Modifier and Type | Method and Description |
|---|---|
Element |
appendErrorElement(Element parentElement,
ErrorToken errorToken) |
void |
appendMathCharacter(Element parentElement,
MathCharacter character) |
Element |
appendMathMLElement(Element parentElement,
String elementLocalName) |
Element |
appendMathMLIdentifierElement(Element parentElement,
String name)
Creates a MathML identifier element, which may either be a single character or multiple
characters (e.g.
|
Element |
appendMathMLNumberElement(Element parentElement,
String number) |
Element |
appendMathMLOperatorElement(Element parentElement,
String content) |
Element |
appendMathMLSpace(Element parentElement,
String width) |
Element |
appendMathMLTextElement(Element parentElement,
String elementLocalName,
String content,
boolean trim) |
Element |
appendOrThrowError(Element parentElement,
Token token,
ErrorCode errorCode,
Object... arguments) |
void |
appendSimpleMathElement(Element parentElement,
Token token) |
Element |
appendSnuggleElement(Element parentElement,
String elementLocalName) |
Node |
appendTextNode(Element parentElement,
String content,
boolean trim) |
Element |
appendXHTMLElement(Element parentElement,
String elementLocalName) |
Element |
appendXHTMLTextElement(Element parentElement,
String elementLocalName,
String content,
boolean trim) |
void |
applyCSSStyle(Element xhtmlElement,
String... cssClassNames) |
void |
buildDOMSubtree(List<FlowToken> fixedTokens)
This is the external entry point used by
SnuggleSession only. |
void |
buildMathElement(Element parentElement,
Token token,
ArgumentContainerToken mathContentToken,
boolean isDisplayMath)
Builds a MathML
math element for the given Token token, using contentToken
to provide the content, descending into child Nodes as normal. |
void |
buildMathElement(Element parentElement,
Token token,
ArgumentContainerToken mathContentToken,
boolean isDisplayMath,
DOMBuilder.MathContentBuilderCallback mathContentBuilderCallback)
Builds a MathML
math element for the given Token token, using contentToken
to provide the content, using the given DOMBuilder.MathContentBuilderCallback to
supply the content. |
ComputedStyle |
closeStyle() |
NodeList |
extractNodeListValue(ArgumentContainerToken token) |
String |
extractStringValue(ArgumentContainerToken token)
This "converts" the given token to a String by performing
{
handleTokens(Element, ArgumentContainerToken, boolean)}
with a fake root element and then extracting the String value of the resulting Text Node(s). |
Element |
findNearestXHTMLAncestorOrSelf(Element element) |
Document |
getDocument()
Gets at the underlying DOM Document.
|
ArrayListStack<MathVariantMap> |
getMathVariantMapStack() |
DOMOutputOptions |
getOptions() |
DOMBuilder.OutputContext |
getOutputContext() |
SessionContext |
getSessionContext() |
VariableManager |
getVariableManager() |
void |
handleMathTokensAsSingleElement(Element parentElement,
ArgumentContainerToken containerToken) |
void |
handleMathTokensAsSingleElement(Element parentElement,
List<FlowToken> tokens) |
void |
handleTextToken(Element parentElement,
SimpleToken textToken) |
void |
handleToken(Element parentElement,
FlowToken token)
Creates a single Node from the given token.
|
void |
handleTokens(Element parentElement,
ArgumentContainerToken containerToken,
boolean trimWhitespace) |
void |
handleTokens(Element parentElement,
List<FlowToken> siblingTokens,
boolean trimWhitespace) |
boolean |
isBuildingMathMLIsland()
Returns whether or not we're building a MathML island by checking the current
DOMBuilder.OutputContext. |
boolean |
isParentElement(Element parentElement,
String requiredNamespaceUri,
String... requiredLocalNames) |
Element |
openStyle(Element parentElement,
ComputedStyle newStyle,
boolean hasBlockContent,
boolean hasEmptyContent) |
URI |
resolveLink(Element parentElement,
Token token,
String rawHref) |
void |
setOutputContext(Element parentElement,
DOMBuilder.OutputContext outputContext) |
URI |
validateURI(Element parentElement,
Token token,
String rawURI)
Checks the given raw URI to ensure that it is valid, returning a
URI Object if
valid or null if not. |
String |
validateXMLId(Element parentElement,
Token nameToken,
String rawName)
Checks the given XML Name as in
validateXMLName(Element, Token, String), additionally
checking that an ID of the same name is not already in use in the output DOM. |
String |
validateXMLName(Element parentElement,
Token nameToken,
String rawName)
Checks the given raw XML Name to ensure that it confirms to the correct syntax, returning
it unchanged if successful.
|
public DOMBuilder(SessionContext sessionContext, Element buildRootElement, DOMOutputOptions options)
public void buildDOMSubtree(List<FlowToken> fixedTokens) throws SnuggleParseException
SnuggleSession only. If you are using
DOMBuilder as a callback to implementing your own built-in commands and
environments, then you shouldn't call this method.SnuggleParseExceptionDOMExceptionpublic SessionContext getSessionContext()
public DOMOutputOptions getOptions()
public Document getDocument()
public VariableManager getVariableManager()
public ArrayListStack<MathVariantMap> getMathVariantMapStack()
public DOMBuilder.OutputContext getOutputContext()
public void setOutputContext(Element parentElement, DOMBuilder.OutputContext outputContext)
public boolean isBuildingMathMLIsland()
DOMBuilder.OutputContext.public void handleTokens(Element parentElement, ArgumentContainerToken containerToken, boolean trimWhitespace) throws SnuggleParseException
trimWhitespace - removes leading whitespace from the first resulting Node if it is a Text Node and
removes trailing whitespace from the last Node if it is a Text Node.SnuggleParseExceptionpublic void handleTokens(Element parentElement, List<FlowToken> siblingTokens, boolean trimWhitespace) throws SnuggleParseException
trimWhitespace - removes leading whitespace from the first resulting Node if it is a Text Node and
removes trailing whitespace from the last Node if it is a Text Node.SnuggleParseExceptionpublic void handleToken(Element parentElement, FlowToken token) throws SnuggleParseException
parentElement - token - DOMExceptionSnuggleParseExceptionpublic void handleTextToken(Element parentElement, SimpleToken textToken)
public void appendMathCharacter(Element parentElement, MathCharacter character)
public Element appendSnuggleElement(Element parentElement, String elementLocalName)
public Element appendXHTMLElement(Element parentElement, String elementLocalName)
public Element appendXHTMLTextElement(Element parentElement, String elementLocalName, String content, boolean trim)
public Element appendMathMLElement(Element parentElement, String elementLocalName)
public Element appendMathMLTextElement(Element parentElement, String elementLocalName, String content, boolean trim)
public Element appendMathMLOperatorElement(Element parentElement, String content)
public Element appendMathMLNumberElement(Element parentElement, String number)
public Element appendMathMLIdentifierElement(Element parentElement, String name)
parentElement - name - DOMOutputOptions.isMathVariantMapping()public void handleMathTokensAsSingleElement(Element parentElement, ArgumentContainerToken containerToken) throws SnuggleParseException
SnuggleParseExceptionpublic void handleMathTokensAsSingleElement(Element parentElement, List<FlowToken> tokens) throws SnuggleParseException
SnuggleParseExceptionpublic NodeList extractNodeListValue(ArgumentContainerToken token) throws SnuggleParseException
SnuggleParseExceptionpublic String extractStringValue(ArgumentContainerToken token) throws SnuggleParseException
handleTokens(Element, ArgumentContainerToken, boolean)}
with a fake root element and then extracting the String value of the resulting Text Node(s).DOMExceptionSnuggleParseExceptionpublic Element openStyle(Element parentElement, ComputedStyle newStyle, boolean hasBlockContent, boolean hasEmptyContent)
public ComputedStyle closeStyle()
public void buildMathElement(Element parentElement, Token token, ArgumentContainerToken mathContentToken, boolean isDisplayMath) throws SnuggleParseException
math element for the given Token token, using contentToken
to provide the content, descending into child Nodes as normal.SnuggleParseExceptionpublic void buildMathElement(Element parentElement, Token token, ArgumentContainerToken mathContentToken, boolean isDisplayMath, DOMBuilder.MathContentBuilderCallback mathContentBuilderCallback) throws SnuggleParseException
math element for the given Token token, using contentToken
to provide the content, using the given DOMBuilder.MathContentBuilderCallback to
supply the content.
This is useful for things like EqnArrayHandler which generate a rather specific
structure.
SnuggleParseExceptionpublic boolean isParentElement(Element parentElement, String requiredNamespaceUri, String... requiredLocalNames)
public String validateXMLName(Element parentElement, Token nameToken, String rawName) throws SnuggleParseException
CoreErrorCode.TDEX03 is recorded.SnuggleParseExceptionpublic String validateXMLId(Element parentElement, Token nameToken, String rawName) throws SnuggleParseException
validateXMLName(Element, Token, String), additionally
checking that an ID of the same name is not already in use in the output DOM. If it is,
CoreErrorCode.TDEX05 is recorded. Returns non-null on success, null on error.SnuggleParseExceptionpublic URI validateURI(Element parentElement, Token token, String rawURI) throws SnuggleParseException
URI Object if
valid or null if not. If not valid, the CoreErrorCode.TDEX04 is recorded.SnuggleParseExceptionpublic URI resolveLink(Element parentElement, Token token, String rawHref) throws SnuggleParseException
SnuggleParseExceptionpublic Element appendOrThrowError(Element parentElement, Token token, ErrorCode errorCode, Object... arguments) throws SnuggleParseException
SnuggleParseExceptionpublic Element appendErrorElement(Element parentElement, ErrorToken errorToken)
Copyright © 2008–2026 The University of Edinburgh. All rights reserved.