<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<?eclipse version="3.2"?>
<plugin>
   <!-- Doxia Plugin Text Editors -->
   <extension
         point="org.eclipse.ui.editors">
      <editor
            name="%editor.name"
            extensions="docbook,xml,docbook.vm,xml.vm"
            icon="icons/doxia.gif"
            contributorClass="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditorContributor"
            class="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor"
            id="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor">
      </editor>
   </extension>

   <!-- Doxia Wizards -->
   <extension
         point="org.eclipse.ui.newWizards">
      <category
            name="%wizard.category.name"
            id="org.apache.maven.doxia.ide.eclipse.ui.wizard.DoxiaWizard">
      </category>
      <wizard
            name="%wizard.name"
            icon="icons/doxia.gif"
            category="org.apache.maven.doxia.ide.eclipse.ui.wizard.DoxiaWizard"
            class="org.apache.maven.doxia.ide.eclipse.docbook.ui.wizard.DocbookWizard"
            id="org.apache.maven.doxia.ide.eclipse.docbook.ui.wizard.DocbookWizard">
      </wizard>
   </extension>

   <!-- http://www.eclipse.org/articles/article.php?file=Article-action-contribution/index.html -->
   <extension point="org.eclipse.ui.popupMenus">
      <viewerContribution
            id="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor.EditorContext"
            targetID="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor.EditorContext">
         <menu
             id="subMenu"
             label="%menu.styles"
             path="additions">
           <separator name="styles"/>
         </menu>
         <!-- Actions should be ordered -->
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.popup.actions.MonospacedAction"
            label="%action.monospaced.label"
            tooltip="%action.monospaced.tooltip"
            menubarPath="subMenu/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.MonospacedActionDelegate">
        </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.popup.actions.ItalicAction"
            label="%action.italic.label"
            tooltip="%action.italic.tooltip"
            menubarPath="subMenu/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.ItalicActionDelegate">
        </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.popup.actions.BoldAction"
            label="%action.bold.label"
            tooltip="%action.bold.tooltip"
            menubarPath="subMenu/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.BoldActionDelegate">
        </action>
     </viewerContribution>
   </extension>
   <extension point="org.eclipse.ui.editorActions">
      <editorContribution
            id="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor"
            targetID="org.apache.maven.doxia.ide.eclipse.docbook.ui.editor.DocbookEditor">
         <!-- Contributing ordered actions to toolbar -->
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.toolbar.TableAction"
            label="%action.table.label"
            tooltip="%action.table.tooltip"
            toolbarPath="Normal/additions"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.TableActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.toolbar.LinkAction"
            label="%action.link.label"
            tooltip="%action.link.tooltip"
            toolbarPath="Normal/additions"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.LinkActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.toolbar.MonospacedAction"
            label="%action.monospaced.label"
            tooltip="%action.monospaced.tooltip"
            toolbarPath="Normal/additions"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.MonospacedActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.toolbar.ItalicAction"
            label="%action.italic.label"
            tooltip="%action.bold.tooltip"
            toolbarPath="Normal/additions"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.ItalicActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.toolbar.BoldAction"
            label="%action.bold.label"
            tooltip="%action.bold.tooltip"
            toolbarPath="Normal/additions"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.BoldActionDelegate">
         </action>

         <!-- Contributing ordererd actions to menu -->
         <menu
             id="editStyles"
             label="%menu.styles"
             path="edit/additions">
           <separator name="styles"/>
         </menu>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.editor.menu.MonospacedAction"
            label="%action.monospaced.label"
            tooltip="%action.monospaced.tooltip"
            menubarPath="edit/editStyles/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.MonospacedActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.editor.menu.ItalicAction"
            label="%action.italic.label"
            tooltip="%action.bold.tooltip"
            menubarPath="edit/editStyles/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.ItalicActionDelegate">
         </action>
         <action
            id="org.apache.maven.doxia.ide.eclipse.common.ui.contribution.actions.menu.BoldAction"
            label="%action.bold.label"
            tooltip="%action.bold.tooltip"
            menubarPath="edit/editStyles/styles"
            class="org.apache.maven.doxia.ide.eclipse.common.ui.actions.BoldActionDelegate">
         </action>
     </editorContribution>
   </extension>
</plugin>
