package com.redhat.ceylon.eclipse.code.style;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterParamListClosingParen;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterParamListOpeningParen;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterSequenceEnumerationOpeningBrace;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterTypeParamListComma;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterTypeArgListComma;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AroundTypeParamListEqualsSign;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterValueIteratorOpeningParenthesis;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AroundImportAliasEqualsSign;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AroundSatisfiesOf;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeAnnotationPositionalArgumentList;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeMethodOrClassPositionalArgumentList;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_AfterControlStructureKeyword;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeParamListClosingParen;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeParamListOpeningParen;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeSequenceEnumerationClosingBrace;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_BeforeValueIteratorClosingParenthesis;
import static com.redhat.ceylon.eclipse.code.style.CeylonFormatterConstants.FORMATTER_space_OptionalAroundOperatorLevel;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
public class FormatterTabSpace extends FormatterTabPage {
private final String PREVIEW =
"import ceylon.file {\n"
+ " pp=parsePath,\n"
+ " File,\n"
+ " Reader\n"
+ "}\n"
+ "import ceylon.collection {\n"
+ " LL=LinkedList\n"
+ "}\n"
+ "\n"
+ "by (\"Someone\")\n"
+ "throws (`class Exception`, \"If anything goes wrong\")\n"
+ "shared class WithLineNumbersReader(Reader r)\n"
+ " satisfies Reader & Iterable<String,Null> {\n"
+ " \n"
+ " LL<String> lines = LL<String>();\n"
+ " variable Integer lineNum = 0;\n"
+ " \n"
+ " close() => r.close();\n"
+ " shared actual Byte[] readBytes(Integer max) {\n"
+ " throw AssertionError(\"Can't read bytes from line-oriented reader\");\n"
+ " }\n"
+ " shared actual Iterator<String> iterator() => lines.iterator();\n"
+ " shared actual String? readLine() {\n"
+ " if (exists line = r.readLine()) {\n"
+ " value ret = lineNum.string + \"t\" + line;\n"
+ " lines.add(ret);\n"
+ " lineNum++;\n"
+ " return ret;\n"
+ " } else {\n"
+ " return null;\n"
+ " }\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "void run() {\n"
+ " assert (is File f = pp(process.arguments.first else nothing).resource);\n"
+ " try (r = WithLineNumbersReader(f.Reader())) {\n"
+ " variable String? line = \"\";\n"
+ " while (line exists) {\n"
+ " line = r.readLine();\n"
+ " }\n"
+ " for (l in r) {\n"
+ " print(l);\n"
+ " }\n"
+ " } catch (Exception e) {\n"
+ " e.printStackTrace();\n"
+ " }\n"
+ " print({ \"Here\", \"have\", \"an\", \"iterable\", \"enumeration\" });\n"
+ " value hollowCubeVol = w*h*d - iW*iH*iD;\n"
+ "}\n"
+ "\n"
+ "void printTypeArgs<Param1=Anything, Param2=Nothing>()\n"
+ " => print(`Param1`.string + \" \" + `Param2`.string);\n";
private CeylonPreview ceylonPreview;
public FormatterTabSpace(FormatterModifyProfileDialog modifyDialog,
FormatterPreferences workingValues) {
super(modifyDialog, workingValues);
}
@Override
protected void doCreatePreferences(Composite composite, int numColumns) {
final Group generalGroup = createGroup(numColumns, composite,
"Spacing Options");
createCheckboxPref(generalGroup, numColumns, "Space before positional argument list",
FORMATTER_space_BeforeMethodOrClassPositionalArgumentList, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Space before annotation positional argument list",
FORMATTER_space_BeforeAnnotationPositionalArgumentList, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Spaces around '&&' and '|' in 'satisfies' and 'of'",
FORMATTER_space_AroundSatisfiesOf, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Spaces around '=' in 'import' alias",
FORMATTER_space_AroundImportAliasEqualsSign, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Space after type parameter list comma",
FORMATTER_space_AfterTypeParamListComma, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Space after type argument list comma",
FORMATTER_space_AfterTypeArgListComma, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Space around '=' in default type arguments",
FORMATTER_space_AroundTypeParamListEqualsSign, FALSE_TRUE);
createCheckboxPref(generalGroup, numColumns, "Space after control structure keyword ('if', 'for', etc.)",
FORMATTER_space_AfterControlStructureKeyword, FALSE_TRUE);
createNumberPref(generalGroup, numColumns, "Space optional up to operator level:",
FORMATTER_space_OptionalAroundOperatorLevel, 0, 4);
final Group parameter = createGroup(numColumns, composite,
"Parameter Lists");
createCheckboxPref(parameter, 2, "Space before opening '('",
FORMATTER_space_BeforeParamListOpeningParen, FALSE_TRUE);
createCheckboxPref(parameter, 2, "Space after opening '('",
FORMATTER_space_AfterParamListOpeningParen, FALSE_TRUE);
createCheckboxPref(parameter, 2, "Space before closing ')'",
FORMATTER_space_BeforeParamListClosingParen, FALSE_TRUE);
/*final CheckboxPreference saplcp =*/
createCheckboxPref(parameter, 2, "Space after closing ')'",
FORMATTER_space_AfterParamListClosingParen, FALSE_TRUE);
/*final NumberPreference saplcpn = createNumberPref(generalGroup, numColumns,
"Detailed, " + MINIMUM_SPACE_AFTER_SHIFT + " to " + MAXIMUM_SPACE_AFTER_SHIFT,
FORMATTER_space_AfterParamListClosingParen_Number, MINIMUM_SPACE_AFTER_SHIFT, MAXIMUM_SPACE_AFTER_SHIFT);
Observer o = new Observer() {
public void update(Observable o, Object arg) {
saplcp.updateWidget();
saplcpn.updateWidget();
}
};
saplcp.addObserver(o);
saplcpn.addObserver(o);*/
final Group enumeration = createGroup(numColumns, composite,
"Iterable Enumerations");
createCheckboxPref(enumeration, 1, "Space after opening '{'",
FORMATTER_space_AfterSequenceEnumerationOpeningBrace, FALSE_TRUE);
createCheckboxPref(enumeration, 1, "Space before closing '}'",
FORMATTER_space_BeforeSequenceEnumerationClosingBrace, FALSE_TRUE);
final Group iterator = createGroup(numColumns, composite,
"Iterator in 'for' Loop");
createCheckboxPref(iterator, 1, "Space after opening '('",
FORMATTER_space_AfterValueIteratorOpeningParenthesis, FALSE_TRUE);
createCheckboxPref(iterator, 1, "Space before closing ')'",
FORMATTER_space_BeforeValueIteratorClosingParenthesis, FALSE_TRUE);
}
@Override
public void initializePage() {
ceylonPreview.setPreviewText(PREVIEW);
}
@Override
protected CeylonPreview doCreateCeylonPreview(Composite parent) {
ceylonPreview = new CeylonPreview(this.workingValues, parent);
return ceylonPreview;
}
@Override
protected void doUpdatePreview() {
super.doUpdatePreview();
ceylonPreview.setPreviewText(PREVIEW);
ceylonPreview.update();
}
}