pms — Bíblia Sagrada (Padre Matos Soares, 1932) no Terminal
pms é uma ferramenta de linha de comando (CLI) escrita em C, inspirada no layeh/kjv, para leitura e pesquisa da Bíblia Sagrada traduzida da Vulgata Latina e comentada pelo Padre Manuel de Matos Soares (edição de 1932).
Todo o texto bíblico (73 livros do cânon católico, 1.334 capítulos e 35.528 versículos) e as 3.071 notas de comentário do Padre Matos Soares são compilados diretamente dentro do executável pms, sem necessidade de ficheiros externos em tempo de execução.
Funcionalidades
- Cânon Católico Completo (73 livros): Inclui todos os livros protocanónicos e deuterocanónicos segundo a ordem e nomenclatura da Vulgata Sixto-Clementina, preservando fielmente a grafia da edição original.
- Nomenclatura da Vulgata + Aliases Modernos: Aceita tanto os títulos tradicionais da Vulgata (
1Rs–4Rs,1Par–2Par,1Esd,2Esd) como as siglas modernas (1Sm,2Sm,1Cr,2Cr,Ne,Sl/Ps,Eclo/Sir, etc.), sem distinção de maiúsculas/minúsculas ou acentos. - Notas e Comentários (
-c): Permite exibir as notas de rodapé explicativas do Padre Matos Soares associadas aos versículos consultados. - Pesquisa por Expressões Regulares (
/termo): Pesquisa insensível a maiúsculas/minúsculas e a acentos/diacríticos em toda a Bíblia, num livro específico ou num capítulo específico, com realce ANSI (-e). - Paginação Automática e Modo Interativo (REPL): Integração automática com
less(ou$PAGER) quando executado num terminal interativo, além de um prompt interativo (pms>) quando invocado sem argumentos.
Compilação e Instalação
Requisitos
- Compilador C compatível com C99/POSIX (
gccouclang) makepython3(apenas para regenerarsrc/pms_data.ca partir dedata/*.tsv; para reextrair diretamente dopms.pdf, são também necessáriospdftotextdo pacotepoppler-utilsepython3-lxml)
Compilar
make
O binário autónomo ./pms será gerado na raiz do repositório.
Instalar no sistema (opcional)
sudo make install # Instala em /usr/local/bin/pms
# ou num diretório personalizado:
make install PREFIX=$HOME/.local
Para desinstalar:
sudo make uninstall
Utilização
usage: pms [flags] [reference...]
Opções (Flags)
| Flag | Descrição |
|---|---|
-A num |
Mostra num versículos de contexto após os versículos encontrados. |
-B num |
Mostra num versículos de contexto antes dos versículos encontrados. |
-C |
Mostra os versículos encontrados no contexto do capítulo inteiro. |
-c (ou -n) |
Mostra os comentários / notas de rodapé do Padre Matos Soares para os versículos exibidos. |
-e |
Ativa o realce ANSI de capítulos, números de versículos e termos pesquisados (ativo por omissão em TTY). |
-p |
Formata a saída com agrupamento por capítulo, indentação, espaçamento e paginação via less (ativo por omissão em TTY). |
-W (ou -w) |
Desativa a quebra automática de linha (line wrap). |
-l |
Lista todos os 73 livros e as suas abreviaturas canónicas. |
-h |
Mostra a mensagem de ajuda. |
Sintaxe de Referências
| Formato | Descrição | Exemplos |
|---|---|---|
<Livro> |
Livro inteiro | pms Gn, pms Abd, pms 2Jo |
<Livro>:<Cap> ou <Livro> <Cap> |
Capítulo inteiro | pms Gn:1, pms Sl 22, pms Jo 1 |
<Livro>:<Cap>:<Vers> |
Versículo único | pms Jo 3:16, pms Gn:1:1 |
<Livro>:<Cap>:<V1>[,<V2>]... |
Conjunto de versículos (ou intervalos) separados por vírgula | pms Gn 1:1,3,5, pms Gn 1:1-3,6,9-10 |
<Livro>:<Cap1>-<Cap2> |
Intervalo de capítulos | pms Gn 1-3, pms Sl 22-23 |
<Livro>:<Cap>:<V1>-<V2> |
Intervalo de versículos num capítulo | pms Gn 1:1-5, pms Rm 8:31-39 |
<Livro>:<Cap1>:<V1>-<Cap2>:<V2> |
Intervalo de versículos entre capítulos diferentes | pms Gn 1:26-2:3 |
/<Padrao> |
Pesquisa regex em toda a Bíblia (sem distinção de acentos/maiúsculas) | pms /principio, pms "/verbo se fez carne" |
<Livro>/<Padrao> |
Pesquisa regex restrita a um livro | pms Jo/luz, pms Sl /pastor |
<Livro>:<Cap>/<Padrao> |
Pesquisa regex restrita a um capítulo | pms Jo:1/luz, pms Gn 1 /firmamento |
Exemplos Práticos
# Ler Génesis 1:1-5 com as notas do Padre Matos Soares
./pms -p -c Gn 1:1-5
# Consultar usando siglas da Vulgata ou equivalentes modernos
./pms 1Rs 3:9 # 1 Reis (= 1 Samuel)
./pms 1Sm 3:9 # Mesmo livro usando a sigla moderna 1Sm
./pms 1Par 1:1 # 1 Paralipómenos (= 1 Crónicas)
./pms 1Cr 1:1 # Mesmo livro usando a sigla moderna 1Cr
./pms 2Esd 1:1 # 2 Esdras (= Neemias)
./pms Ne 1:1 # Mesmo livro usando a sigla moderna Ne
# Mostrar 1 versículo antes e 1 depois de Génesis 1:3
./pms -B 1 -A 1 Gn 1:3
# Pesquisar "espírito de deus" (sem precisar de acentos) com notas
./pms -p -c "/espirito de deus"
# Saída simples em texto corrido sem quebra de linha (ideal para scripts/pipes)
./pms -W Gn 1:1-5
Modo Interativo (REPL)
Executando ./pms sem argumentos de referência num terminal, abre-se o modo interativo:
$ ./pms
pms> Jo 1:1-5
pms> :c
Comentários: activados
pms> Gn 1:1-5
pms> :l
pms> q
Comandos especiais dentro do REPL:
- :c ou -c: alterna (ativa/desativa) a exibição dos comentários do Padre Matos Soares.
- :l ou -l: lista os 73 livros.
- :h, -h ou help: mostra a ajuda.
- q, quit, exit, sair ou Ctrl-D: encerra o programa.
Lista dos 73 Livros e Aliases Suportados
Nota sobre os Salmos: Tal como na Vulgata Latina, os Salmos 9 a 146 seguem a numeração greco-latina (por exemplo, o célebre "O Senhor me governa" corresponde ao Salmo 22 na Vulgata / Salmo 23 no hebraico).
| # | Título Canónico (Vulgata) | Sigla | Outros Aliases Aceites |
|---|---|---|---|
| Antigo Testamento | |||
| 1 | Génesis | Gn |
gen, genesis |
| 2 | Êxodo | Ex |
exo, exodo |
| 3 | Levítico | Lv |
lev, levitico |
| 4 | Números | Nm |
num, numeros |
| 5 | Deuteronómio | Dt |
deut, deuteronomio |
| 6 | Josué | Js |
jos, josue |
| 7 | Juízes | Jz |
juiz, juizes |
| 8 | Rut | Rt |
rut, rute |
| 9 | 1 Reis | 1Rs |
1reis, 1sm, 1sam, 1samuel |
| 10 | 2 Reis | 2Rs |
2reis, 2sm, 2sam, 2samuel |
| 11 | 3 Reis | 3Rs |
3reis, iiireis |
| 12 | 4 Reis | 4Rs |
4reis, ivreis |
| 13 | 1 Paralipómenos | 1Par |
1paralipomenos, 1cr, 1cron, 1cronicas |
| 14 | 2 Paralipómenos | 2Par |
2paralipomenos, 2cr, 2cron, 2cronicas |
| 15 | 1 Esdras | 1Esd |
1esdras, esd, esdras |
| 16 | 2 Esdras (Neemias) | 2Esd |
2esdras, ne, nee, neemias |
| 17 | Tobias | Tb |
tob, tobias |
| 18 | Judit | Jt |
jdt, judit, judite |
| 19 | Ester | Est |
ester |
| 20 | Job | Job |
job |
| 21 | Salmos | Sl |
sal, salmo, salmos, ps, psalmos |
| 22 | Provérbios | Pr |
prov, proverbios |
| 23 | Eclesiastes | Ecl |
eclesiastes, qo, coelet |
| 24 | Cântico dos Cânticos | Ct |
cant, cantico, canticos |
| 25 | Sabedoria | Sb |
sab, sabedoria |
| 26 | Eclesiástico | Eclo |
eclesiastico, sir, siracide, bensira |
| 27 | Isaías | Is |
isa, isaias |
| 28 | Jeremias | Jr |
jer, jeremias |
| 29 | Lamentações | Lm |
lam, lamentacoes |
| 30 | Baruc | Br |
bar, baruc |
| 31 | Ezequiel | Ez |
eze, ezeq, ezequiel |
| 32 | Daniel | Dn |
dan, daniel |
| 33 | Oséas | Os |
ose, oseas, oseias |
| 34 | Joel | Jl |
joel |
| 35 | Amós | Am |
amos |
| 36 | Abdias | Abd |
ab, abdias, ob, obadias |
| 37 | Jonas | Jn |
jon, jonas |
| 38 | Miquéas | Mq |
miq, miqueas, miqueias |
| 39 | Naum | Na |
nau, naum |
| 40 | Habacuc | Hab |
hc, habacuc, habacuque |
| 41 | Sofonias | Sf |
sof, sofonias |
| 42 | Ageu | Ag |
ageu |
| 43 | Zacarias | Zc |
zac, zacarias |
| 44 | Malaquias | Ml |
mal, malaquias |
| 45 | 1 Macabeus | 1Mc |
1mac, 1macabeus |
| 46 | 2 Macabeus | 2Mc |
2mac, 2macabeus |
| Novo Testamento | |||
| 47 | S. Mateus | Mt |
mat, mateus, smateus |
| 48 | S. Marcos | Mc |
mar, marcos, smarcos |
| 49 | S. Lucas | Lc |
luc, lucas, slucas |
| 50 | S. João | Jo |
joao, sjoao |
| 51 | Actos dos Apóstolos | At |
act, atos, actos |
| 52 | Romanos | Rm |
rom, romanos |
| 53 | 1 Coríntios | 1Cor |
1co, 1corintios |
| 54 | 2 Coríntios | 2Cor |
2co, 2corintios |
| 55 | Gálatas | Gl |
gal, galatas |
| 56 | Efésios | Ef |
efe, efesios |
| 57 | Filipenses | Fp |
flp, fil, filipenses |
| 58 | Colossenses | Cl |
col, colossenses |
| 59 | 1 Tessalonicenses | 1Ts |
1tes, 1tessalonicenses |
| 60 | 2 Tessalonicenses | 2Ts |
2tes, 2tessalonicenses |
| 61 | 1 Timóteo | 1Tm |
1tim, 1timoteo |
| 62 | 2 Timóteo | 2Tm |
2tim, 2timoteo |
| 63 | Tito | Tt |
tit, tito |
| 64 | Filémon | Fm |
flm, filemon |
| 65 | Hebreus | Hb |
heb, hebreus |
| 66 | S. Tiago | Tg |
tiago, stiago |
| 67 | 1 S. Pedro | 1Pd |
1pe, 1ped, 1pedro |
| 68 | 2 S. Pedro | 2Pd |
2pe, 2ped, 2pedro |
| 69 | 1 S. João | 1Jo |
1joao, 1sjoao |
| 70 | 2 S. João | 2Jo |
2joao, 2sjoao |
| 71 | 3 S. João | 3Jo |
3joao, 3sjoao |
| 72 | S. Judas | Jd |
jud, judas, sjudas |
| 73 | Apocalipse | Ap |
apoc, apocalipse |
Estrutura do Repositório
.
├── Makefile # Regras de compilação, extração e instalação
├── README.md # Documentação do projeto
├── pms.pdf # Digitalização original (4 volumes, 2.572 páginas, 1932)
├── pms.txt # Texto completo formatado e limpo (73 livros + notas)
├── pms # Binário CLI autónomo compilado
├── data/
│ ├── pms.tsv # Versículos tabulados (BookName, BookAbbr, BookNum, Chapter, Verse, Text)
│ └── pms_notes.tsv # Comentários tabulados (BookNum, Chapter, VerseStart, VerseEnd, Label, NoteText)
├── scripts/
│ ├── extract_pms.py # Extrator geométrico (pdftotext -bbox) de pms.pdf -> data/*.tsv e pms.txt
│ └── generate_c_data.py # Gerador de código C (data/*.tsv -> src/pms_data.c)
└── src/
├── pms_config.h # Configuração de execução e opções CLI
├── pms_data.h # Estruturas de dados de livros, versículos e notas
├── pms_data.c # Corpus embutido (gerado automaticamente)
├── pms_main.c # Ponto de entrada, flags, pager e REPL
├── pms_match.h / .c # Motor de filtragem de versículos e expansão de contexto (-A, -B, -C)
├── pms_ref.h / .c # Parser de referências bíblicas e resolução de nomes/aliases
├── pms_render.h / .c # Formatação de saída, word-wrap UTF-8, realce ANSI e notas
└── pms_util.h / .c # Utilitários UTF-8 e normalização insensível a acentos
Reextrair os Dados do PDF
Caso deseje modificar o processamento de texto e regenerar pms.txt, data/pms.tsv, data/pms_notes.tsv e src/pms_data.c a partir de pms.pdf:
make extract
make
