slweb

Једноставни генератор статичких веб страна
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 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:
MTODO | 2++
Mindex.html | 16++++++++--------
Mslweb.1.in | 4+++-
Mslweb.c | 10+++++++---
измењених датотека: 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 &lt;/html&gt; </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 &lt;<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++;