<?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="apt,apt.vm"
            icon="icons/doxia.gif"
            contributorClass="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptEditorContributor"
            class="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptEditor"
            id="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptEditor">
      </editor>
   </extension>
   <extension
         point="org.eclipse.ui.editors.documentProviders">
      <provider
            class="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptDocumentProvider"
            id="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptDocumentProvider">
      </provider>
   </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.apt.ui.wizard.AptWizard"
            id="org.apache.maven.doxia.ide.eclipse.apt.ui.wizard.AptWizard">
      </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.apt.ui.editor.AptEditor.EditorContext"
            targetID="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptEditor.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.apt.ui.editor.AptEditor"
            targetID="org.apache.maven.doxia.ide.eclipse.apt.ui.editor.AptEditor">
         <!-- 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>
