General Configuration of an Oxygen XML Author plugin Plugin
On the Oxygen XML Author plugin website there is an SDK with sample plugins (source and compiled Java code) and the Javadoc API necessary for developing custom plugins.
The minimal implementation of a plugin must provide:
- A Java class that extends the ro.sync.exml.plugin.Pluginclass.
- A Java class that implements the ro.sync.exml.plugin.PluginExtensioninterface.
- A plugin descriptor file called plugin.xml.
A ro.sync.exml.plugin.PluginDescriptor object is passed to the constructor
            of the subclass of the ro.sync.exml.plugin.Plugin class. It contains the
            following data items about the plugin:
         
- basedir (File object) - The base directory of the plugin.
- description (String object) - The description of the plugin.
- name (String object) - The name of the plugin.
- vendor (String object) - The vendor name of the plugin.
- version (String object) - The plugin version.
- id (String object) - A unique identifier.
- classLoaderType - You can choose between
                  preferOxygenResources(default value) andpreferReferencedResources. When choosingpreferOxygenResources, the libraries that are referenced in the Oxygen XML Author pluginlibdirectory will have precedence over those referenced in theplugin.xmlconfiguration file, if they have the same package names. When choosingpreferReferencedResources, the libraries that are referenced in theplugin.xmlconfiguration file will have precedence over those found in the Oxygen XML Author pluginlibdirectory, if they have the same package names.
The plugin descriptor is an XML file that defines how the plugin is integrated in
            Oxygen XML Author plugin and what libraries are loaded. The structure of the plugin descriptor
            file is fully described in a DTD grammar located in [OXYGEN_INSTALL_DIR]/plugins/plugin.dtd. Here is
            a sample plugin descriptor used by the Capitalize Lines sample plugin: 
         
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plugin SYSTEM "../plugin.dtd">
<plugin
    name="Capitalize Lines"
    description="Capitalize the first character on each line"
    version="1.0.0"
    vendor="SyncRO"
    class="ro.sync.sample.plugin.caplines.CapLinesPlugin">
    <runtime>
        <library name="lib/caplines.jar"/>
    </runtime>
    <extension type="selectionProcessor" 
    class="ro.sync.sample.plugin.caplines.CapLinesPluginExtension" 
           keyboardShortcut="ctrl shift EQUALS"/>
</plugin>If your plugin is of type Selection, Document or General, and thus
            contributes an action either to the contextual menu or to the main menu of the
            Text editing mode, then you can assign a keyboard shortcut for it.
            You can use the keyboardShortcut attribute for each
            extension element to specify the desired shortcut.
         
Tip
Referencing libraries
To reference libraries, use either of the following elements:
- <library name="libraryName" scope="global"/>- To point to specific libraries.- NoteYou can use the- ${oxygenInstallDir}editor variable as part of the value of the- nameattribute. You can also use a system variable (- ${system(var.name)}) or environment variable (- ${env(VAR_NAME)}).
- <librariesFolder name="libraryFolderPath" scope="global"/>- To point to multiple libraries located in the specified folder.
Both elements support the scope attribute that defines the loading
               priority. It can have one of the following three values:
- local - The library is loaded in the plugin's own class loader. This is the default behavior.
- global - The library is loaded in the main application class loader as
                     the last library in the list (as if it would be present in the application
                     libdirectory).
- globalHighPriority - The library is loaded in the main application class loader as the first library in the list (useful to patch certain resources located in other JARs of the application).
