# &quanta; Advanced Features

This chapter outlines the advanced features of &quanta;.

## Using Kommander with &quanta;

Kommander by Marc Britton.

&debugging-quanta;

## &quanta; Tag Files

&quanta; uses tag files to define the various actions that are available for toolbar association. These tag files can define a simple tag with no attributes or they can define a tag dialog box that will remember all of the available attributes for you so that you can simply fill in the blanks.

Spaces don't adversely affect anything, but watch out for & and < characters. These should likely be replaced by &amp; and &lt; respectively in all of the xml based &quanta; resource files. This won't cause a crash, but you'll have chunks of your work disappear if you forget.

### Tag File Structure

####

Possible entries for the type attribute of the attr tag: To get a list of possible types, I did the following against the tag dirs: grep -h type= *.tag |sed -e 's/^.*type=\"\([a-z]*\).*/\1/'| sort |uniq

These are the types for tag dialog items:

- check
- color
- input
- list
- text
- url

These are the argument types inside the php function tags, ask Andras if these are pretty much free form and the former are keywords:

- array
- bool
- boolean
- char
- constant
- flags
- float
- function
- int
- long
- mixed
- number
- object
- resource
- resoure
- string

The tag definition has the following optional attributes:

hasScript

  "1" if common events/scripts can be associated to this tag (onclick etc.)

hasCore

  "1" if common core attributes are present (id, class, etc)

hasI18n

  "1" if common i18n attributes are present (lang, dir)

single

  "1" if it is a single tag (eg. <hr>)

optional

  "1" if it is an optional tag (eg. <colgroup>)

returnType

  for scripting languages, the function return type if any. (eg int)

The <attr> definition can have the following attributes:

defaultValue

  the default value of the tag ???

status

  can be optional, required, implied

####

For scripting language functions, define tag files as such:

    <!DOCTYPE tags>
    <tags>

    <tag name=[function-name] type=function returnType=[return-type]>
      <attr name=[argument1]> type=[argument1-type]></attr>
      <attr name=[argument2] type=[argument2-type] status=optional></attr>
        ...
    </tag>
    <tag ...
    ...
    </tag>
     ...
    </tags>

Items in [] are to be substituted. argument1 above is required and argument2 is optional.

A tag file that you want to have tag dialog editing of should look like this:

    <!DOCTYPE tags>
    <tags>
      <tag name="[name] [hasCore="[01]" hasI18n="[01]" hasScript="[01]"]>
        <attr name="[attribute1]" type="[check|color|input|list|text|url]">
          <text></text>
          <textlocation col="0" row="0" />
          <tooltip></tooltip>
          <location col="1" row="0" colspan="3"/>
        </attr>
      ...
      </tag>
      ...
    </tags>

<text></text> defines brief descriptive text for the object.

<textlocation ... /> defines row and column layout for <text> tag.

<tooltip></tooltip> is text description for a hovering user.

<location ../> defines the location of the object for that attribute.

All the attributes must be enumarated in the tag file. If you don't want to appear in the tagdialog, just forget the <location> tag. eg <attr ...> </attr>