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.1.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

pygments_portugol-0.1.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pygments_portugol-0.1.0.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for pygments_portugol-0.1.0.tar.gz
Algorithm Hash digest
SHA256 417a1c1f55ff79d70c425d40c432678035718e039de8e2a2e636e06d317e76e2
MD5 11f8b6a5662d7f93a1d71c6e6804407e
BLAKE2b-256 e7bf80ba805e44928a6a28eb5533e34375b6ac76fb3f6788d7675766d4e873ca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygments_portugol-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for pygments_portugol-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8cb1bd77b4978818aaaf57d7a425f7e3127a0fbbb545e2adf4c8fd8c1829be84
MD5 befa72bd242fef9c19526f87c472b646
BLAKE2b-256 f8b3a2f75c15986611f904d9b1a9083edc1acb2d12f97ff4ef035d5c179b2db3

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