[Tex/LaTex] Listings language definition keyword suffixes

formattinglistings

I'm trying to create a listings language definition for ARM assembly and many of the instructions have prefixes/suffixes (i.e. BGT, BLE, BNE, BEQ branch instructions).

Is there a way to define B with any suffix as a keyword? Or am I stuck adding every combination of prefix/suffix/instruction in my list of keywords?

Best Answer

You can use the keywordsprefix=<prefix> to specify that anything beginning with the <prefix> is considered a a keyword. The MWE below highlights any word beginning with B in blue, but leaves other text alone:

enter image description here

However you should note the following limitations form the listings documentation:

  1. The prefix is always case sensitive.

  2. Only one prefix can be defined at a time.

  3. If used standalone outside a language definition, the key might work only after selecting a nonempty language (and switching back to the empty language if necessary).

  4. The key does not respect the value of classoffset and has no optional class argument.

\documentclass{article}
\usepackage{listings}%
\usepackage{xcolor}

\lstset{%
    backgroundcolor=\color{yellow!20},%
    basicstyle=\small\ttfamily,%
    numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
    keywordstyle=\color{blue}\bfseries,
    language=Java,
    keywordsprefix=B,
    }%

\begin{document}
\begin{lstlisting}
    ABC BGT DEF
    BLE XYZ MWS
    BNE DNW QES
    ABN BEQ MWE
\end{lstlisting}
\end{document}