14.8.2.3 Detecting colons used as text or punctuation

Suppose some FrameMaker index entries include colons as punctuation or as part of the text, instead of as level separators; that is, some colons are escaped thus \: in index markers. You could modify macro [ProcIXtext] as follows, to distinguish between colon-as-text and colon-as-separator:

 

[ProcIXtext]

 

1

<$$IXlevel = 1>

 

2

<$_while ($$IXtext)>

 

3

   <index<$$IXlevel>>

Opening XML tag

4

   <$$IXpart = ($$IXtext before ":")>

 

5

   <$_if (($$IXpart last 2) is "\\")>

Check for colon-as-text

6

      <$ProcIXLitColon>

Call another macro

7

      <$_endif>

 

8

   <$$IXpart>

Text output

9

   <$$IXpart = ($$IXtext after ":")>

 

10

   <$$IXtext = $$IXpart>

 

11

   </index<$$IXlevel>>

Closing XML tag

12

   <$$IXlevel++>

 

13

   <$_endwhile>

 

You need a double backslash \\ on line 5, because that is how an escaped colon in a FrameMaker marker is represented internally by Mif2Go DCL.

Index-entry text that does not include a colon-as-text is output on line 8, and surrounding XML tags are output on line 3 and line 11.

Process colon as punctuation

A second macro [ProcIXLitColon] has to be invoked on line 6, because you cannot nest a <$_while> inside another <$_while> in the same macro; see §28.6.4.3 Using loop structures:

 

[ProcIXLitColon]

 

1

<$_while (($$IXpart last 2) is "\\")>

 

2

   <$($$IXpart first (($$IXpart length) - 2)) as %s>:

Text output

3

   <$$IXpart = ($$IXtext after ":")>

 

4

   <$$IXtext = $$IXpart>

 

5

   <$$IXpart = ($$IXtext before ":")>

 

6

   <$_endwhile>

 

Index-entry content at the current level, up to the colon-as-text, and then the text colon itself, are output on line 2 of [ProcIXLitColon].