чување 2b945828e88657fbd71e6ecd13e89897877a31c9
родитељ 0ff23c0fb2888a8c94c3789da1d7a2005e2dd88a
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Thu, 8 Apr 2021 10:54:05 +0200
Added id attributes in headings
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 4, додавања: 20(+), брисања: 12(-)
diff --git a/TODO b/TODO
@@ -20,6 +20,8 @@
[x] Add horizontal rule support
+ [ ] Investigate multiline links
+
Legend
------
diff --git a/index.html b/index.html
@@ -28,12 +28,12 @@
</head>
<body>
<main>
-<h1>slweb</h1>
+<h1 id="heading-1">slweb</h1>
<p><strong>Slweb</strong> is a static website generator which aims at being simplistic. It
transforms custom Markdown-like syntax into HTML.</p>
-<h2>Prerequisites</h2>
+<h2 id="heading-2">Prerequisites</h2>
<p>Aside from the obvious (a C compiler, by default <strong>GNU C</strong>), slweb requires GNU
<a href="https://www.gnu.org/software/libunistring/">libunistring</a>, <strong>realpath</strong>(1) to determine paths in local links
@@ -42,7 +42,7 @@ and <strong>groff</strong>(1) and <strong>gzip</strong>(1) to create and compres
<code>{git-log}</code>. <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>KaTeX</mtext></mrow><annotation encoding="application/x-tex">\KaTeX</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.89883em;vertical-align:-0.2155em;"></span><span class="mord text"><span class="mord textrm">K</span><span class="mspace" style="margin-right:-0.17em;"></span><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.68333em;"><span style="top:-2.904999em;"><span class="pstrut" style="height:2.7em;"></span><span class="mord"><span class="mord textrm mtight sizing reset-size6 size3">A</span></span></span></span></span></span><span class="mspace" style="margin-right:-0.15em;"></span><span class="mord text"><span class="mord textrm">T</span><span class="mspace" style="margin-right:-0.1667em;"></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.46782999999999997em;"><span style="top:-2.7845em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord textrm">E</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.2155em;"><span></span></span></span></span><span class="mspace" style="margin-right:-0.125em;"></span><span class="mord textrm">X</span></span></span></span></span></span> (<a href="https://katex.org">https://katex.org</a>) is optionally used for math
mode.</p>
-<h2>Install</h2>
+<h2 id="heading-3">Install</h2>
<pre>
$ git clone https://git.sr.ht/~strahinja/slweb
@@ -73,7 +73,7 @@ $ SLWEB_CC=tcc redo -j10
<p>In the case of <strong>tcc</strong>, the tradeoff is that the debug information is limited
compared to <strong>gcc</strong>, but the compilation time is significantly shorter.</p>
-<h2>Examples</h2>
+<h2 id="heading-4">Examples</h2>
<p>See the <a href="https://git.sr.ht/~strahinja/slweb/tree/master/item/examples"><code>examples/</code></a> directory in this repository.</p>
@@ -123,18 +123,18 @@ $ slweb index.slw > index.html
</html>
</pre>
-<h2>TODO (checklist)</h2>
+<h2 id="heading-5">TODO (checklist)</h2>
<p>See the file <a href="https://git.sr.ht/~strahinja/slweb/tree/master/item/TODO"><code>TODO</code></a> for more information.</p>
-<h2>Bugs and limitations</h2>
+<h2 id="heading-6">Bugs and limitations</h2>
<p>Bugs can be reported using the <a href="https://sr.ht/~strahinja/slweb/trackers">ticket tracker</a>. See the manpage (<code>man
slweb</code>) after installing <strong>slweb</strong> for more information.</p>
-<h2>License</h2>
+<h2 id="heading-7">License</h2>
<p>slweb - Simple static website generator.<br />
Copyright (C) 2020, 2021 Страхиња Радић</p>
@@ -153,7 +153,7 @@ this program. If not, see <<a href="https://www.gnu.org/licenses">https://www
<div id="git-log">
Previous commit:
-index.slw d15fcda 2021-03-29 09:52:46 +0200 (Страхиња Радић) (HEAD -> master)
+index.slw 0ff23c0 2021-04-07 15:32:22 +0200 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD)
</div><!--git-log-->
diff --git a/slweb.1.in b/slweb.1.in
@@ -206,7 +206,9 @@ encounters both footnote types in the same document, a warning will be issued to
.BR Headings .
A line starting with \fC#\fP followed by space will be put inside
\fC<h?></h?>\fP, where \fC?\fP stands for 1-4, depending on the number of
-hash signs.
+hash signs. Tags will have \fCid\fP attributes set to \fCh\f[CI]?\fR, with
+\f[CI]?\fP set to the number representing its position within the list of all
+headings.
.
.IP \[bu]
.BR "Horizontal rules" .
diff --git a/slweb.c b/slweb.c
@@ -483,9 +483,10 @@ print_meta_var(FILE* output, uint8_t** csv_header, uint8_t** csv_register)
}
int
-process_heading_start(FILE* output, UBYTE heading_level)
+process_heading_start(FILE* output, UBYTE heading_level, ULONG* heading_count)
{
- print_output(output, "<h%d>", heading_level);
+ (*heading_count)++;
+ print_output(output, "<h%d id=\"heading-%lu\">", heading_level, *heading_count);
output_firstcol = FALSE;
return 0;
}
@@ -2190,6 +2191,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
size_t link_size = 0;
uint8_t* link_macro = NULL;
UBYTE heading_level = 0;
+ ULONG heading_count = 0;
BOOL end_tag = FALSE;
BOOL first_line_in_doc = TRUE;
BOOL skip_change_first_line_in_doc = FALSE;
@@ -2235,6 +2237,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
plinks = links;
pfootnotes = footnotes;
lineno = 0;
+ heading_count = 0;
if (!read_yaml_macros_and_links && !body_only)
{
@@ -2793,7 +2796,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
if ((state & ST_HEADING) && !(state & ST_HEADING_TEXT))
{
if (!read_yaml_macros_and_links)
- process_heading_start(output, heading_level);
+ process_heading_start(output, heading_level,
+ &heading_count);
state |= ST_HEADING_TEXT;
pline++;
colno++;