package net.sourceforge.phpdt.internal.corext.phpdoc;
import java.io.FileReader;
import java.io.IOException;
import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation;
/**
* Utility class for static PHPdoc helper mehods
*/
public class PHPDocUtil {
/**
* Generate a PHPDoc hover text if possible
*
* @param hoverInfoBuffer
* @param filename
* @param location
*/
public static void appendPHPDoc(StringBuffer hoverInfoBuffer, String filename, PHPIdentifierLocation location) {
FileReader phpFileReader;
hoverInfoBuffer.append(location.toString());
hoverInfoBuffer.append(" - ");
try {
hoverInfoBuffer.append( getUsage(filename, location) );
hoverInfoBuffer.append("
");
// read the phpdoc for the function
if (location.getPHPDocOffset() >= 0) {
phpFileReader = new FileReader(filename);
char[] phpDocDeclarationCharArray = new char[location.getPHPDocLength()];
phpFileReader.skip(location.getPHPDocOffset());
phpFileReader.read(phpDocDeclarationCharArray, 0, location.getPHPDocLength());
PHPDocCharArrayCommentReader phpdocConverter = new PHPDocCharArrayCommentReader(phpDocDeclarationCharArray);
hoverInfoBuffer.append(phpdocConverter.getString());
// hoverInfoBuffer.append("
");
phpFileReader.close();
}
} catch (IOException e) {
return;
}
}
public static String getUsage(String filename, PHPIdentifierLocation location) {
FileReader phpFileReader;
String usage = location.getUsage();
if (usage!=null) {
return usage;
}
usage = "";
try {
phpFileReader = new FileReader(filename);
// read the function declaration
if (location.getOffset() >= 0 && (location.isMethod() || location.isConstructor() || location.isFunction() || location.isDefine())) {
char[] functionDeclarationCharArray = new char[256];
int offset = location.getOffset();
phpFileReader.skip(offset);
int length = phpFileReader.read(functionDeclarationCharArray, 0, 256);
if (length == -1) {
length = 256;
}
for (int i = 0; i < length; i++) {
if (functionDeclarationCharArray[i] == ')') {
length = i + 1;
break;
}
if (functionDeclarationCharArray[i] == '{' || functionDeclarationCharArray[i] == '}') {
length = i;
break;
}
}
usage = new String(functionDeclarationCharArray, 0, length);
}
phpFileReader.close();
} catch (IOException e) {
// do nothing
}
// cache the usage string:
location.setUsage(usage);
return usage;
}
}