You can do the formatting using a table for alignment of the labels, manual spacing for indentation and manual typesetting of each word (paying attention to spacing).
$$
\begin{array}{ll}
& \mathit{stringlen} \leftarrow \text{length of } \mathit{string}. \\
& \mathit{i} \leftarrow \mathit{patlen}. \\
\mathit{top}: & \text{if } \mathit{i} \gt \mathit{stringlen} \text{ then return false}. \\
… \\
& \text{if } \mathit{string}(\mathit{i}) = \mathit{pat}(\mathit{i}) \\
& \quad \text{then} \\
… \\
\end{array}
$$
But this is painful for many reasons. The source is hard to read and edit. The rendering of such large blocks of MathJax is slow in some browsers. I hate to think what this would sound like on a screen reader. And I don't think your sample output is particularly pretty anyway.
I would use the native text markup. It's perfectly suitable for a nested structure.
- Let $\mathit{stringlen} = \mathrm{length}(\mathit{string})$
- Set $i = \mathit{patlen}$
- While $i \lt \mathit{stringlen}$:
- Set $j = \mathit{patlen}$
- While $j \lt 0$:
- Return false.
This is easier to do with structured code than with goto. But you shouldn't be using goto when loops would do anyway.
Source code of this post (other revisions)