Gnu nroff - gera uma linha com ponto no início da linha

3

Eu tentei escrever um programa de auto-replicação ("quine") em bruto (sem macros) GNU nroff . Evidentemente, isso é inútil e excêntrico, mas não parece ter sido feito antes. Eu não consegui fazer isso.

Tenho certeza de que quem conseguir escrever uma macro sem idioma nroff terá que definir strings ou macros ou "boxes". Para fazer isso, você precisa escrever solicitações como:

.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx

Ou seja, cada solicitação em nroff input tem um '.' no início da linha.

Como o quines apenas exibe seu código-fonte (sem trapaça), a saída provavelmente precisa ter '.' como o primeiro caractere de várias linhas de saída.

Como você consegue o% GNUnroff para produzir um '.' personagem no início de uma linha? Nenhuma quantidade de indireção ou fuga pode fazê-lo, tanto quanto eu posso dizer. Existe algum pedido oculto que produz um '.' no início de uma linha?

Estou usando o Arch Linux recém-sincronizado, que tem o Groff 1.22.3 instalado.

    
por Bruce Ediger 21.04.2017 / 15:26

2 respostas

2

De mdoc(7)

The special meaning of a punctuation character may be escaped with the string ‘\&’

Então:

\&.

No entanto, isso pode ser complicado em combinação com linhas subsequentes, como coisas como

\&.
\&.as s "nron, nroff--very good, again!

Executar juntos (e produz várias linhas em branco)

$ nroff blah | head -2
.  .as s "nron, nroff‐‐very good, again!

Embora você possa consertar isso adicionando uma linha em branco ou possivelmente usando outras macros

\&.

\&.as s "nron, nroff--very good, again!

Embora eu não saiba como isso afetará as necessidades do quine ...

    
por 21.04.2017 / 16:00
2

Você pode configurar uma tradução com .tr , que leva pares de caracteres para serem traduzidos de para. Por exemplo, para traduzir # para . :

nroff <<\!
.tr #.
###abc...
!

produz

...abc...
    
por 21.04.2017 / 16:55