You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by vs...@apache.org on 2008/04/22 15:00:29 UTC

svn commit: r650506 - /maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java

Author: vsiveton
Date: Tue Apr 22 06:00:19 2008
New Revision: 650506

URL: http://svn.apache.org/viewvc?rev=650506&view=rev
Log:
o added more color rules

Modified:
    maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java

Modified: maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java?rev=650506&r1=650505&r2=650506&view=diff
==============================================================================
--- maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java (original)
+++ maven/doxia/doxia-tools/trunk/doxia-ide/eclipse/plugins/org.apache.maven.doxia.ide.eclipse.confluence.ui/src/main/java/org/apache/maven/doxia/ide/eclipse/confluence/ui/editor/ConfluenceEditor.java Tue Apr 22 06:00:19 2008
@@ -21,11 +21,10 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import org.apache.maven.doxia.ide.eclipse.common.ui.ColorManager;
 import org.apache.maven.doxia.ide.eclipse.common.ui.CommonPlugin;
 import org.apache.maven.doxia.ide.eclipse.common.ui.actions.AbstractBoldAction;
 import org.apache.maven.doxia.ide.eclipse.common.ui.actions.AbstractItalicAction;
@@ -49,7 +48,6 @@
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.Region;
-import org.eclipse.jface.text.TextAttribute;
 import org.eclipse.jface.text.contentassist.ContentAssistant;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.contentassist.IContentAssistant;
@@ -58,7 +56,10 @@
 import org.eclipse.jface.text.hyperlink.URLHyperlink;
 import org.eclipse.jface.text.hyperlink.URLHyperlinkDetector;
 import org.eclipse.jface.text.rules.EndOfLineRule;
+import org.eclipse.jface.text.rules.ICharacterScanner;
 import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.MultiLineRule;
 import org.eclipse.jface.text.rules.RuleBasedScanner;
 import org.eclipse.jface.text.rules.SingleLineRule;
 import org.eclipse.jface.text.rules.Token;
@@ -143,8 +144,7 @@
                     return "[" + link.getURL() + "]";
                 }
 
-                return "[[" + link.getName() + "|" +
-                    link.getURL() + "]]";
+                return "[[" + link.getName() + "|" + link.getURL() + "]]";
             }
         } );
         editor.setAction( IActionConstants.TABLE_ACTION, new AbstractTableAction( editor )
@@ -204,6 +204,9 @@
     class ConfluenceSourceViewerConfiguration
         extends AbstractTextSourceViewerConfiguration
     {
+        /**
+         * Default constructor.
+         */
         public ConfluenceSourceViewerConfiguration()
         {
             super();
@@ -245,9 +248,12 @@
         class AptURLHyperlinkDetector
             extends URLHyperlinkDetector
         {
-
+            /**
+             * Default constructor.
+             */
             public AptURLHyperlinkDetector()
             {
+                super();
             }
 
             @Override
@@ -303,8 +309,8 @@
 
                     // Right to "://"
                     // APT FIX
-                    StringTokenizer tokenizer =
-                        new StringTokenizer( line.substring( urlSeparatorOffset + 3 ), " \t\n\r\f<>[]", false ); //$NON-NLS-1$
+                    StringTokenizer tokenizer = new StringTokenizer( line.substring( urlSeparatorOffset + 3 ),
+                                                                     " \t\n\r\f<>[]", false ); //$NON-NLS-1$
                     if ( !tokenizer.hasMoreTokens() )
                         return null;
 
@@ -354,6 +360,9 @@
     class ConfluenceScanner
         extends AbstractTextScanner
     {
+        /**
+         * Default constructor.
+         */
         public ConfluenceScanner()
         {
             super();
@@ -362,32 +371,188 @@
         @Override
         public List<IRule> getRules()
         {
-            List<IRule> rules = new ArrayList<IRule>();
+            List<IRule> rules = new LinkedList<IRule>();
 
-            // TODO add more rules and review color!
+            // sections title rule
+            rules.add( new SectionTitleEndOfLineRule() );
 
             // horizontal rule
-            rules.add( new EndOfLineRule(
-                                          "----",
-                                          new Token(
-                                                     new TextAttribute(
-                                                                        ColorManager.getInstance().getColor(
-                                                                                                             ColorManager.STRING ) ) ) ) );
+            rules.add( new EndOfLineRule( "----", SinkToken.HORIZONTALRULE_TOKEN ) );
 
             // monospaced rule
-            rules.add( new SingleLineRule( "{{", "}}", monospacedToken ) );
+            rules.add( new SingleLineRule( "{{", "}}", SinkToken.MONOSPACED_TOKEN ) );
 
-            // bold rule
-            rules.add( new SingleLineRule( "*", "*", boldToken ) );
+            // bold rule or list rule
+            rules.add( new SingleLineRule( "*", " ", SinkToken.BOLD_TOKEN ) );
 
             // italic rule
-            rules.add( new SingleLineRule( "_", "_", italicToken ) );
+            rules.add( new SingleLineRule( "_", "_", SinkToken.ITALIC_TOKEN ) );
 
             // link rule
-            rules.add( new SingleLineRule( "[[", "]]", linkToken ) );
+            rules.add( new SingleLineRule( "[", "]", SinkToken.LINK_TOKEN ) );
+
+            // numbered list rule
+            rules.add( new SingleLineRule( "#", " ", SinkToken.BOLD_TOKEN ) );
+
+            // definition list rule
+            rules.add( new MultiLineRule( "{note", "{note}", SinkToken.DEFINITION_TOKEN ) );
+            rules.add( new MultiLineRule( "{quote}", "{quote}", SinkToken.DEFINITION_TOKEN ) );
+            rules.add( new MultiLineRule( "{info", "{info}", SinkToken.DEFINITION_TOKEN ) );
+            rules.add( new MultiLineRule( "{tip", "{tip}", SinkToken.DEFINITION_TOKEN ) );
+
+            // verbatim rule
+            rules.add( new MultiLineRule( "{noformat}", "{noformat}", SinkToken.VERBATIM_TOKEN ) );
+            rules.add( new MultiLineRule( "{code", "{code}", SinkToken.VERBATIM_TOKEN ) );
+
+            // table rule
+            rules.add( new EndOfLineRule( "|", SinkToken.TABLE_TOKEN ) );
+
+            // TODO better unsupported
+            // some text effects unsupported by Doxia
+            rules.add( new SingleLineRule( "??", "??", UNSUPPORTED_TOKEN ) );
+            rules.add( new SingleLineRule( "-", "-", UNSUPPORTED_TOKEN ) );
+            rules.add( new SingleLineRule( "+", "+", UNSUPPORTED_TOKEN ) );
+            rules.add( new SingleLineRule( "^", "^", UNSUPPORTED_TOKEN ) );
+            rules.add( new SingleLineRule( "~", "~", UNSUPPORTED_TOKEN ) );
+
+            // some other advanced formatting unsupported by Doxia
+            rules.add( new MultiLineRule( "{color", "{color}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{panel", "{panel}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{warning", "{warning}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{composition-setup", "{composition-setup}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{float", "{float}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{cloak", "{cloak}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{deck", "{deck}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{card", "{card}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{show-card", "{show-card}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{cache", "{cache}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{beanshell", "{beanshell}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{sql", "{sql}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{slideshow", "{slideshow}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{slide", "{slide}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{rsvp", "{rsvp}", UNSUPPORTED_TOKEN ) );
+
+            // Other Misc unsupported by Doxia
+            rules.add( new MultiLineRule( "{vote", "{vote}", UNSUPPORTED_TOKEN ) );
+            rules.add( new MultiLineRule( "{survey", "{survey}", UNSUPPORTED_TOKEN ) );
+
+            // escaped character rule
+            rules.add( new EscapedCharacterRule( KEYWORD_TOKEN ) );
 
             return rules;
         }
+
+        class SectionTitleEndOfLineRule
+            extends EndOfLineRule
+        {
+            /**
+             * Default constructor.
+             */
+            public SectionTitleEndOfLineRule()
+            {
+                super( "h", Token.UNDEFINED );
+            }
+
+            @Override
+            protected IToken doEvaluate( ICharacterScanner scanner, boolean resume )
+            {
+                if ( resume )
+                {
+                    if ( endSequenceDetected( scanner ) )
+                    {
+                        return fToken;
+                    }
+                }
+                else
+                {
+                    try
+                    {
+                        char c = (char) scanner.read();
+                        if ( c == 'h' )
+                        {
+                            // last line should be empty
+                            if ( ( isEmptyPrecedentLine( fDocument, fOffset ) ) )
+                            {
+                                c = (char) scanner.read();
+                                if ( Character.isDigit( c ) )
+                                {
+                                    if ( endSequenceDetected( scanner ) )
+                                    {
+                                        switch ( c )
+                                        {
+                                            case '1':
+                                                fToken = SinkToken.SECTIONTITLE1_TOKEN;
+                                                break;
+                                            case '2':
+                                                fToken = SinkToken.SECTIONTITLE2_TOKEN;
+                                                break;
+                                            case '3':
+                                                fToken = SinkToken.SECTIONTITLE3_TOKEN;
+                                                break;
+                                            case '4':
+                                                fToken = SinkToken.SECTIONTITLE4_TOKEN;
+                                                break;
+                                            case '5':
+                                                fToken = SinkToken.SECTIONTITLE5_TOKEN;
+                                                break;
+                                            default:
+                                                fToken = Token.UNDEFINED;
+                                                break;
+                                        }
+                                        return fToken;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    catch ( BadLocationException e )
+                    {
+                        // nop
+                    }
+                }
+
+                scanner.unread();
+                return Token.UNDEFINED;
+            }
+        }
+
+        class EscapedCharacterRule
+            implements IRule
+        {
+            private IToken token;
+
+            /**
+             * Constructor.
+             *
+             * @param token the associated token
+             */
+            public EscapedCharacterRule( IToken token )
+            {
+                this.token = token;
+            }
+
+            /** {@inheritDoc} */
+            public synchronized IToken evaluate( ICharacterScanner scanner )
+            {
+                char character = (char) scanner.read();
+                if ( character == '\\' )
+                {
+                    character = (char) scanner.read();
+                    if ( Character.isDefined( character ) )
+                    {
+                        return token;
+                    }
+
+                    scanner.unread();
+
+                    return Token.UNDEFINED;
+                }
+
+                scanner.unread();
+
+                return Token.UNDEFINED;
+            }
+        }
     }
 
     class ConfluenceContentAssistProcessor
@@ -401,8 +566,10 @@
         @Override
         public Image[] getImageMarkups()
         {
-            return new Image[] { CommonPlugin.getImage( CommonPlugin.IMG_ITALIC ),
-                CommonPlugin.getImage( CommonPlugin.IMG_BOLD ), CommonPlugin.getImage( CommonPlugin.IMG_MONOSPACED ),
+            return new Image[] {
+                CommonPlugin.getImage( CommonPlugin.IMG_ITALIC ),
+                CommonPlugin.getImage( CommonPlugin.IMG_BOLD ),
+                CommonPlugin.getImage( CommonPlugin.IMG_MONOSPACED ),
                 CommonPlugin.getImage( CommonPlugin.IMG_LINK ) };
         }