package de.peeeq.wurstscript.attributes;
import de.peeeq.wurstscript.WurstKeywords;
import de.peeeq.wurstscript.ast.*;
import de.peeeq.wurstscript.attributes.names.FuncLink;
import de.peeeq.wurstscript.attributes.names.NameLink;
import de.peeeq.wurstscript.types.WurstType;
import de.peeeq.wurstscript.utils.Utils;
import org.eclipse.jdt.annotation.Nullable;
import java.util.List;
public class DescriptionHtml {
public static @Nullable String description(WurstModel wurstModel) {
return null;
}
public static String description(VarDef v) {
return "Variable " + v.getName() + " of type " + htmlType(v.attrTyp());
}
public static String description(FunctionDefinition f) {
String comment = f.attrComment();
comment = comment.replaceAll("\n", "
");
String params = getParameterString(f);
String returnTypeHtml = htmlType(f.attrReturnTyp());
String functionDescription;
if (f.attrComment().length() > 1) {
functionDescription = comment;
} else {
functionDescription = "";
}
String funcName = f.getName();
if (f instanceof ExtensionFuncDef) {
ExtensionFuncDef exf = (ExtensionFuncDef) f;
funcName = htmlType(exf.getExtendedType().attrTyp()) + "." + funcName;
}
functionDescription += "
" + "function " + funcName + "(" + params + ") ";
if (!f.attrTyp().isVoid()) {
functionDescription += "
returns " + returnTypeHtml;
}
functionDescription += "
" + "defined in " + nearestScopeName(f);
return functionDescription;
}
public static String getParameterString(AstElementWithParameters f) {
StringBuilder descrhtml = new StringBuilder();
boolean first = true;
for (WParameter p : f.getParameters()) {
if (!first) {
descrhtml.append(", ");
}
descrhtml.append(htmlType(p.attrTyp())).append(" ").append(p.getName());
first = false;
}
String params = descrhtml.toString();
return params;
}
public static String description(ConstructorDef constr) {
ClassDef c = constr.attrNearestClassDef();
String comment = constr.attrComment();
comment = comment.replaceAll("\n", "
");
String descr;
if (constr.attrComment().length() > 1) {
descr = comment;
} else {
descr = "";
}
descr += "
" +
"construct(" + getParameterString(constr) + ") "
+ "
" + "defined in class " + c.getName();
return descr;
}
public static String htmlType(WurstType attrTyp) {
String typ = Utils.escapeHtml(attrTyp.getName());
for (String s : WurstKeywords.JASSTYPES) {
if (s.equals(typ)) {
return "" + typ + "";
}
}
return typ;
}
private static String nearestScopeName(NameDef n) {
if (n.attrNearestNamedScope() != null) {
return Utils.printElement(n.attrNearestNamedScope());
} else {
return "Global";
}
}
public static String description(NameDef n) {
String comment = n.attrComment();
comment = comment.replaceAll("\n", "
");
String additionalProposalInfo;
if (n.attrComment().length() > 1) {
additionalProposalInfo = comment;
} else {
additionalProposalInfo = "";
}
additionalProposalInfo += "
" + htmlType(n.attrTyp()) + " " + n.getName()
+ "
" + "defined in " + nearestScopeName(n);
return additionalProposalInfo;
}
public static String description(Annotation annotation) {
// TODO different annotations
return "This is an annotation ";
}
public static @Nullable String description(List> l) {
// just a list of strings
return null;
}
public static @Nullable String description(CompilationUnit compilationUnit) {
return null;
}
public static @Nullable String description(EndFunctionStatement endFunctionStatement) {
return null;
}
public static @Nullable String description(ExprBinary e) {
FuncLink f = e.attrFuncLink();
if (f != null) {
return "This is an overloaded operator:
" +
f.getDef().descriptionHtml();
}
return null;
}
public static @Nullable String description(ExprBoolVal exprBoolVal) {
return null;
}
public static String description(ExprCast e) {
return "Change the type of the left expression to " + htmlType(e.getTyp().attrTyp());
}
public static String description(ExprClosure e) {
return "This is a closure of type " + htmlType(e.attrExpectedTypAfterOverloading());
}
public static String description(FuncRef fr) {
FuncLink def = fr.attrFuncLink();
if (def != null) {
return def.getDef().descriptionHtml();
}
return "";
}
public static String description(NameRef nr) {
NameLink nameDef = nr.attrNameLink();
if (nameDef == null) {
return nr.getVarName() + " is not defined yet.";
}
return nameDef.getDef().descriptionHtml();
}
public static @Nullable String description(ExprIncomplete exprIncomplete) {
return null;
}
public static String description(ExprInstanceOf e) {
return "instanceof: Check if an object has a type which is a subtype of " + htmlType(e.getTyp().attrTyp());
}
public static @Nullable String description(ExprIntVal exprIntVal) {
return null;
}
public static String description(ExprNewObject e) {
return "new: Create a new object of class " + e.getTypeName();
}
public static String description(ExprNull e) {
return "'null' of type " + e.attrExpectedTyp();
}
public static @Nullable String description(ExprRealVal exprRealVal) {
return null;
}
public static String description(ExprStatementsBlock exprStatementsBlock) {
return "begin ... end: This is an expression which consists of a list of statements.";
}
public static @Nullable String description(ExprStringVal exprStringVal) {
return null;
}
public static String description(ExprSuper exprSuper) {
return "super: refers to the super class (extends ...) of this class";
}
public static String description(ExprThis e) {
return "this has type " + htmlType(e.attrTyp());
}
public static String description(ExprTypeId exprTypeId) {
return "typeId: returns the typeId of an object or class. The typeId is "
+ "a unique number for each class in the same type hierarchy.";
}
public static @Nullable String description(ExprUnary exprUnary) {
return null;
}
public static @Nullable String description(
IdentifierWithTypeArgs identifierWithTypeArgs) {
return null;
}
public static String description(InitBlock initBlock) {
return "An init block: This block is executed at map start";
}
public static @Nullable String description(
IdentifierWithTypeParamDefs identifierWithTypeParamDefs) {
return null;
}
public static String description(ModAbstract modAbstract) {
return "abstract: This function provides no implementation. Other classes have to provide "
+ "an implementation for this method.";
}
public static String description(ModConstant modConstant) {
return "constant: This variable can never be changed";
}
public static String description(ModOverride m) {
// TODO add info about which function is overridden
return "override: This function overrides an other function from a module or superclass";
}
public static String description(ModStatic modStatic) {
return "static: This function or variable is just like a function outside of a class. "
+ "It is not bound to an instance. No dynamic dispatch is used.";
}
public static String description(ModuleUse m) {
return m.attrModuleDef().descriptionHtml();
}
public static @Nullable String description(NoDefaultCase noDefaultCase) {
return null;
}
public static @Nullable String description(NoExpr noExpr) {
return null;
}
public static @Nullable String description(NoTypeExpr noTypeExpr) {
return null;
}
public static String description(OnDestroyDef s) {
return "ondestroy block: These statements are executed when an object of this class "
+ "is destroyed." + s.getSource().getLeftPos() + " - " + s.getSource().getRightPos();
}
public static @Nullable String description(StartFunctionStatement s) {
return null;
}
public static String description(ExprDestroy s) {
return "Destroys an object.";
}
public static @Nullable String description(StmtErr s) {
return null;
}
public static String description(StmtExitwhen stmtExitwhen) {
return "extiwhen: Exits the current loop when the condition is true";
}
public static String description(StmtForFrom stmtForFrom) {
return "Iterate using an iterator. Remember to close the iterator.";
}
public static String description(StmtForIn stmtForIn) {
return "Iterate over something";
}
public static String description(StmtForRangeDown s) {
return "Do something for all " + s.getLoopVar().getName() + " counting from _ down to _";
}
public static String description(StmtForRangeUp s) {
return "Do something for all " + s.getLoopVar().getName() + " counting from _ up to _";
}
public static String description(StmtIf stmtIf) {
return "If statement";
}
public static String description(StmtLoop stmtLoop) {
return "Repeat something forever";
}
public static String description(StmtReturn r) {
if (r.attrNearestExprClosure() != null) {
return "Returns a value from a closure";
}
FunctionImplementation f = r.attrNearestFuncDef();
if (f != null) {
return "Returns a value from function " + f.getName();
}
return "A return statement";
}
public static @Nullable String description(StmtSet s) {
return null;
}
public static String description(StmtSkip stmtSkip) {
return "The skip statement does nothing. Just skip this line.";
}
public static String description(StmtWhile stmtWhile) {
return "While Statement: Repeat while the condition is true.";
}
public static String description(SwitchCase switchCase) {
return "A case of a switch statement";
}
public static String description(
SwitchDefaultCaseStatements switchDefaultCaseStatements) {
return "The default case for this switch statement";
}
public static String description(SwitchStmt switchStmt) {
return "A switch statement does different things depending on the value of an epxression.";
}
public static String description(TypeExpr t) {
return htmlType(t.attrTyp());
}
public static String description(TypeExprThis t) {
return "thistype = " + htmlType(t.attrTyp());
}
public static @Nullable String description(VisibilityDefault visibilityDefault) {
return null;
}
public static String description(VisibilityPrivate visibilityPrivate) {
return "private: can only be used inside this class";
}
public static String description(VisibilityProtected visibilityProtected) {
return "protected: can be used in subclasses and in the same package";
}
public static String description(VisibilityPublic visibilityPublic) {
return "public: can be used in other packages";
}
public static @Nullable String description(VisibilityPublicread visibilityPublicread) {
return null;
}
public static @Nullable String description(WBlock wBlock) {
return null;
}
public static String description(WImport imp) {
WPackage imported = imp.attrImportedPackage();
if (imported != null)
return imported.attrComment();
return "import ...";
}
public static String description(WurstDoc wurstDoc) {
return wurstDoc.getRawComment();
}
public static @Nullable String description(ExprEmpty exprEmpty) {
return null;
}
public static String description(Identifier identifier) {
Element parent = identifier.getParent();
if (parent != null) {
return parent.descriptionHtml();
}
return "";
}
public static String description(ExprIfElse exprIfElse) {
return "A conditional expression.";
}
public static String description(ArrayInitializer arrayInitializer) {
return "An array initializer";
}
public static String description(ModVararg modVararg) {
return "A varargs modifier";
}
public static String description(NoSuperConstructorCall noSuperConstructorCall) {
return "No super constructor called";
}
public static String description(SomeSuperConstructorCall s) {
return "Calling the super constructor";
}
public static String description(NoTypeParamConstraints noTypeParamConstraints) {
return "no type parameter constraints";
}
}