Skip to main content

Pygments lexer for Portugol Studio.

Project description

Pygments_Portugol

Pygments é um excelente pacote em Python destinado à coloração de sintaxe (syntax highlighting), sendo possível utilizá-lo, inclusive, em documentos LaTeX. Este pacote fornece um lexer para a linguagem Portugol Studio.

Instalação

Após a instalação do Python 3, você provavelmente poderá executar o comando a seguir a fim de instalar o Pygments:

$ pip install pygments

Note que $ indica o prompt do shell, você não deve digitar isso.

Algumas variações desse comando podem aparecer a depender da plataforma, por exemplo:

$ pip3 install pygments
$ python3 -m pip install pygments
$ python -m pip install pygments

Após instalar com sucesso o Pygments, você pode instalar o lexer para Portugol Studio:

$ pip install pygments-portugol

Utilização

Para utilizar o lexer, o procedimento é equivalente a qualquer outra linguagem suportada pelo Pygments. Utilize portugol ou portugolstudio como nome da linguagem. Por exemplo, o código em Python a seguir ilustra como ler um arquivo code.por e salvar em HTML no arquivo formatted.html.

from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter

with open("./code.por", "r") as fl:
    code = fl.read()

lexer = get_lexer_by_name("portugol", stripall=True)
formatter = HtmlFormatter(linenos=True, noclasses=True)
result = highlight(code, lexer, formatter)

with open("./formatted.html", "w") as fl:
    fl.write(result)

Clique aqui para ver o resultado.

Utilização com LaTeX

Para tipografar um código em LaTeX com o Pygments, pode-se utilizar o pacote minted. O código a seguir é um exemplo. A fonte DejaVuSansMono foi utilizada apenas por questões estéticas. As duas linhas referentes à fonte podem ser removidas ou substituídas. Caso queira usar pdfLaTeX, remova-as.

% !TeX program = xelatex
\documentclass{article}
\usepackage{fontspec} % remover caso esteja usando pdfLaTeX
\usepackage{DejaVuSansMono} % remover caso esteja usando pdfLaTeX
\setmonofont[Scale=MatchLowercase]{DejaVuSansMono} % remover caso esteja usando pdfLaTeX

\usepackage{minted} % importa o pacote para que possamos usar
\begin{document}
O código a seguir ilustra um fatorial recursivo no Portugol Studio.

\begin{minted}[autogobble, linenos]{portugol}
    programa
    {
        funcao inicio()
        {
            inteiro numero

            escreva("Digite um número: ")
            leia(numero)

            limpa()
            escreva("O fatorial de ", numero, " é: ", fatorial(numero), "\n")
        }

        // Função recursiva que calcula o fatorial do número passado

        funcao inteiro fatorial(inteiro numero)
        {
            se (numero == 1 ou numero == 0)
            {
                retorne 1
            }

            retorne numero * fatorial(numero - 1)
        }
    }
\end{minted}
\end{document}

Resultado:

Veja este tutorial se quiser ver outras possibilidades, como escolher cores diferentes ou importar de um arquivo externo.

Utilização em LaTeX no Overleaf

Caso você tenha o costume de usar Overleaf, pode ter lido a seção anterior e pensado que é impossível instalar um pacote Python no Overleaf. Sim, é verdade. Felizmente, é possível utilizar um lexer sem instalação obrigatória.

  1. Copie o arquivo do lexer (este) e salve como, por exemplo, PortugolStudioLexer.py.

  2. Coloque no mesmo diretório do seu arquivo .tex;

  3. Substitua o nome da linguagem por PortugolStudioLexer.py:PortugolStudioLexer -x.

  4. O código deve ser assim (veja o exemplo completo na seção anterior):

% ...
\begin{minted}[autogobble, linenos]{PortugolStudioLexer.py:PortugolStudioLexer -x}
    // seu código
\end{minted}
% ...

Isto pode ser recomendado para projetos maiores, para reduzir a quantidade de dependências que outros colaboradores precisarão instalar (o mesmo vale para fontes personalizadas). Para projetos menores, entretanto, é mais prático instalar e apenas utilizar o nome da linguagem.

Contribuição

Caso note algo de errado, fique à vontade para abrir uma issue ou, ainda melhor, enviar o seu Pull Request.

Autor

Desenvolvido por Héliton Martins.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygments_portugol-0.2.1.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

pygments_portugol-0.2.1-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file pygments_portugol-0.2.1.tar.gz.

File metadata

  • Download URL: pygments_portugol-0.2.1.tar.gz
  • Upload date:
  • Size: 17.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for pygments_portugol-0.2.1.tar.gz
Algorithm Hash digest
SHA256 4cb3c25530d40cec5d9e7f0612054974c7cdf69447073d26a0862499e4f65cab
MD5 81b713d6c4c64eb3b7fc046d1e73bb0e
BLAKE2b-256 8ba5e7e71ae6a4434437180102b0aebfbc35fcb0d52ef62c841d710b08c7db87

See more details on using hashes here.

File details

Details for the file pygments_portugol-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pygments_portugol-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for pygments_portugol-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 51b9230d8ab45ac6f2f6b6c6d8d5426619157028469c295ae8e3eb427486b94f
MD5 12712c7d44562cf3b6e3a3fa74636076
BLAKE2b-256 90fc32d73e4d4c93b4e9f127a5d03a94af439bf8deb994b831ee8be9116e0302

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page