MD::details::HtmlVisitor Class
class MD::details::HtmlVisitorHTML 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
| struct | FootnoteRefStuff |
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.
[override virtual protected] void HtmlVisitor::onLink(MD::Link *l)
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?