Hello,

NRK wrote on Sun, Sep 05, 2021 at 07:10:12AM +0600:

> Recently I've thought about using groff for writing static website.

You mean, like

  https://mandoc.bsd.lv/mdoc/
  http://schwarze.bsd.lv/

?

> One problem I've ran into is doing codeblocks. What I'm trying to do is
> this:
> 
> .HTML <pre><code>
> fun() {
>   echo "hello" > /dev/null 2>&1;
> }
> .HTML </code></pre>
> 
> However this doesn't preserve the indendation and newlines are not
> properly preserved either. The output I'm trying to achieve is _exactly_
> the following:
> 
> <pre><code>
> fun() {
>   echo &quot;hello&quot; &gt; /dev/null 2&gt;&amp;1;
> }
> </code></pre>
>
> It should escape anything that needs escaping but preserve indendation
> and newlines properly.

 $ cat tmp.mdoc
.Dd $Mdocdate$
.Dt TEST 1
.Os
.Sh NAME
.Nm test
.Nd descr
.Sh DESCRIPTION
.Bd -literal
fun() {
  echo "hello" > /dev/null 2>&1;
}
.Ed

 $ mandoc -T html tmp.mdoc
[...]
<div class="Bd Li">
<pre>fun() {
  echo &quot;hello&quot; &gt; /dev/null 2&gt;&amp;1;
}</pre>
</div>
[...]

Admittedly, <div class="Bd Li"> is not *exactly* <code>, but the default
CSS presents it in a similar way.  The reason mandoc does not use <code>
here is that not every literal block necessarily contains code; i admit
it's not completely consistent because .Dl and .Ql do emit <code>.

Oh, you want to use groff, not mandoc.  No, that is not possible,
because groff discards all the semantic information (information
about which high-level macros were used) before entering the HTML
output module, and that information is needed to pick appropriate
HTML elements.

Groff can do many things, but it is *not* designed to be a website
generator.

Yours,
  Ingo

Reply via email to