This is what I would like to do:
morekeywords={SENÃO, ENTÃO, FAÇA, ATÉ, ENQUANTO, PARA, SE, DECLARA, DECLARE, E, OU, FIM_ENQUANTO, FIM_PARA}
I'm defining a new language, and I would like to use natural language words as keywords.
The problem is with keywords: SENÃO, ENTÃO, FAÇA, ATÉ.
I have solved the first problem, in showing special chars with: How to insert code with accents with listings?
The alsoletter here, doesn't work for me, I got an error when using it: alsoletter={Ç,É,Ã}.
test.tex
\documentclass{article}
\usepackage[brazilian]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listingsutf8}
\usepackage{listings}
\lstset{%
inputencoding=utf8,
extendedchars=true,
literate=%
{é}{{\'{e}}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{á}{{\'{a}}}1
{ã}{{\~{a}}}1
{Á}{{\'{A}}}1
{Â}{{\^{A}}}1
{Ã}{{\~{A}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{õ}{{\~{o}}}1
{ó}{{\'{o}}}1
{ô}{{\^{o}}}1
{Õ}{{\~{O}}}1
{Ó}{{\'{O}}}1
{Ô}{{\^{O}}}1
{î}{{\^{i}}}1
{Î}{{\^{I}}}1
{í}{{\'{i}}}1
{Í}{{\~{Í}}}1
}
\lstdefinelanguage{pseudo}
{
extendedchars=true,
alsoletter={_},
morekeywords={ENQUANTO,PARA,SE,SEN\~{A}O,ENTÃO,ATÉ,FA\c{C}A,DECLARA,DECLARE,E,OU,FIM_ENQUANTO,FIM_PARA,FAÇA},
ndkeywords={NUMERO,TEXTO,LEIA,ESCREVA},
sensitive=true,
morecomment=[l]{//},
morecomment=[s]{/*}{*/},
morestring=[b]"
}
\begin{document}
\lstinputlisting[language=pseudo]{foo.pseudo}
\end{document}
foo.pseudo
ENQUANTO nota != -1 FAÇA
// Comment example
LEIA nota
SE nota >= 7 ENTÃO
ESCREVA "Aprovado"
SENÃO
ESCREVA "Reprovado"
TEST "Algo mais"
/*
mais
comentário
*/
FIM_ENQUANTO
I have seen:
alsoletterspecification -- but the reaon why it error out islst@SelectStdCharTabledoes not include the definitions for those characters, basically listings just have poor utf8 support -- I guess it's possible to somehow hack all the characters in 128-255 to be "letter", but using the literate hack seems to be the best option here. – user202729 Aug 01 '22 at 14:37