I have a code that recognizes numbers with brackets around them ([1], [22] and [333]) and exchange the numbers and brackets with alternate forms that together form a sort of indexed number: a square around the numbers. I make use of a class called @figures to detect any kind of numeral. Singles and doubles are quadratic, the triples doesn’t need to be, so they use the same numbers as the doubles.
Here’s the code (I have a similar one for inversed squares in ss02):
feature ss01 {
lookup mono_1 {
sub bracketleft @figures bracketright' by bracketright.square;
} mono_1;
lookup mono_2 {
sub bracketleft zero' bracketright.square by zero.mono;
sub bracketleft one' bracketright.square by one.mono;
sub bracketleft two' bracketright.square by two.mono;
sub bracketleft three' bracketright.square by three.mono;
sub bracketleft four' bracketright.square by four.mono;
sub bracketleft five' bracketright.square by five.mono;
sub bracketleft six' bracketright.square by six.mono;
sub bracketleft seven' bracketright.square by seven.mono;
sub bracketleft eight' bracketright.square by eight.mono;
sub bracketleft nine' bracketright.square by nine.mono;
} mono_2;
lookup mono_3 {
sub bracketleft' @figures bracketright.square by bracketleft.square;
} mono_3;
lookup duo_1 {
sub bracketleft @figures @figures bracketright' by bracketright.square;
} duo_1;
lookup duo_2 {
sub bracketleft @figures zero' bracketright.square by zero.multiple;
sub bracketleft @figures one' bracketright.square by one.multiple;
sub bracketleft @figures two' bracketright.square by two.multiple;
sub bracketleft @figures three' bracketright.square by three.multiple;
sub bracketleft @figures four' bracketright.square by four.multiple;
sub bracketleft @figures five' bracketright.square by five.multiple;
sub bracketleft @figures six' bracketright.square by six.multiple;
sub bracketleft @figures seven' bracketright.square by seven.multiple;
sub bracketleft @figures eight' bracketright.square by eight.multiple;
sub bracketleft @figures nine' bracketright.square by nine.multiple;
} duo_2;
lookup duo_3 {
sub bracketleft zero' @figures bracketright.square by zero.multiple;
sub bracketleft one' @figures bracketright.square by one.multiple;
sub bracketleft two' @figures bracketright.square by two.multiple;
sub bracketleft three' @figures bracketright.square by three.multiple;
sub bracketleft four' @figures bracketright.square by four.multiple;
sub bracketleft five' @figures bracketright.square by five.multiple;
sub bracketleft six' @figures bracketright.square by six.multiple;
sub bracketleft seven' @figures bracketright.square by seven.multiple;
sub bracketleft eight' @figures bracketright.square by eight.multiple;
sub bracketleft nine' @figures bracketright.square by nine.multiple;
} duo_3;
lookup duo_4 {
sub bracketleft' @figures @figures bracketright.square by bracketleft.square;
} duo_4;
lookup trio_1 {
sub bracketleft @figures @figures @figures bracketright' by bracketright.square;
} trio_1;
lookup trio_2 {
sub bracketleft @figures @figures zero' bracketright.square by zero.multiple;
sub bracketleft @figures @figures one' bracketright.square by one.multiple;
sub bracketleft @figures @figures two' bracketright.square by two.multiple;
sub bracketleft @figures @figures three' bracketright.square by three.multiple;
sub bracketleft @figures @figures four' bracketright.square by four.multiple;
sub bracketleft @figures @figures five' bracketright.square by five.multiple;
sub bracketleft @figures @figures six' bracketright.square by six.multiple;
sub bracketleft @figures @figures seven' bracketright.square by seven.multiple;
sub bracketleft @figures @figures eight' bracketright.square by eight.multiple;
sub bracketleft @figures @figures nine' bracketright.square by nine.multiple;
} trio_2;
lookup trio_3 {
sub bracketleft @figures zero' @figures bracketright.square by zero.multiple;
sub bracketleft @figures one' @figures bracketright.square by one.multiple;
sub bracketleft @figures two' @figures bracketright.square by two.multiple;
sub bracketleft @figures three' @figures bracketright.square by three.multiple;
sub bracketleft @figures four' @figures bracketright.square by four.multiple;
sub bracketleft @figures five' @figures bracketright.square by five.multiple;
sub bracketleft @figures six' @figures bracketright.square by six.multiple;
sub bracketleft @figures seven' @figures bracketright.square by seven.multiple;
sub bracketleft @figures eight' @figures bracketright.square by eight.multiple;
sub bracketleft @figures nine' @figures bracketright.square by nine.multiple;
} trio_3;
lookup trio_4 {
sub bracketleft zero' @figures @figures bracketright.square by zero.multiple;
sub bracketleft one' @figures @figures bracketright.square by one.multiple;
sub bracketleft two' @figures @figures bracketright.square by two.multiple;
sub bracketleft three' @figures @figures bracketright.square by three.multiple;
sub bracketleft four' @figures @figures bracketright.square by four.multiple;
sub bracketleft five' @figures @figures bracketright.square by five.multiple;
sub bracketleft six' @figures @figures bracketright.square by six.multiple;
sub bracketleft seven' @figures @figures bracketright.square by seven.multiple;
sub bracketleft eight' @figures @figures bracketright.square by eight.multiple;
sub bracketleft nine' @figures @figures bracketright.square by nine.multiple;
} trio_4;
lookup trio_5 {
sub bracketleft' @figures @figures @figures bracketright.square by bracketleft.square;
} trio_5;
} ss01;
This works like a charm, I’m just wondering if I could simplify things somehow.


