commit f7846d7f773d80ca6e04fbfe12757841750f4c36
parent 87dd2ff6d3d7e9b644c7366a933151c3d240c5d8
Author: Jan Pobrislo <ccx@te2000.cz>
Date: Fri, 25 Apr 2025 20:43:33 +0000
Make generated spec.html tiny bit less hideous
Diffstat:
2 files changed, 83 insertions(+), 73 deletions(-)
diff --git a/doc/spec.html b/doc/spec.html
@@ -1,75 +1,80 @@
<!DOCTYPE html>
-<html><body><table>
-<tr><td>1</td><td><pre>:- use_module(library(error)).</pre></td><td rowspan="2"></td></tr>
-<tr><td>2</td><td><pre>:- use_module(library(dcg/basics)).</pre></td></tr>
-<tr><td>3</td><td><pre></pre></td><td rowspan="2"></td></tr>
-<tr><td>4</td><td><pre>:- op(950, xfx, will_be).</pre></td></tr>
-<tr><td>5</td><td><pre></pre></td><td rowspan="2"></td></tr>
-<tr><td>6</td><td><pre>%%% Basic definitions</pre></td></tr>
-<tr><td>7</td><td><pre></pre></td><td rowspan="4"></td></tr>
-<tr><td>8</td><td><pre>% apply check to value when bound</pre></td></tr>
-<tr><td>9</td><td><pre>will_be(Value, Goal) :-</pre></td></tr>
-<tr><td>10</td><td><pre> freeze(Value, assertion(call(Goal, Value))).</pre></td></tr>
-<tr><td>11</td><td><pre></pre></td><td rowspan="2"></td></tr>
-<tr><td>12</td><td><pre>byte(Value) :- must_be(between(0, 255), Value).</pre></td></tr>
-<tr><td>13</td><td><pre></pre></td><td rowspan="2"></td></tr>
-<tr><td>14</td><td><pre>nonnegative_integer(Value) :- must_be(nonneg, Value).</pre></td></tr>
-<tr><td>15</td><td><pre></pre></td><td rowspan="5"></td></tr>
-<tr><td>16</td><td><pre>sequence_of_bytes([]).</pre></td></tr>
-<tr><td>17</td><td><pre>sequence_of_bytes([First|Rest]) :-</pre></td></tr>
-<tr><td>18</td><td><pre> First will_be byte,</pre></td></tr>
-<tr><td>19</td><td><pre> Rest will_be sequence_of_bytes.</pre></td></tr>
-<tr><td>20</td><td><pre></pre></td><td rowspan="1"></td></tr>
-<tr><td>21</td><td><pre>netstring_encoding(PayloadBytes) -->gt; </pre></td><td rowspan="1">Netstring is a sequence of bytes.</td></tr>
-<tr><td>22</td><td><pre> netstring_prefix_for_payload(PayloadBytes), </pre></td><td rowspan="1">It consists of prefix,</td></tr>
-<tr><td>23</td><td><pre> PayloadBytes, </pre></td><td rowspan="1">payload,</td></tr>
-<tr><td>24</td><td><pre> `,`. </pre></td><td rowspan="5">and terminator. Terminator is single ASCII comma `,`.</td></tr>
-<tr><td>25</td><td><pre>netstring_encoding(netstring(PayloadBytes), Bytes) :-</pre></td></tr>
-<tr><td>26</td><td><pre> assertion(ground(PayloadBytes); ground(Bytes)),</pre></td></tr>
-<tr><td>27</td><td><pre> Bytes will_be sequence_of_bytes,</pre></td></tr>
-<tr><td>28</td><td><pre> phrase(netstring_encoding(PayloadBytes), Bytes).</pre></td></tr>
-<tr><td>29</td><td><pre></pre></td><td rowspan="1"></td></tr>
-<tr><td>30</td><td><pre></pre></td><td rowspan="19">Netstring prefix is the shortest ASCII decimal representation for length of
+<html><head><style type="text/css">
+ table.code_doc { border-collapse: collapse; border: 0px; }
+ table.code_doc code { white-space: pre; }
+ table.code_doc tr { vertical-align: top; }
+ table.code_doc td:hover { background-color: #3331; }
+</style></head><body><table class="code_doc">
+<tr><td>1</td><td><code>:- use_module(library(error)).</code></td><td rowspan="2"></td></tr>
+<tr><td>2</td><td><code>:- use_module(library(dcg/basics)).</code></td></tr>
+<tr><td>3</td><td><code></code></td><td rowspan="2"></td></tr>
+<tr><td>4</td><td><code>:- op(950, xfx, will_be).</code></td></tr>
+<tr><td>5</td><td><code></code></td><td rowspan="2"></td></tr>
+<tr><td>6</td><td><code>%%% Basic definitions</code></td></tr>
+<tr><td>7</td><td><code></code></td><td rowspan="4"></td></tr>
+<tr><td>8</td><td><code>% apply check to value when bound</code></td></tr>
+<tr><td>9</td><td><code>will_be(Value, Goal) :-</code></td></tr>
+<tr><td>10</td><td><code> freeze(Value, assertion(call(Goal, Value))).</code></td></tr>
+<tr><td>11</td><td><code></code></td><td rowspan="2"></td></tr>
+<tr><td>12</td><td><code>byte(Value) :- must_be(between(0, 255), Value).</code></td></tr>
+<tr><td>13</td><td><code></code></td><td rowspan="2"></td></tr>
+<tr><td>14</td><td><code>nonnegative_integer(Value) :- must_be(nonneg, Value).</code></td></tr>
+<tr><td>15</td><td><code></code></td><td rowspan="5"></td></tr>
+<tr><td>16</td><td><code>sequence_of_bytes([]).</code></td></tr>
+<tr><td>17</td><td><code>sequence_of_bytes([First|Rest]) :-</code></td></tr>
+<tr><td>18</td><td><code> First will_be byte,</code></td></tr>
+<tr><td>19</td><td><code> Rest will_be sequence_of_bytes.</code></td></tr>
+<tr><td>20</td><td><code></code></td><td rowspan="1"></td></tr>
+<tr><td>21</td><td><code>netstring_encoding(PayloadBytes) -->gt; </code></td><td rowspan="1">Netstring is a sequence of bytes.</td></tr>
+<tr><td>22</td><td><code> netstring_prefix_for_payload(PayloadBytes), </code></td><td rowspan="1">It consists of prefix,</td></tr>
+<tr><td>23</td><td><code> PayloadBytes, </code></td><td rowspan="1">payload,</td></tr>
+<tr><td>24</td><td><code> `,`. </code></td><td rowspan="5">and terminator. Terminator is single ASCII comma `,`.</td></tr>
+<tr><td>25</td><td><code>netstring_encoding(netstring(PayloadBytes), Bytes) :-</code></td></tr>
+<tr><td>26</td><td><code> assertion(ground(PayloadBytes); ground(Bytes)),</code></td></tr>
+<tr><td>27</td><td><code> Bytes will_be sequence_of_bytes,</code></td></tr>
+<tr><td>28</td><td><code> phrase(netstring_encoding(PayloadBytes), Bytes).</code></td></tr>
+<tr><td>29</td><td><code></code></td><td rowspan="1"></td></tr>
+<tr><td>30</td><td><code></code></td><td rowspan="19">Netstring prefix is the shortest ASCII decimal representation for length of
payload in bytes, followed by ASCII colon `:`.
That is number starting with non-zero digit unless payload is empty,
in which case it's `0`.</td></tr>
-<tr><td>31</td><td><pre></pre></td></tr>
-<tr><td>32</td><td><pre></pre></td></tr>
-<tr><td>33</td><td><pre></pre></td></tr>
-<tr><td>34</td><td><pre>netstring_prefix_for_payload(PayloadBytes, A, B) :-</pre></td></tr>
-<tr><td>35</td><td><pre> ( var(PayloadBytes)</pre></td></tr>
-<tr><td>36</td><td><pre> ->gt; netstring_prefix_codes(Prefix, A, B),</pre></td></tr>
-<tr><td>37</td><td><pre> number_codes(PayloadLength, Prefix),</pre></td></tr>
-<tr><td>38</td><td><pre> length(PayloadBytes, PayloadLength)</pre></td></tr>
-<tr><td>39</td><td><pre> ; length(PayloadBytes, PayloadLength),</pre></td></tr>
-<tr><td>40</td><td><pre> number_codes(PayloadLength, Prefix),</pre></td></tr>
-<tr><td>41</td><td><pre> netstring_prefix_codes(Prefix, A, B)</pre></td></tr>
-<tr><td>42</td><td><pre> ).</pre></td></tr>
-<tr><td>43</td><td><pre>netstring_prefix_codes(`0`) -->gt; `0:`, !.</pre></td></tr>
-<tr><td>44</td><td><pre>netstring_prefix_codes([C|Cs]) -->gt;</pre></td></tr>
-<tr><td>45</td><td><pre> nonzero_digit(C),</pre></td></tr>
-<tr><td>46</td><td><pre> !,</pre></td></tr>
-<tr><td>47</td><td><pre> digits(Cs),</pre></td></tr>
-<tr><td>48</td><td><pre> `:`.</pre></td></tr>
-<tr><td>49</td><td><pre></pre></td><td rowspan="5"></td></tr>
-<tr><td>50</td><td><pre>nonzero_digit(Code) -->gt;</pre></td></tr>
-<tr><td>51</td><td><pre> [Code],</pre></td></tr>
-<tr><td>52</td><td><pre> { assertion(ground(Code)) },</pre></td></tr>
-<tr><td>53</td><td><pre> { member(Code, `123456789`) }.</pre></td></tr>
-<tr><td>54</td><td><pre></pre></td><td rowspan="6"></td></tr>
-<tr><td>55</td><td><pre>netstring_of(Goal, Bytes) :-</pre></td></tr>
-<tr><td>56</td><td><pre> ground(Goal),</pre></td></tr>
-<tr><td>57</td><td><pre> !,</pre></td></tr>
-<tr><td>58</td><td><pre> call(Goal, PayloadBytes),</pre></td></tr>
-<tr><td>59</td><td><pre> netstring_encoding(netstring(PayloadBytes), Bytes).</pre></td></tr>
-<tr><td>60</td><td><pre></pre></td><td rowspan="6"></td></tr>
-<tr><td>61</td><td><pre>netstring_of(Goal, Bytes) :-</pre></td></tr>
-<tr><td>62</td><td><pre> ground(Bytes),</pre></td></tr>
-<tr><td>63</td><td><pre> !,</pre></td></tr>
-<tr><td>64</td><td><pre> netstring_encoding(netstring(PayloadBytes), Bytes),</pre></td></tr>
-<tr><td>65</td><td><pre> call(Goal, PayloadBytes).</pre></td></tr>
-<tr><td>66</td><td><pre></pre></td><td rowspan="1"></td></tr>
-<tr><td>67</td><td><pre></pre></td><td rowspan="3"></td></tr>
-<tr><td>68</td><td><pre>% :- use_module(library(pldoc/doc_files)).</pre></td></tr>
-<tr><td>69</td><td><pre>% doc_save('spec.pl', [format(html), doc_root(.)]).</pre></td></tr>
+<tr><td>31</td><td><code></code></td></tr>
+<tr><td>32</td><td><code></code></td></tr>
+<tr><td>33</td><td><code></code></td></tr>
+<tr><td>34</td><td><code>netstring_prefix_for_payload(PayloadBytes, A, B) :-</code></td></tr>
+<tr><td>35</td><td><code> ( var(PayloadBytes)</code></td></tr>
+<tr><td>36</td><td><code> ->gt; netstring_prefix_codes(Prefix, A, B),</code></td></tr>
+<tr><td>37</td><td><code> number_codes(PayloadLength, Prefix),</code></td></tr>
+<tr><td>38</td><td><code> length(PayloadBytes, PayloadLength)</code></td></tr>
+<tr><td>39</td><td><code> ; length(PayloadBytes, PayloadLength),</code></td></tr>
+<tr><td>40</td><td><code> number_codes(PayloadLength, Prefix),</code></td></tr>
+<tr><td>41</td><td><code> netstring_prefix_codes(Prefix, A, B)</code></td></tr>
+<tr><td>42</td><td><code> ).</code></td></tr>
+<tr><td>43</td><td><code>netstring_prefix_codes(`0`) -->gt; `0:`, !.</code></td></tr>
+<tr><td>44</td><td><code>netstring_prefix_codes([C|Cs]) -->gt;</code></td></tr>
+<tr><td>45</td><td><code> nonzero_digit(C),</code></td></tr>
+<tr><td>46</td><td><code> !,</code></td></tr>
+<tr><td>47</td><td><code> digits(Cs),</code></td></tr>
+<tr><td>48</td><td><code> `:`.</code></td></tr>
+<tr><td>49</td><td><code></code></td><td rowspan="5"></td></tr>
+<tr><td>50</td><td><code>nonzero_digit(Code) -->gt;</code></td></tr>
+<tr><td>51</td><td><code> [Code],</code></td></tr>
+<tr><td>52</td><td><code> { assertion(ground(Code)) },</code></td></tr>
+<tr><td>53</td><td><code> { member(Code, `123456789`) }.</code></td></tr>
+<tr><td>54</td><td><code></code></td><td rowspan="6"></td></tr>
+<tr><td>55</td><td><code>netstring_of(Goal, Bytes) :-</code></td></tr>
+<tr><td>56</td><td><code> ground(Goal),</code></td></tr>
+<tr><td>57</td><td><code> !,</code></td></tr>
+<tr><td>58</td><td><code> call(Goal, PayloadBytes),</code></td></tr>
+<tr><td>59</td><td><code> netstring_encoding(netstring(PayloadBytes), Bytes).</code></td></tr>
+<tr><td>60</td><td><code></code></td><td rowspan="6"></td></tr>
+<tr><td>61</td><td><code>netstring_of(Goal, Bytes) :-</code></td></tr>
+<tr><td>62</td><td><code> ground(Bytes),</code></td></tr>
+<tr><td>63</td><td><code> !,</code></td></tr>
+<tr><td>64</td><td><code> netstring_encoding(netstring(PayloadBytes), Bytes),</code></td></tr>
+<tr><td>65</td><td><code> call(Goal, PayloadBytes).</code></td></tr>
+<tr><td>66</td><td><code></code></td><td rowspan="1"></td></tr>
+<tr><td>67</td><td><code></code></td><td rowspan="3"></td></tr>
+<tr><td>68</td><td><code>% :- use_module(library(pldoc/doc_files)).</code></td></tr>
+<tr><td>69</td><td><code>% doc_save('spec.pl', [format(html), doc_root(.)]).</code></td></tr>
</table></body></html>
diff --git a/doc/spec2html.awk b/doc/spec2html.awk
@@ -3,7 +3,12 @@
BEGIN {
FS="%[>^] "
printf("%s\n", "<!DOCTYPE html>")
- printf("%s\n", "<html><body><table>")
+ printf("%s\n", "<html><head><style type=\"text/css\">")
+ printf("\t%s\n", "table.code_doc { border-collapse: collapse; border: 0px; }")
+ printf("\t%s\n", "table.code_doc code { white-space: pre; }")
+ printf("\t%s\n", "table.code_doc tr { vertical-align: top; }")
+ printf("\t%s\n", "table.code_doc td:hover { background-color: #3331; }")
+ printf("%s\n", "</style></head><body><table class=\"code_doc\">")
last_comm = 1
}
@@ -32,14 +37,14 @@ function entity_escape(s) {
function line(n){
if(span[n]) {
- printf("<tr><td>%d</td><td><pre>%s</pre></td><td rowspan=\"%d\">%s</td></tr>\n"\
+ printf("<tr><td>%d</td><td><code>%s</code></td><td rowspan=\"%d\">%s</td></tr>\n"\
, n \
, entity_escape(code[n]) \
, span[n] \
, entity_escape(comm[n]) \
)
} else {
- printf("<tr><td>%d</td><td><pre>%s</pre></td></tr>\n"\
+ printf("<tr><td>%d</td><td><code>%s</code></td></tr>\n"\
, n \
, entity_escape(code[n]) \
)