use of org.rstudio.studio.client.workbench.views.source.editors.text.ace.Tokenizer in project rstudio by rstudio.
the class TextEditingTargetReformatHelper method insertPrettyNewlines.
void insertPrettyNewlines() {
AceEditor editor = (AceEditor) docDisplay_;
if (editor != null) {
String selectionText = docDisplay_.getSelectionValue();
// Tokenize the selection and walk through and replace
// TODO: Enable for other modes?
Tokenizer tokenizer = Tokenizer.createRTokenizer();
List<Token> tokens = tokenizer.tokenize(selectionText);
SimpleTokenCursor cursor = new SimpleTokenCursor(tokens);
// Set the initial state -- we recurse every time we encounter
// an opening paren, so check for that initially.
String lhs = "";
String rhs = "";
if (cursor.isLeftBrace()) {
lhs = cursor.currentValue();
rhs = cursor.getComplement(lhs);
}
// TODO: Figure out current nesting level for the
// active selection.
doInsertPrettyNewlines(cursor, lhs, rhs, 0, 0, true);
// Build the replacement from the modified token set
StringBuilder builder = new StringBuilder();
for (int i = 0; i < tokens.size(); i++) builder.append(tokens.get(i).getValue());
String replacement = builder.toString();
// Trim off trailing whitespace
replacement = replacement.replaceAll("[ \\t]*\\n", "\n");
replacement = replacement.replaceAll("\\n+$", "\n");
docDisplay_.replaceSelection(replacement);
docDisplay_.reindent(docDisplay_.getSelectionRange());
}
}