Programmer's WorkBench (pwb.hlp) (Table of Contents; Topic list)
Macro Example: Expanding Text Abbreviations
                                             Up Contents Index Back
─────Programmer's WorkBench─────────────────────────────────────────────────
 
     The macros below implement a "template" mechanism that you can use
     to expand abbreviations or insert boilerplate text such as a
     standard function header.
 
     The SelWord macro selects the word at the cursor, much like double-
     clicking a word does. This is useful by itself. However, in this
     example, it is used as part of the Expand macro.
 
          ;  Select the current word
          SelWord:= Pword ->eof Mword Arg Meta Pword =>  \
                    :>eof Mword Pword Arg Meta Pword
 
     The Expand macro deletes the word at the cursor and executes it.
     If the word is defined as a PWB function or a macro, PWB performs
     the specified action. In the following example, it is assigned to
     the ALT+T key.
 
          ;  Delete the current word and execute it
          Expand := SelWord Lasttext Cancel Lastselect Meta Sdelete  \
                    Lasttext Execute
          Expand :Alt+T
 
     To use Expand, type the abbreviation and press ALT+T.
 
     With Expand, many text macros can be defined for use as shorthand,
     but only one key is needed to expand them all. For example, with
     the following text macros:
 
          ;  Simple text expansion
          prog := "program"
          ex   := "example"
 
     type 'ex', ALT+T, ' prog', ALT+T to get 'example program'.
 
     You can define a text macro in terms of another so that one
     abbreviation can be used for more than one expansion:
 
          ;  Expand 'cmd' once to get 'command', Expand twice
          ;  to get 'command line'
          cmd    := "command"
          command:= "command line"
 
     Expand is not limited to text macros. It can be used to execute
     any macro or PWB function. For example, the following macro
     expands to the contents of a file──a good technique for large
     boilerplate text:
 
          Header := Arg "$INIT:header.txt" Paste
 
     The following macro could form the basis of a complete C
     programming template package. It expands the 'for' keyword into
     the outline of a for loop and positions the cursor at the first
     enclosed statement.
 
          ;  Expand the skeleton of a C 'for' loop
          for := "for (;;) {"   Begline Down Linsert  "}" Left  \
                 Linsert Tab ";" Left
 
     When Expand is used on the word 'for', it yields the text:
 
          for (;;) {
               ;
          }
 
     After expansion, the cursor is on the statement in the block.
                                    -♦-