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:
Best Answer
I managed to "solve" this by replicating the keywordstyle within the literate set. There is probably a better way to do it, but this works well for a few keywords.