# Modifiers For Tag- And Macro Declarations

Within `<$macro>` and `<$deftag>`, you can use several modifiers to tell `hsc` how to handle this macro/tag.

Allowed modifiers for both `<$macro>` and `<$deftag>` are:

`/CLOSE` (short: `/C`)
  macro/tag is a container and requires a corresponding end tag.
`/ONLYONCE` (short: `/1`)
  macro/tag is required at the most once within a document
`/REQUIRED` (short: `/R`)
  macro/tag is required to appear at least once within a document
`/RECOMMENDED` (short: `/RCMD`)
  macro/tag ought to appear at least once within a document
`/MUST_BE_INSIDE` (short: `/MBI`)
  Needs a string as argument, that contains a list of container tags, that must be started before tag is allowed to be used.
  Example:
  The tag `<LI>` must be used inside some sort of lists only, therefore `/MBI="ul|ol|dir|menu"` is used. The vertical bar (```|`'') is used as a separator for multiple tags.
  In XHTML mode, this modifier is stricter than for traditional HTML: it means ``directly inside'' instead of ``somewhere inside''. I.e. the following would be legal in HTML, but not in XHTML (the actual definition is different, this is just an example!):

      <$deftag P /MBI="BODY">
      <body>
        <div>
          <p>Blah</p>
        </div>
      </body>

`/NOT_ALLOWED_WITHIN` (short: `/NAW`)
  Like `/MBI`, but this time tags that must not be used before. For example, a nested usage of `<A>` is not allowed, therefore `/NAW="a"` is used.

Additionally, the following modifiers can be used with `<$deftag>`

`/AUTOCLOSE` (short: `/AC`)
  Used for `<P>` and `<LI>`, which can be used as container or single tag depending on the HTML version. Tags marked with this modifier can not be nested.
`/EMPTY` (short: `/E`)
  Marks tags with the SGML content model EMPTY, like `<BR>`, `<IMG>`, `<HR>` etc. In HTML mode, they simply must not have a closing tag. In XHTML mode, they should have a trailing slash or a closing tag immediately following. The latter is not supported yet, but HSC can complete these tags with a slash if you forget it (or want to produce HTML4 and XHTML documents from one source - not that I understood what for...). Warning 88 will be issued when this happens.
`/JERK` (short: `/J`)
  tag is only used by jerks
`/LAZY` (short: `/L`)
  This modifier is just there for our laziness and defines some often needed attributes with a single letter; ```c`'' for ```CLASS:string`'', ```d`'' for ```DIR:enum("ltr|rtl")`'', ```h`'' for ```HREF:uri`'', ```i`'' for ```ID:id`'', ```k`'' for ```CLEAR:bool`'', ```l`'' for ```LANG:string`'', ```m`'' for ```MD:string`'', ```s`'' for ```SRC:uri`'', ```t`'' for ```TITLE:string`''. ```y`'' for ```STYLE:string`''. ```v`'' for ```events`''.
  For example, use `/LAZY="cil"`.
  "Events" is special in that it declares several scripting-related attributes at once: `onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup`. These are the most frequent attributes, collected under an entity in HTML 4.01.
`/OBSOLETE` (short: `/O`)
  tag is obsolete and should not be used any more. This e.g. concerns `<LISTING>`.
`/SKIPLF` (short: `/S`)
  skip a linefeed ("\n") that comes immediately after the tag. This is only useful for some of `hsc`'s special tags and only avoids some unnecessary empty lines.
`/SPECIAL` (short: `/SPC`)
  This one marks tags which are no normal tags with some attributes, but have their own syntax. The only HTML tag which has this modifier set is `<!>` (for SGML comments).
`/WHTSPC` (short: `/W`)
  If this modifier is set, any occurrence of the container is checked for succeeding/preceding white spaces. By default, this concerns the tags `<A>`, `<TITLE>`, headings and physical/logical styles like `<B>` or `<strong>`.