Markwon/docs/v4/html/index.html
Dimitry Ivanov b00d0efa9d deploy
2021-01-12 12:50:41 +03:00

175 lines
45 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>HTML | Markwon</title>
<meta name="description" content="Android markdown library based on commonmark specification that renders markdown as system-native Spannables (no WebView)">
<link rel="apple-touch-icon" sizes="180x180" href="/Markwon/apple-touch-icon.png?v=1">
<link rel="icon" type="image/png" sizes="16x16" href="/Markwon/favicon-16x16.png?v=1">
<link rel="icon" href="/Markwon/favicon.ico?v=1">
<link rel="icon" type="image/png" sizes="32x32" href="/Markwon/favicon-32x32.png?v=1">
<link rel="manifest" href="/Markwon/manifest.json?v=1">
<meta name="keywords" content="android,markdown,library,spannable,markwon,commonmark">
<link rel="preload" href="/Markwon/assets/css/0.styles.3fbbce9e.css" as="style"><link rel="preload" href="/Markwon/assets/js/app.bdfd2bc6.js" as="script"><link rel="preload" href="/Markwon/assets/js/71.c3fcfb65.js" as="script"><link rel="preload" href="/Markwon/assets/js/3.eaac0903.js" as="script"><link rel="preload" href="/Markwon/assets/js/16.076204be.js" as="script"><link rel="preload" href="/Markwon/assets/js/9.7d018a47.js" as="script"><link rel="prefetch" href="/Markwon/assets/js/42.d7ca0851.js"><link rel="prefetch" href="/Markwon/assets/js/2.81714ae9.js"><link rel="prefetch" href="/Markwon/assets/js/4.31fa5321.js"><link rel="prefetch" href="/Markwon/assets/js/5.6234b6a3.js"><link rel="prefetch" href="/Markwon/assets/js/6.ef59e46d.js"><link rel="prefetch" href="/Markwon/assets/js/7.e9b37c71.js"><link rel="prefetch" href="/Markwon/assets/js/8.9dff76ac.js"><link rel="prefetch" href="/Markwon/assets/js/10.99fc608c.js"><link rel="prefetch" href="/Markwon/assets/js/11.cdc173e9.js"><link rel="prefetch" href="/Markwon/assets/js/12.98308542.js"><link rel="prefetch" href="/Markwon/assets/js/13.83b81b01.js"><link rel="prefetch" href="/Markwon/assets/js/14.0e5fe31e.js"><link rel="prefetch" href="/Markwon/assets/js/15.724f3dc4.js"><link rel="prefetch" href="/Markwon/assets/js/17.9412daf3.js"><link rel="prefetch" href="/Markwon/assets/js/18.187f0167.js"><link rel="prefetch" href="/Markwon/assets/js/19.af3507a7.js"><link rel="prefetch" href="/Markwon/assets/js/20.dc11e22f.js"><link rel="prefetch" href="/Markwon/assets/js/21.393a507f.js"><link rel="prefetch" href="/Markwon/assets/js/22.a6ac92c5.js"><link rel="prefetch" href="/Markwon/assets/js/23.9edcc0b3.js"><link rel="prefetch" href="/Markwon/assets/js/24.073942b3.js"><link rel="prefetch" href="/Markwon/assets/js/25.507307eb.js"><link rel="prefetch" href="/Markwon/assets/js/26.87c7e366.js"><link rel="prefetch" href="/Markwon/assets/js/27.a6f7a96f.js"><link rel="prefetch" href="/Markwon/assets/js/28.c0caacb4.js"><link rel="prefetch" href="/Markwon/assets/js/29.230c7321.js"><link rel="prefetch" href="/Markwon/assets/js/30.45e92827.js"><link rel="prefetch" href="/Markwon/assets/js/31.3a2ff699.js"><link rel="prefetch" href="/Markwon/assets/js/32.662e2ab9.js"><link rel="prefetch" href="/Markwon/assets/js/33.d83b2cb7.js"><link rel="prefetch" href="/Markwon/assets/js/34.4b19ef85.js"><link rel="prefetch" href="/Markwon/assets/js/35.1684da38.js"><link rel="prefetch" href="/Markwon/assets/js/36.9852715d.js"><link rel="prefetch" href="/Markwon/assets/js/37.e98b3352.js"><link rel="prefetch" href="/Markwon/assets/js/38.09771599.js"><link rel="prefetch" href="/Markwon/assets/js/39.37003a65.js"><link rel="prefetch" href="/Markwon/assets/js/40.bf595a01.js"><link rel="prefetch" href="/Markwon/assets/js/41.db50f781.js"><link rel="prefetch" href="/Markwon/assets/js/43.78500964.js"><link rel="prefetch" href="/Markwon/assets/js/44.60fec7f9.js"><link rel="prefetch" href="/Markwon/assets/js/45.78224b99.js"><link rel="prefetch" href="/Markwon/assets/js/46.9a7f306b.js"><link rel="prefetch" href="/Markwon/assets/js/47.42b56911.js"><link rel="prefetch" href="/Markwon/assets/js/48.cceb75d4.js"><link rel="prefetch" href="/Markwon/assets/js/49.20507df8.js"><link rel="prefetch" href="/Markwon/assets/js/50.f89d88b1.js"><link rel="prefetch" href="/Markwon/assets/js/51.d7ac54ce.js"><link rel="prefetch" href="/Markwon/assets/js/52.394ded4e.js"><link rel="prefetch" href="/Markwon/assets/js/53.144cf408.js"><link rel="prefetch" href="/Markwon/assets/js/54.0f936c4f.js"><link rel="prefetch" href="/Markwon/assets/js/55.5b7382a9.js"><link rel="prefetch" href="/Markwon/assets/js/56.1cf2f788.js"><link rel="prefetch" href="/Markwon/assets/js/57.1b7dddc1.js"><link rel="prefetch" href="/Markwon/assets/js/58.5271aaaf.js"><link rel="prefetch" href="/Markwon/assets/js/59.7ef6ac9a.js"><link rel="prefetch" href="/Markwon/assets/js/60.9bbfa80f.js"><link rel="prefetch" href="/Markwon/assets/js/61.628c1500.js"><link rel="prefetch" href="/Markwon/assets/js/62.d4d206d7.js"><link rel="prefetch" href="/Markwon/assets/js/63.8ccf8bfc.js"><link rel="prefetch" href="/Markwon/assets/js/64.7672a52b.js"><link rel="prefetch" href="/Markwon/assets/js/65.c4f000dc.js"><link rel="prefetch" href="/Markwon/assets/js/66.4a29728a.js"><link rel="prefetch" href="/Markwon/assets/js/67.7331c7c7.js"><link rel="prefetch" href="/Markwon/assets/js/68.9d1d2ae1.js"><link rel="prefetch" href="/Markwon/assets/js/69.fd31295a.js"><link rel="prefetch" href="/Markwon/assets/js/70.fac8f892.js"><link rel="prefetch" href="/Markwon/assets/js/72.d2389fc9.js"><link rel="prefetch" href="/Markwon/assets/js/73.6ce21170.js"><link rel="prefetch" href="/Markwon/assets/js/74.2ad91074.js"><link rel="prefetch" href="/Markwon/assets/js/75.1d59d27c.js"><link rel="prefetch" href="/Markwon/assets/js/76.f3844391.js"><link rel="prefetch" href="/Markwon/assets/js/77.4e5a82c3.js"><link rel="prefetch" href="/Markwon/assets/js/78.ff7203ee.js"><link rel="prefetch" href="/Markwon/assets/js/79.b1718a0d.js"><link rel="prefetch" href="/Markwon/assets/js/80.802db0eb.js"><link rel="prefetch" href="/Markwon/assets/js/81.9edd3cd9.js"><link rel="prefetch" href="/Markwon/assets/js/82.52f04a34.js"><link rel="prefetch" href="/Markwon/assets/js/83.3bd397c0.js"><link rel="prefetch" href="/Markwon/assets/js/84.a9af8a34.js"><link rel="prefetch" href="/Markwon/assets/js/85.2a0d8d40.js">
<link rel="stylesheet" href="/Markwon/assets/css/0.styles.3fbbce9e.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/Markwon/" class="home-link router-link-active"><!----> <span class="site-name">Markwon</span></a> <div class="links" style="max-width:nullpx;"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/Markwon/docs/v4/install.html" class="nav-link">Install</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">API Version</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>Latest</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/Markwon/" class="nav-link">4.x.x</a></li></ul></li><li class="dropdown-item"><h4>Legacy</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/Markwon/docs/v3/install.html" class="nav-link">3.x.x</a></li><li class="dropdown-subitem"><a href="/Markwon/docs/v2/" class="nav-link">2.x.x</a></li></ul></li></ul></div></div><div class="nav-item"><a href="https://github.com/noties/Markwon/blob/master/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="nav-link external">
Changelog
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div><div class="nav-item"><a href="https://github.com/noties/Markwon" target="_blank" rel="noopener noreferrer" class="nav-link external">
Github
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/Markwon/docs/v4/install.html" class="nav-link">Install</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">API Version</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>Latest</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/Markwon/" class="nav-link">4.x.x</a></li></ul></li><li class="dropdown-item"><h4>Legacy</h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/Markwon/docs/v3/install.html" class="nav-link">3.x.x</a></li><li class="dropdown-subitem"><a href="/Markwon/docs/v2/" class="nav-link">2.x.x</a></li></ul></li></ul></div></div><div class="nav-item"><a href="https://github.com/noties/Markwon/blob/master/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="nav-link external">
Changelog
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div><div class="nav-item"><a href="https://github.com/noties/Markwon" target="_blank" rel="noopener noreferrer" class="nav-link external">
Github
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav> <ul class="sidebar-links"><li><a href="/Markwon/" class="sidebar-link">Introduction</a></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Core</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/Markwon/docs/v4/core/getting-started.html" class="sidebar-link">Getting started</a></li><li><a href="/Markwon/docs/v4/core/plugins.html" class="sidebar-link">Plugins</a></li><li><a href="/Markwon/docs/v4/core/registry.html" class="sidebar-link">Registry</a></li><li><a href="/Markwon/docs/v4/core/theme.html" class="sidebar-link">Theme</a></li><li><a href="/Markwon/docs/v4/core/configuration.html" class="sidebar-link">Configuration</a></li><li><a href="/Markwon/docs/v4/core/visitor.html" class="sidebar-link">Visitor</a></li><li><a href="/Markwon/docs/v4/core/spans-factory.html" class="sidebar-link">Spans Factory</a></li><li><a href="/Markwon/docs/v4/core/core-plugin.html" class="sidebar-link">Core plugin</a></li><li><a href="/Markwon/docs/v4/core/movement-method-plugin.html" class="sidebar-link">Movement method plugin</a></li><li><a href="/Markwon/docs/v4/core/render-props.html" class="sidebar-link">RenderProps</a></li><li><a href="/Markwon/docs/v4/core/text-setter.html" class="sidebar-link">TextSetter</a></li></ul></div></li><li><a href="/Markwon/docs/v4/editor/" class="sidebar-link">Editor</a></li><li><a href="/Markwon/docs/v4/ext-latex/" class="sidebar-link">LaTeX extension</a></li><li><a href="/Markwon/docs/v4/ext-strikethrough/" class="sidebar-link">Strikethrough extension</a></li><li><a href="/Markwon/docs/v4/ext-tables/" class="sidebar-link">Tables extension</a></li><li><a href="/Markwon/docs/v4/ext-tasklist/" class="sidebar-link">Task list extension</a></li><li><a href="/Markwon/docs/v4/html/" class="active sidebar-link">HTML</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/Markwon/docs/v4/html/#predefined-taghandlers" class="sidebar-link">Predefined TagHandlers</a></li><li class="sidebar-sub-header"><a href="/Markwon/docs/v4/html/#taghandler" class="sidebar-link">TagHandler</a></li></ul></li><li><a href="/Markwon/docs/v4/image/" class="sidebar-link">Image</a></li><li><a href="/Markwon/docs/v4/image-coil/" class="sidebar-link">Image Coil</a></li><li><a href="/Markwon/docs/v4/image-glide/" class="sidebar-link">Image Glide</a></li><li><a href="/Markwon/docs/v4/image-picasso/" class="sidebar-link">Image Picasso</a></li><li><a href="/Markwon/docs/v4/inline-parser/" class="sidebar-link">Inline Parser</a></li><li><a href="/Markwon/docs/v4/linkify/" class="sidebar-link">Linkify</a></li><li><a href="/Markwon/docs/v4/recycler/" class="sidebar-link">Recycler</a></li><li><a href="/Markwon/docs/v4/recycler-table/" class="sidebar-link">Recycler Table</a></li><li><a href="/Markwon/docs/v4/simple-ext/" class="sidebar-link">Simple Extension</a></li><li><a href="/Markwon/docs/v4/syntax-highlight/" class="sidebar-link">Syntax highlight</a></li><li><a href="/Markwon/docs/v4/recipes.html" class="sidebar-link">Recipes</a></li></ul> </div> <div class="page"> <div class="content"><h1 id="html"><a href="#html" aria-hidden="true" class="header-anchor">#</a> HTML</h1> <a href="http://search.maven.org/#search|ga|1|g%3A%22io.noties.markwon%22%20AND%20a%3A%22html%22"><img src="https://img.shields.io/maven-central/v/io.noties.markwon/html.svg?label=html" alt="html"></a> <p>This artifact encapsulates HTML parsing from the core artifact and provides
few predefined <code>TagHandlers</code></p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">final</span> Markwon markwon <span class="token operator">=</span> Markwon<span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span>context<span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>As this artifact brings modified <a href="https://github.com/jhy/jsoup" target="_blank" rel="noopener noreferrer">jsoup<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a> library
it was moved to a standalone module in order to minimize dependencies and unused code
in applications that does not require HTML render capabilities.</p> <p>Before <span class="badge tip top" data-v-099ab69c>2.0.0</span> <code>Markwon</code> used android <code>Html</code> class for parsing and
rendering. Unfortunately, according to markdown specification, markdown can contain
HTML in <em>unpredictable</em> way if rendered <em>outside</em> of browser. For example:</p> <div class="language-markdown extra-class"><div class="highlight-lines"><br><br><br><div class="highlighted"> </div><br></div><pre class="language-markdown"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>i</span><span class="token punctuation">&gt;</span></span>
Hello from italics tag
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>i</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>b</span><span class="token punctuation">&gt;</span></span>bold&gt;<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>b</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>This snippet could be represented as:</p> <ul><li>HtmlBlock (<code>&lt;i&gt;\nHello from italics tag</code>)</li> <li>HtmlInline (<code>&lt;i&gt;</code>)</li> <li>HtmlInline (<code>&lt;b&gt;</code>)</li> <li>Text (<code>bold</code>)</li> <li>HtmlInline (<code>&lt;/b&gt;</code>)</li></ul> <div class="tip custom-block"><p class="custom-block-title">A bit of background</p> <br> <a href="https://github.com/noties/Markwon/issues/52" target="_blank" rel="noopener noreferrer">This issue<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a> had brought attention to differences between HTML &amp; commonmark implementations. <br><br></div> <p>Unfortunately Android <code>HTML</code> class cannot parse a <em>fragment</em> of HTML to later
be included in a bigger set of content. This is why the decision was made to bring
HTML parsing <em>in-markwon-house</em></p> <h2 id="predefined-taghandlers"><a href="#predefined-taghandlers" aria-hidden="true" class="header-anchor">#</a> Predefined TagHandlers</h2> <ul><li><code>&lt;img&gt;</code></li> <li><code>&lt;a&gt;</code></li> <li><code>&lt;blockquote&gt;</code></li> <li><code>&lt;sub&gt;</code></li> <li><code>&lt;sup&gt;</code></li> <li><code>&lt;b&gt;, &lt;strong&gt;</code></li> <li><code>&lt;s&gt;, &lt;del&gt;</code></li> <li><code>&lt;u&gt;, &lt;ins&gt;</code></li> <li><code>&lt;ul&gt;, &lt;ol&gt;</code></li> <li><code>&lt;i&gt;, &lt;cite&gt;, &lt;em&gt;, &lt;dfn&gt;</code></li> <li><code>&lt;h1&gt;, &lt;h2&gt;, &lt;h3&gt;, &lt;h4&gt;, &lt;h5&gt;, &lt;h6&gt;</code></li></ul> <div class="tip custom-block"><p class="custom-block-title">TIP</p> <p>All predefined tag handlers will use styling spans for native markdown content.
So, if your <code>Markwon</code> instance was configured to, for example, render Emphasis
nodes as a <span style="color: #FF0000">red text</span> then HTML tag handler will
use the same span. This includes images, links, UrlResolver, LinkProcessor, etc</p></div> <hr> <p>Staring with <span class="badge tip top" data-v-099ab69c>4.0.0</span> you can exclude all default tag handlers:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">HtmlPlugin<span class="token punctuation">.</span>HtmlConfigure</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">configureHtml</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> HtmlPlugin plugin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
plugin<span class="token punctuation">.</span><span class="token function">excludeDefaults</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre></div><p>or via plugin:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AbstractMarkwonPlugin</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">configure</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> Registry registry<span class="token punctuation">)</span> <span class="token punctuation">{</span>
registry<span class="token punctuation">.</span><span class="token function">require</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Action</span><span class="token generics function"><span class="token punctuation">&lt;</span>HtmlPlugin<span class="token punctuation">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">apply</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> HtmlPlugin htmlPlugin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
htmlPlugin<span class="token punctuation">.</span><span class="token function">excludeDefaults</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre></div><p>If you wish to exclude some of them <code>TagHandlerNoOp</code> can be used:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">HtmlPlugin<span class="token punctuation">.</span>HtmlConfigure</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">configureHtml</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> HtmlPlugin plugin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
plugin<span class="token punctuation">.</span><span class="token function">addHandler</span><span class="token punctuation">(</span>TagHandlerNoOp<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token string">&quot;h4&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;h5&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;h6&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;img&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre></div><h2 id="taghandler"><a href="#taghandler" aria-hidden="true" class="header-anchor">#</a> TagHandler</h2> <p>To define a tag-handler that applies style for the whole tag content (from start to end),
a <code>SimpleTagHandler</code> can be used. For example, let's define <code>&lt;align&gt;</code> tag, which can be used
like this:</p> <ul><li><code>&lt;align center&gt;centered text&lt;/align&gt;</code></li> <li><code>&lt;align end&gt;this should be aligned at the end (right for LTR locales)&lt;/align&gt;</code></li> <li><code>&lt;align&gt;regular alignment&lt;/align&gt;</code></li></ul> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AlignTagHandler</span> <span class="token keyword">extends</span> <span class="token class-name">SimpleTagHandler</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Nullable</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> Object <span class="token function">getSpans</span><span class="token punctuation">(</span>
<span class="token annotation punctuation">@NonNull</span> MarkwonConfiguration configuration<span class="token punctuation">,</span>
<span class="token annotation punctuation">@NonNull</span> RenderProps renderProps<span class="token punctuation">,</span>
<span class="token annotation punctuation">@NonNull</span> HtmlTag tag<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">final</span> Layout<span class="token punctuation">.</span>Alignment alignment<span class="token punctuation">;</span>
<span class="token comment">// html attribute without value, &lt;align center&gt;&lt;/align&gt;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>tag<span class="token punctuation">.</span><span class="token function">attributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span><span class="token string">&quot;center&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
alignment <span class="token operator">=</span> Layout<span class="token punctuation">.</span>Alignment<span class="token punctuation">.</span>ALIGN_CENTER<span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>tag<span class="token punctuation">.</span><span class="token function">attributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span><span class="token string">&quot;end&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
alignment <span class="token operator">=</span> Layout<span class="token punctuation">.</span>Alignment<span class="token punctuation">.</span>ALIGN_OPPOSITE<span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token comment">// empty value or any other will make regular alignment</span>
alignment <span class="token operator">=</span> Layout<span class="token punctuation">.</span>Alignment<span class="token punctuation">.</span>ALIGN_NORMAL<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">AlignmentSpan<span class="token punctuation">.</span>Standard</span><span class="token punctuation">(</span>alignment<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@NonNull</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> Collection<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">&gt;</span></span> <span class="token function">supportedTags</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> Collections<span class="token punctuation">.</span><span class="token function">singleton</span><span class="token punctuation">(</span><span class="token string">&quot;align&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><div class="tip custom-block"><p class="custom-block-title">TIP</p> <p><code>SimpleTagHandler</code> can return an array of spans from <code>getSpans</code> method</p></div> <p>Then register <code>AlignTagHandler</code>:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">final</span> Markwon markwon <span class="token operator">=</span> Markwon<span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AbstractMarkwonPlugin</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">configure</span><span class="token punctuation">(</span><span class="token annotation punctuation">@NonNull</span> Registry registry<span class="token punctuation">)</span> <span class="token punctuation">{</span>
registry<span class="token punctuation">.</span><span class="token function">require</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> htmlPlugin <span class="token operator">-</span><span class="token operator">&gt;</span> htmlPlugin
<span class="token punctuation">.</span><span class="token function">addHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AlignTagHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>or directly on <code>HtmlPlugin</code>:</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">final</span> Markwon markwon <span class="token operator">=</span> Markwon<span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">usePlugin</span><span class="token punctuation">(</span>HtmlPlugin<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span>plugin <span class="token operator">-</span><span class="token operator">&gt;</span> plugin<span class="token punctuation">.</span><span class="token function">addHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">AlignTagHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><hr> <p>If a tag requires special handling <code>TagHandler</code> can be used directly. For example
let's define an <code>&lt;enhance&gt;</code> tag with <code>start</code> and <code>end</code> arguments, that will mark
start and end positions of the text that needs to be enlarged:</p> <div class="language-html extra-class"><pre class="language-html"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enhance</span> <span class="token attr-name">start</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>5<span class="token punctuation">&quot;</span></span> <span class="token attr-name">end</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>12<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>This is text that must be enhanced, at least a part of it<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enhance</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">EnhanceTagHandler</span> <span class="token keyword">extends</span> <span class="token class-name">TagHandler</span> <span class="token punctuation">{</span>
<span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token keyword">int</span> enhanceTextSize<span class="token punctuation">;</span>
<span class="token function">EnhanceTagHandler</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Px</span> <span class="token keyword">int</span> enhanceTextSize<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>enhanceTextSize <span class="token operator">=</span> enhanceTextSize<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">handle</span><span class="token punctuation">(</span>
<span class="token annotation punctuation">@NonNull</span> MarkwonVisitor visitor<span class="token punctuation">,</span>
<span class="token annotation punctuation">@NonNull</span> MarkwonHtmlRenderer renderer<span class="token punctuation">,</span>
<span class="token annotation punctuation">@NonNull</span> HtmlTag tag<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// we require start and end to be present</span>
<span class="token keyword">final</span> <span class="token keyword">int</span> start <span class="token operator">=</span> <span class="token function">parsePosition</span><span class="token punctuation">(</span>tag<span class="token punctuation">.</span><span class="token function">attributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">&quot;start&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">final</span> <span class="token keyword">int</span> end <span class="token operator">=</span> <span class="token function">parsePosition</span><span class="token punctuation">(</span>tag<span class="token punctuation">.</span><span class="token function">attributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">&quot;end&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>start <span class="token operator">&gt;</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">&amp;&amp;</span> end <span class="token operator">&gt;</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
visitor<span class="token punctuation">.</span><span class="token function">builder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">setSpan</span><span class="token punctuation">(</span>
<span class="token keyword">new</span> <span class="token class-name">AbsoluteSizeSpan</span><span class="token punctuation">(</span>enhanceTextSize<span class="token punctuation">)</span><span class="token punctuation">,</span>
tag<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> start<span class="token punctuation">,</span>
tag<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> end
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token annotation punctuation">@NonNull</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> Collection<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">&gt;</span></span> <span class="token function">supportedTags</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> Collections<span class="token punctuation">.</span><span class="token function">singleton</span><span class="token punctuation">(</span><span class="token string">&quot;enhance&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">int</span> <span class="token function">parsePosition</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Nullable</span> String value<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">int</span> position<span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>TextUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
position <span class="token operator">=</span> Integer<span class="token punctuation">.</span><span class="token function">parseInt</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">NumberFormatException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
position <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
position <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> position<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div></div> <div class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">6/24/2019, 1:47:44 PM</span></div></div> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/Markwon/docs/v4/ext-tasklist/" class="prev">
Task list extension
</a></span> <span class="next"><a href="/Markwon/docs/v4/image/">
Image
</a>
</span></p></div> </div> <!----></div></div>
<script src="/Markwon/assets/js/71.c3fcfb65.js" defer></script><script src="/Markwon/assets/js/3.eaac0903.js" defer></script><script src="/Markwon/assets/js/16.076204be.js" defer></script><script src="/Markwon/assets/js/9.7d018a47.js" defer></script><script src="/Markwon/assets/js/app.bdfd2bc6.js" defer></script>
</body>
</html>