<?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="fml"
            icon="icons/doxia.gif"
            contributorClass="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditorContributor"
            class="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditor"
            id="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditor">
      </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.fml.ui.wizard.FmlWizard"
            id="org.apache.maven.doxia.ide.eclipse.fml.ui.wizard.FmlWizard">
      </wizard>
   </extension>

   <!-- http://www.eclipse.org/articles/article.php?file=Article-action-contribution/index.html -->
   <!-- Doesn't work yet: needs WSTP M6
      https://bugs.eclipse.org/bugs/show_bug.cgi?id=212330
      https://bugs.eclipse.org/bugs/show_bug.cgi?id=224040 -->
   <extension point="org.eclipse.ui.popupMenus">
      <viewerContribution
            id="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditor.EditorContext"
            targetID="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditor.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.fml.ui.editor.FmlEditor"
            targetID="org.apache.maven.doxia.ide.eclipse.fml.ui.editor.FmlEditor">
         <!-- 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>
