Stencil Collection Structure and File Format¶
Stencil Collection Structure¶
A stencil collection is usually distributed as a single ZIP archive containing all related files for that collection.
This collection ZIP archive has one main XML file named (exactly)
Definition.xml
and other optional files or sub-directories containing
supporting files for the main XML (primarily icon files).
The Definition.xml
file name is case-sensitive and is the only required
file for a collection. All other files can be omitted when not needed.
Format of the Definition.xml file¶
Each Definition.xml
file defines a collection of stencils by providing
collection information and all stencil definitions. This is just a standard XML
file that can be created by virtually any text editor you have on your system.
General Structure¶
The Definition.xml file has the following structure:
<Shapes xmlns="http://www.evolus.vn/Namespace/Pencil"
xmlns:p="http://www.evolus.vn/Namespace/Pencil"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="your_collection_id"
displayName="Display name of your collection"
description="More description about this collection"
author="Names of the authors"
url="Optional URL to its web page">
<Properties>
<!-- Collection properties -->
</Properties>
<Script>
<!-- Shared script code for your collection -->
</Script>
<!-- Shape and shortcut definitions -->
<Shape>...</Shape>
<Shortcut>...</Shortcut>
</Shapes>
The following list summarizes the format:
- The out-most tag is
<Shapes>
with the namespace URI set tohttp://www.evolus.vn/Namespace/Pencil
. - Information about the collection is specified by the
<Shapes>
node’s attributes:id
,displayName
,description
,author
andurl
. - A collection may have properties that can referenced as initial values for
shape properties. These properties should be defined in the
<Properties>
section of the collection. - A collection may also have shared JavaScript code that can be re-used across
its shapes. Such code can be defined in the
<Script>
tag. - Each shape in the collection is defined in a separate
<Shape>
tag placed right under the root<Shapes>
tag. Please refer the next section for details on definition structure for a shape. - Beside shapes, a collection may also contain shortcuts which are references
to another shape with different default values for its properties. Shortcuts
are defined in
<Shortcut>
tags.
The <Shape> tag¶
Each shape in a collection is defined in a <Shape>
tag with the following
structure:
<Shape id="shape_id" displayName="Shape display name" icon="url_to_shape_icon">
<Properties>
<PropertyGroup name="Property group name">
<Property name="..."
displayName="..."
type="...">{Default value}</Property>
<Property>...</Property>
<Property>...</Property>
</PropertyGroup>
<PropertyGroup>...</PropertyGroup>
</Properties>
<Behaviors>
<For ref="target_element_id">
<!-- Single argument behavior, for example 'Font' -->
<Behavior_Name>JS expression for input value<Behavior_Name>
<!-- Multi argument behavior, for example 'BoxFit' -->
<Other_Behavior_Name>
<Arg>JS expression for argument 1</Arg>
<Arg>JS expression for argument 2</Arg>
...
</Other_Behavior_Name>
</For>
</Behaviors>
<p:Content xmlns:p="http://www.evolus.vn/Namespace/Pencil" xmlns="http://www.w3.org/2000/svg">
<!-- SVG content of the stencil
Each element can be identified by the 'id' attribute
which is referenced by the 'ref' attributes in the Behavior
sections defined above -->
</p:Content>
</Shape>
The collection’s <Properties> tag¶
The collection’s <Properties>
tag is used as the place to define properties
at the collection level. This is the recommended way for stencil author to
define changeable default values for shape properties. Properties defined in
this section can be referenced in the stencil’s code using the $$
syntax
and can be changed by users by right-clicking on the collection in the
collection pane.
The structure of this section is similar to the <Properties>
section at the
<Shape>
level:
<Shapes>
...
<Properties>
<PropertyGroup name="Text">
<Property displayName="Default Text Font"
name="defaultTextFont"
type="Font">Helvetica|normal|normal|12px</Property>
<Property displayName="Default Text Color"
name="defaultTextColor"
type="Color">#000000ff</Property>
</PropertyGroup>
</Properties>
...
</Shapes>
The collection’s <Script> tag¶
The collection’s <Script>
tag is used to define shared JavaScript code
within a collection. JavaScript code in this section will be executed when the
collection is loaded into Pencil. In the execution context of these scripts, a
special object named collection
is available and is virtually bound to the
collection itself. This object is also available in the execution of behavior
and action code of each stencil so developers can use it as a shared object for
storing function definitions and constants that need to be used across
stencils.
<Shapes>
...
<Script commnent="Shared collection objects">
//sample constant definition
collection.DEFAULT_PADDING = 5;
//sample shared function
collection.gradToDeg = function (grad) {
return grad * 180 / Math.PI;
};
</Script>
...
</Shapes>
The collection’s <Shortcut> tag¶
The <Shortcut>
tag creates an alias to an existing stencil and provides
different initial values to that stencil’s properties. The structure of this
tag is described below:
<Shapes>
...
<Shortcut displayName="Display name"
icon="..."
to="[collection_id:]stencil_id">
<PropertyValue name="property_name">new default value</PropertyValue>
<PropertyValue>...</PropertyValue>
<PropertyValue>...</PropertyValue>
</Shortcut>
...
</Shapes>