Skip to content

First-line-indent: fix bug with pre-existing header-includes #185

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 38 additions & 7 deletions first-line-indent/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,49 @@ DIFF ?= diff --strip-trailing-cr -u

.PHONY: test

test: test_latex test_html

test_html: sample.md expected.html first-line-indent.lua
@pandoc -s --lua-filter first-line-indent.lua --to=html $< \
test: sample.md expected.html \
sample_head-inc_1.md expected_hi_1.html expected_hi_1.tex \
sample_head-inc_2.md expected_hi_2.html expected_hi_2.tex \
sample_head-inc_3.md expected_hi_3.html expected_hi_3.tex \
first-line-indent.lua
@pandoc -s --lua-filter first-line-indent.lua --to=html sample.md \
| $(DIFF) expected.html -

test_latex: sample.md expected.tex first-line-indent.lua
@pandoc -s --lua-filter first-line-indent.lua --to=latex $< \
@pandoc -s --lua-filter first-line-indent.lua --to=latex sample.md \
| $(DIFF) expected.tex -
@pandoc -s --lua-filter first-line-indent.lua --to=html sample_head-inc_1.md \
| $(DIFF) expected_hi_1.html -
@pandoc -s --lua-filter first-line-indent.lua --to=latex sample_head-inc_1.md \
| $(DIFF) expected_hi_1.tex -
@pandoc -s --lua-filter first-line-indent.lua --to=html sample_head-inc_2.md \
| $(DIFF) expected_hi_2.html -
@pandoc -s --lua-filter first-line-indent.lua --to=latex sample_head-inc_2.md \
| $(DIFF) expected_hi_2.tex -
@pandoc -s --lua-filter first-line-indent.lua --to=html sample_head-inc_3.md \
| $(DIFF) expected_hi_3.html -
@pandoc -s --lua-filter first-line-indent.lua --to=latex sample_head-inc_3.md \
| $(DIFF) expected_hi_3.tex -

expected.html: sample.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected.tex: sample.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_1.html: sample_head-inc_1.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_1.tex: sample_head-inc_1.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_2.html: sample_head-inc_2.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_2.tex: sample_head-inc_2.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_3.html: sample_head-inc_3.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

expected_hi_3.tex: sample_head-inc_3.md first-line-indent.lua
pandoc -s --lua-filter first-line-indent.lua --output $@ $<

319 changes: 319 additions & 0 deletions first-line-indent/expected_hi_1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Sample first line indent</title>
<style>
html {
line-height: 1.5;
font-family: Georgia, serif;
font-size: 20px;
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
word-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 1em;
}
}
@media print {
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
font-size: 85%;
margin: 0;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
<style>
p {
text-indent: 2em;
margin: 0;
}
header + p {
text-indent: ;
}
:is(h1, h2, h3, h4, h5, h6) + p {
text-indent: 0;
}
:is(div.no-first-line-indent-after) + p {
text-indent: 0;
}
:is(div.first-line-indent-after) + p {
text-indent: 2em;
}
</style>
Raw header text
</head>
<body>
<header id="title-block-header">
<h1 class="title">Sample first line indent</h1>
</header>
<p>This sample tests the filter on a document with a metadata header-includes of the MetaInlines type.</p>
<p>First paragraph. In English-style typography, the first paragraph shouldn’t have a first-line indent, nor the paragraphs below headers.</p>
<p>This paragraph should start with a first-line indent. But after this quote:</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</blockquote>
<div class="no-first-line-indent-after"></div>
<p>the paragraph continues, so there should not be a first-line indent.</p>
<p>The quote below ends a paragraph:</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</blockquote>
<div class="first-line-indent-after"></div>
<p>This paragraph, then, is genuinely a new paragraph and starts with a first-line indent.</p>
<h1 id="further-tests">Further tests</h1>
<p>After a heading (in English typographic style) the paragraph does not have a first-line indent.</p>
<p>In the couple couple of paragraphs that follow the quotes below, we have manually specified <code>\noindent</code> and <code>\indent</code> respectively. This is to check that the filter doesn’t add its own commands to those.</p>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</blockquote>
<div class="no-first-line-indent-after"></div>
<p>Manually specified no first line indent.</p>
<div class="first-line-indent-after"></div>
<p>Manually specified first line ident.</p>
<p>We can also check that indent is removed after lists:</p>
<ul>
<li>A bullet</li>
<li>list</li>
</ul>
<div class="no-first-line-indent-after"></div>
<p>And after code blocks:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode lua"><code class="sourceCode lua"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> variable <span class="op">=</span> <span class="st">&quot;value&quot;</span></span></code></pre></div>
<div class="no-first-line-indent-after"></div>
<p>Or horizontal rules.</p>
<hr />
<div class="no-first-line-indent-after"></div>
<p>In this document we added a few custom filter options. The size of first-line indents is 2em instead of the standard 1em. We also added an option to remove indent after tables:</p>
<table>
<caption>Demonstration of simple table syntax.</caption>
<thead>
<tr class="header">
<th style="text-align: right;">Right</th>
<th style="text-align: left;">Left</th>
<th style="text-align: center;">Center</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: right;">12</td>
<td style="text-align: left;">12</td>
<td style="text-align: center;">12</td>
<td>12</td>
</tr>
<tr class="even">
<td style="text-align: right;">123</td>
<td style="text-align: left;">123</td>
<td style="text-align: center;">123</td>
<td>123</td>
</tr>
<tr class="odd">
<td style="text-align: right;">1</td>
<td style="text-align: left;">1</td>
<td style="text-align: center;">1</td>
<td>1</td>
</tr>
</tbody>
</table>
<div class="no-first-line-indent-after"></div>
<p>So this paragraph’s first line is not indented. And we included custom options <em>not</em> to remove ident after ordered lists and definition lists:</p>
<dl>
<dt>Definition</dt>
<dd>This is a definition block.
</dd>
</dl>
<p>This paragraph is indented.</p>
<ol type="1">
<li>An ordered</li>
<li>list</li>
</ol>
<p>This paragraph is indented.</p>
</body>
</html>
Loading