MD::details::HtmlVisitor Class

class MD::details::HtmlVisitor

HTML visitor interface to walk through the MD:Document. More...

Header: #include <md4qt/html.h>
CMake: find_package(md4qt REQUIRED COMPONENTS md4qt)
target_link_libraries(mytarget PRIVATE md4qt::md4qt)
Inherits: MD::Visitor

Public Functions

HtmlVisitor()
virtual QString toHtml(QSharedPointer<MD::Document> doc, const QString &footnoteBackLinkContent, bool wrappedInArticle = true, const MD::details::IdsMap *idsMap = nullptr)

Protected Types

Protected Functions

virtual void closeStyle(const typename MD::ItemWithOpts::Styles &styles)
virtual QString getId(MD::Item *item) const
virtual QString headingIdToHtml(MD::Heading *h)
virtual void onFootnotes(const QString &footnoteBackLinkContent)
virtual void onHeading(MD::Heading *h, const QString &ht)
virtual void openStyle(const typename MD::ItemWithOpts::Styles &styles)
virtual QString prepareTextForHtml(const QString &t)
virtual void printId(MD::Item *item)
virtual QString tableAlignmentToHtml(typename MD::Table::Alignment a)

Reimplemented Protected Functions

virtual void onAddLineEnding() override
virtual void onAnchor(MD::Anchor *a) override
virtual void onBlockquote(MD::Blockquote *b) override
virtual void onCode(MD::Code *c) override
virtual void onFootnoteRef(MD::FootnoteRef *ref) override
virtual void onHeading(MD::Heading *h) override
virtual void onHorizontalLine(MD::HorizontalLine *) override
virtual void onImage(MD::Image *i) override
virtual void onInlineCode(MD::Code *c) override
virtual void onLineBreak(MD::LineBreak *) override
virtual void onLink(MD::Link *l) override
virtual void onList(MD::List *l) override
virtual void onListItem(MD::ListItem *i, bool first, bool skipOpeningWrap = false) override
virtual void onMath(MD::Math *m) override
virtual void onParagraph(MD::Paragraph *p, bool wrap, bool skipOpeningWrap = false) override
virtual void onRawHtml(MD::RawHtml *h) override
virtual void onTable(MD::Table *t) override
virtual void onText(MD::Text *t) override

Protected Variables

bool m_dontIncrementFootnoteCount
QVector<MD::details::HtmlVisitor::FootnoteRefStuff> m_fns
QString m_html
const MD::details::IdsMap *m_idsMap
bool m_isWrappedInArticle
bool m_justCollectFootnoteRefs

Detailed Description

This is visitor to convert Markdown document to HTML string. This class is highly customizable, absolutelly everything may be overriden, all data members are protected so a developer won't have problems with customizaion.

As example of customization have a look at the following code.

class HtmlVisitor : public MD::details::HtmlVisitor<MD::QStringTrait>
{
protected:
    QString prepareTextForHtml(const QString &t) override
    {
        auto tmp = MD::details::HtmlVisitor<MD::QStringTrait>::prepareTextForHtml(t);
        tmp.replace(QLatin1Char('$'), QStringLiteral("<span>$</span>"));

        return tmp;
    }
};

In this example we convert $ character to <span>$</span> when inserting string to HTML. This is needed to disable processing of $ character in HTML as start/end of LaTeX equation by some JavaScript, like KaTeX, to prevent wrong rendering of standalone $ character.

MD::details::HtmlVisitor doesn't do this protection, so if in your case you use rendering of LaTeX math equation and enframe them by $ character in HTML, you will need something like the above example.

Member Function Documentation

[constexpr noexcept] HtmlVisitor::HtmlVisitor()

Default constructor.

[virtual protected] void HtmlVisitor::closeStyle(const typename MD::ItemWithOpts::Styles &styles)

Insert into HTML tags for closing styles.

styles Styles.

[virtual protected] QString HtmlVisitor::getId(MD::Item *item) const

Returns ID of item if it's set.

item Item.

[virtual protected] QString HtmlVisitor::headingIdToHtml(MD::Heading *h)

Returns HTML content for heading's ID.

h Heading.

[override virtual protected] void HtmlVisitor::onAddLineEnding()

Reimplements: Visitor::onAddLineEnding().

Handle new line in HTML.

[override virtual protected] void HtmlVisitor::onAnchor(MD::Anchor *a)

Reimplements: Visitor::onAnchor(MD::Anchor *a).

Handle anchor.

a Anchor.

[override virtual protected] void HtmlVisitor::onBlockquote(MD::Blockquote *b)

Reimplements: Visitor::onBlockquote(MD::Blockquote *b).

Handle blockquote.

b Blockquote.

[override virtual protected] void HtmlVisitor::onCode(MD::Code *c)

Reimplements: Visitor::onCode(MD::Code *c).

Handle code block.

c Code.

[override virtual protected] void HtmlVisitor::onFootnoteRef(MD::FootnoteRef *ref)

Reimplements: Visitor::onFootnoteRef(MD::FootnoteRef *ref).

Handle footnote reference.

ref Footnote reference.

[virtual protected] void HtmlVisitor::onFootnotes(const QString &footnoteBackLinkContent)

Handle footnotes.

footnoteBackLinkContent String that will be applied as content of back link from footnote. As an example, you can use "<img src="..." />".

[override virtual protected] void HtmlVisitor::onHeading(MD::Heading *h)

Reimplements: Visitor::onHeading(MD::Heading *h).

Handle heading.

h Heading.

[virtual protected] void HtmlVisitor::onHeading(MD::Heading *h, const QString &ht)

Handle heading.

h Heading.

ht Heading tag.

[override virtual protected] void HtmlVisitor::onHorizontalLine(MD::HorizontalLine *)

Reimplements: Visitor::onHorizontalLine(MD::HorizontalLine *l).

Handle horizontal line.

[override virtual protected] void HtmlVisitor::onImage(MD::Image *i)

Reimplements: Visitor::onImage(MD::Image *i).

Handle image.

i Image.

[override virtual protected] void HtmlVisitor::onInlineCode(MD::Code *c)

Reimplements: Visitor::onInlineCode(MD::Code *c).

Handle inline code.

c Code.

[override virtual protected] void HtmlVisitor::onLineBreak(MD::LineBreak *)

Reimplements: Visitor::onLineBreak(MD::LineBreak *b).

Handle line break.

Reimplements: Visitor::onLink(MD::Link *l).

Handle link.

l Link.

[override virtual protected] void HtmlVisitor::onList(MD::List *l)

Reimplements: Visitor::onList(MD::List *l).

Handle list.

l List.

[override virtual protected] void HtmlVisitor::onListItem(MD::ListItem *i, bool first, bool skipOpeningWrap = false)

Reimplements: Visitor::onListItem(MD::ListItem *i, bool first, bool skipOpeningWrap).

Handle list item.

i List item.

first Is this item first in the list?

skipOpeningWrap Indicates that opening wrap should be added or no.

[override virtual protected] void HtmlVisitor::onMath(MD::Math *m)

Reimplements: Visitor::onMath(MD::Math *m).

Handle LaTeX math expression.

m Math.

[override virtual protected] void HtmlVisitor::onParagraph(MD::Paragraph *p, bool wrap, bool skipOpeningWrap = false)

Reimplements: Visitor::onParagraph(MD::Paragraph *p, bool wrap, bool skipOpeningWrap).

Handle paragraph.

p Paragraph.

wrap Wrap this paragraph with something or no? It's useful to not wrap standalone paragraph in list item, for example.

skipOpeningWrap Indicates that opening wrap should be added or no.

[override virtual protected] void HtmlVisitor::onRawHtml(MD::RawHtml *h)

Reimplements: Visitor::onRawHtml(MD::RawHtml *h).

Handle raw HTML.

h Raw HTML.

[override virtual protected] void HtmlVisitor::onTable(MD::Table *t)

Reimplements: Visitor::onTable(MD::Table *t).

Handle table.

t Table.

[override virtual protected] void HtmlVisitor::onText(MD::Text *t)

Reimplements: Visitor::onText(MD::Text *t).

Handle text item.

t Text.

[virtual protected] void HtmlVisitor::openStyle(const typename MD::ItemWithOpts::Styles &styles)

Insert into HTML tags for opening styles.

styles Styles.

[virtual protected] QString HtmlVisitor::prepareTextForHtml(const QString &t)

Prepare text to insert into HTML content.

t String.

[virtual protected] void HtmlVisitor::printId(MD::Item *item)

Append ID into HTML.

item Item.

[virtual protected] QString HtmlVisitor::tableAlignmentToHtml(typename MD::Table::Alignment a)

Returns HTML content for table alignment.

a Alignment.

[virtual] QString HtmlVisitor::toHtml(QSharedPointer<MD::Document> doc, const QString &footnoteBackLinkContent, bool wrappedInArticle = true, const MD::details::IdsMap *idsMap = nullptr)

Walk through the document.

doc Document.

footnoteBackLinkContent String that will be applied as content of back link from footnote. As an example, you can use "<img src="..." />".

wrappedInArticle Wrap HTML with <article> tag?

idsMap Map of IDs to set to corresonding items.

Member Variable Documentation

bool HtmlVisitor::m_dontIncrementFootnoteCount

Just process footnote references and don't increment count number.

QVector<MD::details::HtmlVisitor::FootnoteRefStuff> HtmlVisitor::m_fns

Vector of processed footnotes references.

QString HtmlVisitor::m_html

HTML content.

const MD::details::IdsMap *HtmlVisitor::m_idsMap

Map of IDs to set to corresponding items.

bool HtmlVisitor::m_isWrappedInArticle

Is this HTML wrapped in artcile tag?

bool HtmlVisitor::m_justCollectFootnoteRefs

Just collect footnote references?