Craft Language Parser

The parser subsystem converts Craft Language XML sources into the Docraft model tree. A registry of IDocraftParser implementations handles each element tag.

DocraftCraftLanguageParser

Main parser that loads XML, registers tag-specific parsers, and builds the DocraftDocument.

class DocraftCraftLanguageParser

Parses the Docraft Craft Language into a DocraftDocument.

Uses an XML parser (pugixml) and a registry of node parsers to build the document tree.

Public Functions

DocraftCraftLanguageParser()

Constructs a parser and registers default node parsers.

~DocraftCraftLanguageParser() = default
void parse(const std::string &craft_language_source)

Parses craft language source as a string.

Parameters:

craft_language_source – XML source as string.

void load_from_file(const std::string &file_path)

Loads and parses craft language source from file.

Parameters:

file_path – Path to XML file.

std::shared_ptr<DocraftDocument> get_document() const

Returns the parsed document.

Returns:

Parsed document or nullptr if not parsed.

std::shared_ptr<model::DocraftNode> parse_node(const pugi::xml_node &xml_node)

Parses a single XML node into a Docraft node.

Parameters:

xml_node – XML node.

Returns:

Parsed Docraft node.

IDocraftParser

Interface for single-tag parsers.

class IDocraftParser

Interface for Craft language node parsers.

Implementations translate a single XML node into a Docraft model node.

Subclassed by docraft::craft::parser::DocraftBlackLineParser, docraft::craft::parser::DocraftCircleParser, docraft::craft::parser::DocraftForeachParser, docraft::craft::parser::DocraftImageParser, docraft::craft::parser::DocraftLayoutParser, docraft::craft::parser::DocraftLineParser, docraft::craft::parser::DocraftListParser, docraft::craft::parser::DocraftNewPageParser, docraft::craft::parser::DocraftPageNumberParser, docraft::craft::parser::DocraftPolygonParser, docraft::craft::parser::DocraftRectangleParser, docraft::craft::parser::DocraftSettingsParser, docraft::craft::parser::DocraftTableParser, docraft::craft::parser::DocraftTextParser, docraft::craft::parser::DocraftTriangleParser, docraft::craft::parser::DocraftUListParser

Public Functions

virtual ~IDocraftParser() = default

Virtual destructor.

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) = 0

Parses an XML node into a Docraft node.

Parameters:

craft_language_source – XML node to parse.

Returns:

Parsed Docraft node.

Element Parsers

Each parser translates one XML tag into the corresponding model node.

class DocraftTextParser : public docraft::craft::IDocraftParser

Parser for text nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a text XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed text node.

class DocraftImageParser : public docraft::craft::IDocraftParser

Parser for image nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses an image XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed image node.

class DocraftRectangleParser : public docraft::craft::IDocraftParser

Base parser for rectangle-like nodes.

Subclassed by docraft::craft::parser::DocraftBodyParser, docraft::craft::parser::DocraftFooterParser, docraft::craft::parser::DocraftHeaderParser

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a rectangle XML node into a DocraftRectangle.

Parameters:

craft_language_source – XML node.

Returns:

Parsed rectangle node.

Public Static Functions

static void apply_attributes_to(const std::shared_ptr<model::DocraftRectangle> &from, const std::shared_ptr<model::DocraftRectangle> &to)

Copies rectangle attributes from one node to another.

Parameters:
  • from – Source rectangle.

  • to – Destination rectangle.

class DocraftCircleParser : public docraft::craft::IDocraftParser

Parser for circle nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a circle XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed circle node.

class DocraftTriangleParser : public docraft::craft::IDocraftParser

Parser for triangle nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a triangle XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed triangle node.

class DocraftLineParser : public docraft::craft::IDocraftParser

Parser for line nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a line XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed line node.

class DocraftPolygonParser : public docraft::craft::IDocraftParser

Parser for polygon nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a polygon XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed polygon node.

class DocraftTableParser : public docraft::craft::IDocraftParser

Parser for table nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a table XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed table node.

class DocraftListParser : public docraft::craft::IDocraftParser

Parser for list nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a list XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed list node.

class DocraftUListParser : public docraft::craft::IDocraftParser

Parser for unordered list nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses an unordered list XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed unordered list node.

class DocraftLayoutParser : public docraft::craft::IDocraftParser

Parser for layout nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a layout XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed layout node.

class DocraftBlackLineParser : public docraft::craft::IDocraftParser

Parser for blank line nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a blank line XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed blank line node.

class DocraftNewPageParser : public docraft::craft::IDocraftParser

Parser for manual page break nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a NewPage XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed NewPage node.

class DocraftPageNumberParser : public docraft::craft::IDocraftParser

Parser for page number nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a page number XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed page number node.

class DocraftSettingsParser : public docraft::craft::IDocraftParser

Parser for settings nodes.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a settings XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed settings node.

class DocraftHeaderParser : public docraft::craft::parser::DocraftRectangleParser

Parser for header sections.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a header XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed header node.

class DocraftBodyParser : public docraft::craft::parser::DocraftRectangleParser

Parser for body sections.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a body XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed body node.

class DocraftFooterParser : public docraft::craft::parser::DocraftRectangleParser

Parser for footer sections.

Public Functions

virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a footer XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed footer node.

class DocraftForeachParser : public docraft::craft::IDocraftParser

Parser for foreach nodes.

Param craft_language_source:

XML node.

Return:

Parsed foreach node.

Public Functions

DocraftForeachParser(DocraftCraftLanguageParser *craft_language_parser)
virtual std::shared_ptr<model::DocraftNode> parse(const pugi::xml_node &craft_language_source) override

Parses a foreach XML node.

Parameters:

craft_language_source – XML node.

Returns:

Parsed foreach node.