import org.eclipse.jface.preference.IPreferenceStore;
import java.util.Hashtable;
-import java.util.Enumeration;
import java.util.ArrayList;
import java.io.StringReader;
import java.io.*;
}
}
- /**
- * Create markers according to the external parser output
- */
- private static void createMarkers(final String output, final IFile file) throws CoreException {
- // delete all markers
- file.deleteMarkers(IMarker.PROBLEM, false, 0);
-
- int indx = 0;
- int brIndx;
- boolean flag = true;
- while ((brIndx = output.indexOf("<br />", indx)) != -1) {
- // newer php error output (tested with 4.2.3)
- scanLine(output, file, indx, brIndx);
- indx = brIndx + 6;
- flag = false;
- }
- if (flag) {
- while ((brIndx = output.indexOf("<br>", indx)) != -1) {
- // older php error output (tested with 4.2.3)
- scanLine(output, file, indx, brIndx);
- indx = brIndx + 4;
- }
- }
- }
-
private static void scanLine(final String output,
final IFile file,
final int indx,
pushOnAstNodes(new HTMLCode(chars, htmlStart,currentPosition));
}
+ /**
+ * Create a new task.
+ */
+ public static final void createNewTask() {
+ final int currentPosition = SimpleCharStream.getPosition();
+ final String todo = SimpleCharStream.currentBuffer.substring(currentPosition+1,
+ SimpleCharStream.currentBuffer.indexOf("\n",
+ currentPosition)-1);
+ try {
+ setMarker(fileToParse,
+ "todo : " + todo,
+ SimpleCharStream.getBeginLine(),
+ TASK,
+ "Line "+SimpleCharStream.getBeginLine());
+ } catch (CoreException e) {
+ PHPeclipsePlugin.log(e);
+ }
+ }
+
private static final void parse() throws ParseException {
phpFile();
}
<PHPPARSING> SPECIAL_TOKEN :
{
"//" : IN_SINGLE_LINE_COMMENT
-|
- "#" : IN_SINGLE_LINE_COMMENT
-|
- <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
-|
- "/*" : IN_MULTI_LINE_COMMENT
+| "#" : IN_SINGLE_LINE_COMMENT
+| <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
+| "/*" : IN_MULTI_LINE_COMMENT
}
<IN_SINGLE_LINE_COMMENT> SPECIAL_TOKEN :
{
<SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > : PHPPARSING
+| "?>" : DEFAULT
}
-<IN_SINGLE_LINE_COMMENT> SPECIAL_TOKEN :
+<IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT> SPECIAL_TOKEN :
{
- <SINGLE_LINE_COMMENT_PHPEND : "?>" > : DEFAULT
+ "todo" {PHPParser.createNewTask();}
}
-<IN_FORMAL_COMMENT>
-SPECIAL_TOKEN :
+<IN_FORMAL_COMMENT> SPECIAL_TOKEN :
{
- <FORMAL_COMMENT: "*/" > : PHPPARSING
+ "*/" : PHPPARSING
}
-<IN_MULTI_LINE_COMMENT>
-SPECIAL_TOKEN :
+<IN_MULTI_LINE_COMMENT> SPECIAL_TOKEN :
{
- <MULTI_LINE_COMMENT: "*/" > : PHPPARSING
+ "*/" : PHPPARSING
}
<IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
<PHPPARSING> TOKEN :
{
- < DOLLAR_ID: <DOLLAR> <IDENTIFIER> >
+ <DOLLAR_ID: <DOLLAR> <IDENTIFIER>>
}
void phpFile() :
{
try {
(PhpBlock())*
- <EOF>
+ {PHPParser.createNewHTMLCode();}
} catch (TokenMgrError e) {
PHPeclipsePlugin.log(e);
errorStart = SimpleCharStream.getPosition();
FieldDeclaration field;
}
{
- method = MethodDeclaration() {method.setParent(classDeclaration);}
-| field = FieldDeclaration()
+ method = MethodDeclaration() {classDeclaration.addMethod(method);}
+| field = FieldDeclaration() {classDeclaration.addField(field);}
}
/**
{
<VAR> variableDeclaration = VariableDeclarator()
{arrayList.add(variableDeclaration);
- outlineInfo.addVariable(new String(variableDeclaration.name));
- currentSegment.add(variableDeclaration);}
+ outlineInfo.addVariable(new String(variableDeclaration.name));}
( <COMMA> variableDeclaration = VariableDeclarator()
{arrayList.add(variableDeclaration);
- outlineInfo.addVariable(new String(variableDeclaration.name));
- currentSegment.add(variableDeclaration);}
+ outlineInfo.addVariable(new String(variableDeclaration.name));}
)*
try {
<SEMICOLON>
String VariableDeclaratorId() :
{
String expr;
- Expression expression;
+ Expression expression = null;
final StringBuffer buff = new StringBuffer();
final int pos = SimpleCharStream.getPosition();
ConstantIdentifier ex;
}
{
try {
- expr = Variable() {buff.append(expr);}
+ expr = Variable()
( LOOKAHEAD(2)
{ex = new ConstantIdentifier(expr.toCharArray(),
pos,
SimpleCharStream.getPosition());}
expression = VariableSuffix(ex)
- {buff.append(expression.toStringExpression());}
)*
- {return buff.toString();}
+ {
+ if (expression == null) {
+ return expr;
+ }
+ return expression.toStringExpression();
+ }
} catch (ParseException e) {
errorMessage = "'$' expected for variable identifier";
errorLevel = ERROR;
}
}
+/**
+ * Return a variablename without the $.
+ * @return a variable name
+ */
String Variable():
{
final StringBuffer buff;
}
|
<DOLLAR> expr = VariableName()
- {return "$" + expr;}
+ {return expr;}
}
/**
{
final MethodDeclaration functionDeclaration;
final Block block;
+ final OutlineableWithChildren seg = currentSegment;
}
{
<FUNCTION>
errorEnd = SimpleCharStream.getPosition() + 1;
throw e;
}
- {
- if (currentSegment != null) {
- currentSegment.add(functionDeclaration);
- currentSegment = functionDeclaration;
- }
- }
+ {currentSegment = functionDeclaration;}
block = Block()
- {
- functionDeclaration.statements = block.statements;
- if (currentSegment != null) {
- currentSegment = (OutlineableWithChildren) currentSegment.getParent();
- }
- return functionDeclaration;
- }
+ {functionDeclaration.statements = block.statements;
+ currentSegment = seg;
+ return functionDeclaration;}
}
/**
}
formalParameters = FormalParameters()
{return new MethodDeclaration(currentSegment,
- identifierChar,
- formalParameters,
- reference != null,
- pos,
- SimpleCharStream.getPosition());}
+ identifierChar,
+ formalParameters,
+ reference != null,
+ pos,
+ SimpleCharStream.getPosition());}
}
/**
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
errorEnd = SimpleCharStream.getPosition() + 1;
- throw e;
+ processParseException(e);
}
[ var = FormalParameter()
{parameters.put(new String(var.name),var);}
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
errorEnd = SimpleCharStream.getPosition() + 1;
- throw e;
+ processParseException(e);
}
{return parameters;}
}
VarAssignation varAssignation() :
{
String varName;
- final Expression expression;
+ final Expression initializer;
final int assignOperator;
final int pos = SimpleCharStream.getPosition();
}
varName = VariableDeclaratorId()
assignOperator = AssignmentOperator()
try {
- expression = Expression()
+ initializer = Expression()
} catch (ParseException e) {
if (errorMessage != null) {
throw e;
throw e;
}
{return new VarAssignation(varName.toCharArray(),
- expression,
+ initializer,
assignOperator,
pos,
SimpleCharStream.getPosition());}
try {
(<PHPSTARTLONG> | <PHPSTARTSHORT>)
} catch (ParseException e) {
- errorMessage = "End of file unexpected, '<?php' expected";
+ errorMessage = "unexpected end of file , '<?php' expected";
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition();
errorEnd = SimpleCharStream.getPosition();
statement = Statement() {if (phpDocument == currentSegment) pushOnAstNodes(statement);
return statement;}
} catch (ParseException e) {
+ if (errorMessage != null) throw e;
errorMessage = "statement expected";
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
}
| statement = ClassDeclaration() {return statement;}
| statement = MethodDeclaration() {if (phpDocument == currentSegment) pushOnAstNodes(statement);
+ currentSegment.add((MethodDeclaration) statement);
return statement;}
}
{
statement = StatementNoBreak() {return statement;}
| statement = ClassDeclaration() {return statement;}
-| statement = MethodDeclaration() {return statement;}
+| statement = MethodDeclaration() {currentSegment.add((MethodDeclaration) statement);
+ return statement;}
}
VariableDeclaration[] LocalVariableDeclaration() :