/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.editor.php.internal.ui.editor.scanner;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.IWordDetector;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WordRule;
import com.aptana.editor.common.text.rules.CommentScanner;
import com.aptana.editor.php.internal.parser.PHPTokenType;
@SuppressWarnings("nls")
public class PHPDocScanner extends CommentScanner
{
private static Set<String> TAGS = new HashSet<String>();
static
{
TAGS.add("@abstract");
TAGS.add("@access");
TAGS.add("@author");
TAGS.add("@category");
TAGS.add("@copyright");
TAGS.add("@deprecated");
TAGS.add("@example");
TAGS.add("@filesource");
TAGS.add("@final");
TAGS.add("@global");
TAGS.add("@ignore");
TAGS.add("@internal");
TAGS.add("@license");
TAGS.add("@link");
TAGS.add("@method");
TAGS.add("@name");
TAGS.add("@package");
TAGS.add("@param");
TAGS.add("@property");
TAGS.add("@return");
TAGS.add("@see");
TAGS.add("@since");
TAGS.add("@static");
TAGS.add("@staticvar");
TAGS.add("@subpackage");
TAGS.add("@throws");
TAGS.add("@todo");
TAGS.add("@tutorial");
TAGS.add("@uses");
TAGS.add("@var");
TAGS.add("@version");
TAGS.add("@xlink");
}
public PHPDocScanner()
{
super(new Token(PHPTokenType.COMMENT_PHPDOC.toString()));
}
protected List<IRule> createRules()
{
List<IRule> rules = super.createRules();
WordRule wordRule = new WordRule(new PHPTagDetector(), Token.UNDEFINED, true);
IToken tagToken = new Token(PHPTokenType.KEYWORD_OTHER.toString());
for (String tag : TAGS)
{
wordRule.addWord(tag, tagToken);
}
rules.add(wordRule);
return rules;
}
/**
* Detects PHPDoc tags
*
* @author cwilliams
*/
private static class PHPTagDetector implements IWordDetector
{
public boolean isWordStart(char c)
{
return c == '@';
}
public boolean isWordPart(char c)
{
return Character.isLetter(c);
}
}
}