literal keyword


Placing literal before any of the keywords arg, token, literal, or is lets you use these keywords as part of a macro name or argument delimiter, and lets you use the keyword macro-end in the macro definition.

The code below uses literal before "is" in a macro definition to keep "is" from being interpreted as an OmniMark keyword. The macro named "my" uses the word "is" as a literal, so that you can assign local variables by using an English-like line of code such as "my nick-name is Speedy".

  macro my token id literal is token value is
     set id to value
      local stream nick-name
      local stream home-town
      my nick-name is "Speedy"   
      my home-town is "Denver"
      output "My nickname is %g(nick-name).%n" 
               ||  "My hometown is %g(home-town).%n"

The code below uses literal in a macro definition to define constants automatically without writing a macro for every single one. The macro "const" uses "macro-end" as a literal and dynamically builds a macro every time it sees "const" followed by a word, an equal sign, and a quoted string. This lets you use BASIC-style const declarations instead of macros for declaring constants. Redefining small bits of OmniMark in this way makes for clear and simple examples, but not necessarily for maintainable OmniMark code, so use with caution.

  macro const arg name = token value  is 
     macro name 
     is value
     literal macro-end
  const mary = "Mary had a little lamb%n"
     output mary

Related Syntax
Related Concepts