// Setup a logger to bridge FXG and Flex logging systems
setupLogger();
// Setup the FXG Parser using either the mobile or desktop profile
FXGParser parser;
if (FXG_PROFILE_MOBILE.equals(profile))
parser = FXGParserFactory.createDefaultParserForMobile();
else
parser = FXGParserFactory.createDefaultParser();
// Register Flex specific FXG nodes
parser.registerElementNode(1.0, FXG_NAMESPACE, FXG_GRAPHIC_ELEMENT, FlexGraphicNode.class);
parser.registerElementNode(1.0, FXG_NAMESPACE, FXG_TEXTGRAPHIC_ELEMENT, FlexTextGraphicNode.class);
parser.registerElementNode(1.0, FXG_NAMESPACE, FXG_P_ELEMENT, FlexParagraphNode.class);
parser.registerElementNode(1.0, FXG_NAMESPACE, FXG_SPAN_ELEMENT, FlexSpanNode.class);
parser.registerElementNode(2.0, FXG_NAMESPACE, FXG_GRAPHIC_ELEMENT, FlexGraphicNode.class);
parser.registerElementNode(2.0, FXG_NAMESPACE, FXG_RICHTEXT_ELEMENT, FlexRichTextNode.class);
try
{
// Parse FXG to a DOM
FXGNode node = parser.parse(source.getInputStream(), source.getNameForReporting());
context.setAttribute(FXG_DOM_ROOT, node);
QName topLevelQName = getQNameFromSource(source);
unit.topLevelDefinitions.add(topLevelQName);