Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

MarkdownEditorPane: - support the line separator option for new files - keep line separators of existing files

AuthorKarl Tauber <email>
Date2015-08-06 17:16:19 GMT+0200
Commit56c61ea634e86e4dcd9529fa169615a355ae3502
Parentadc48e7
Delta31 lines added, 2 lines removed, 29-line increase
src/main/java/org/markdownwriterfx/editor/MarkdownEditorPane.java
private PegDownProcessor pegDownProcessor;
private final InvalidationListener optionsListener;
+ private String lineSeparator = getLineSeparatorOrDefault();
public MarkdownEditorPane() {
public void requestFocus() {
Platform.runLater(() -> textArea.requestFocus());
+ }
+
+ private String getLineSeparatorOrDefault() {
+ String lineSeparator = Options.getLineSeparator();
+ return (lineSeparator != null) ? lineSeparator : System.getProperty( "line.separator", "\n" );
+ }
+
+ private String determineLineSeparator(String str) {
+ int strLength = str.length();
+ for (int i = 0; i < strLength; i++) {
+ char ch = str.charAt(i);
+ if (ch == '\n')
+ return (i > 0 && str.charAt(i - 1) == '\r') ? "\r\n" : "\n";
+ }
+ return getLineSeparatorOrDefault();
}
// 'markdown' property
- public String getMarkdown() { return textArea.getText(); }
- public void setMarkdown(String markdown) { textArea.replaceText(markdown); textArea.selectRange(0, 0); }
+ public String getMarkdown() {
+ String markdown = textArea.getText();
+ if (!lineSeparator.equals("\n"))
+ markdown = markdown.replace("\n", lineSeparator);
+ return markdown;
+ }
+ public void setMarkdown(String markdown) {
+ lineSeparator = determineLineSeparator(markdown);
+ // always replace CRLF line separators to LF because RichTextFX does
+ // not handle CRLF line separators well (e.g. need to press Backspace
+ // or Del key twice to delete a CRLF line separator)
+ markdown = markdown.replace("\r\n", "\n");
+ textArea.replaceText(markdown);
+ textArea.selectRange(0, 0);
+ }
public ObservableValue<String> markdownProperty() { return textArea.textProperty(); }