diff --git a/ide/editor.settings.storage/nbproject/project.xml b/ide/editor.settings.storage/nbproject/project.xml
index 83a372138070..762c7fc295de 100644
--- a/ide/editor.settings.storage/nbproject/project.xml
+++ b/ide/editor.settings.storage/nbproject/project.xml
@@ -175,6 +175,7 @@
org.netbeans.modules.gsf
org.netbeans.modules.jvi
org.netbeans.modules.languages
+ org.netbeans.modules.markdown
org.netbeans.modules.options.editor
org.netbeans.modules.editor.fold
org.netbeans.modules.editor.fold.nbui
diff --git a/ide/libs.flexmark/external/binaries-list b/ide/libs.flexmark/external/binaries-list
index 76b2667dc273..9fba964a4608 100644
--- a/ide/libs.flexmark/external/binaries-list
+++ b/ide/libs.flexmark/external/binaries-list
@@ -30,4 +30,5 @@ A3F92ABD0ACBB4D1F12DFD3D6128F73D245D6BA9 com.vladsch.flexmark:flexmark-util-data
985913246DF64FE7E768EB0664B45DEDEA7536CF com.vladsch.flexmark:flexmark-util-sequence:0.64.8
A8178BA6DFD7A958353A60B3A51FE7EDB1578B49 com.vladsch.flexmark:flexmark-util-visitor:0.64.8
4ADC75ADA3D870908BDBFFB76650D19305250D3C com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.64.8
+1851E124C6D85C5C7F3FDBBE066D30A76AD6BE44 com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.64.8
CD56EB47DCD4590EF6451F87E5EC33BDDD1A9A51 org.jsoup:jsoup:1.15.4
diff --git a/ide/libs.flexmark/external/flexmark-0.64.8-license.txt b/ide/libs.flexmark/external/flexmark-0.64.8-license.txt
index 454986f6a8b7..3613e9233a19 100644
--- a/ide/libs.flexmark/external/flexmark-0.64.8-license.txt
+++ b/ide/libs.flexmark/external/flexmark-0.64.8-license.txt
@@ -3,7 +3,7 @@ Version: 0.64.8
License: BSD-flexmark
Description: FlexMark library
Origin: https://github.com/vsch/flexmark-java
-Files: flexmark-0.64.8.jar flexmark-ext-anchorlink-0.64.8.jar flexmark-ext-emoji-0.64.8.jar flexmark-ext-tables-0.64.8.jar flexmark-html2md-converter-0.64.8.jar flexmark-util-ast-0.64.8.jar flexmark-util-builder-0.64.8.jar flexmark-util-collection-0.64.8.jar flexmark-util-data-0.64.8.jar flexmark-util-dependency-0.64.8.jar flexmark-util-format-0.64.8.jar flexmark-util-html-0.64.8.jar flexmark-util-misc-0.64.8.jar flexmark-util-sequence-0.64.8.jar flexmark-util-visitor-0.64.8.jar flexmark-ext-gfm-tasklist-0.64.8.jar
+Files: flexmark-0.64.8.jar flexmark-ext-anchorlink-0.64.8.jar flexmark-ext-emoji-0.64.8.jar flexmark-ext-tables-0.64.8.jar flexmark-html2md-converter-0.64.8.jar flexmark-util-ast-0.64.8.jar flexmark-util-builder-0.64.8.jar flexmark-util-collection-0.64.8.jar flexmark-util-data-0.64.8.jar flexmark-util-dependency-0.64.8.jar flexmark-util-format-0.64.8.jar flexmark-util-html-0.64.8.jar flexmark-util-misc-0.64.8.jar flexmark-util-sequence-0.64.8.jar flexmark-util-visitor-0.64.8.jar flexmark-ext-gfm-tasklist-0.64.8.jar flexmark-ext-gfm-strikethrough-0.64.8.jar
Copyright (c) 2015-2016, Atlassian Pty Ltd
All rights reserved.
diff --git a/ide/libs.flexmark/manifest.mf b/ide/libs.flexmark/manifest.mf
index 4f6866796a25..78acbb9fc942 100644
--- a/ide/libs.flexmark/manifest.mf
+++ b/ide/libs.flexmark/manifest.mf
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
AutoUpdate-Show-In-Client: true
OpenIDE-Module: org.netbeans.libs.flexmark
OpenIDE-Module-Localizing-Bundle: org/netbeans/libs/flexmark/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.25
+OpenIDE-Module-Specification-Version: 1.26
diff --git a/ide/libs.flexmark/nbproject/project.properties b/ide/libs.flexmark/nbproject/project.properties
index a5b37dfe8353..3eaf3b253be5 100644
--- a/ide/libs.flexmark/nbproject/project.properties
+++ b/ide/libs.flexmark/nbproject/project.properties
@@ -33,6 +33,7 @@ release.external/flexmark-ext-emoji-0.64.8.jar=modules/ext/flexmark-ext-emoji-0.
release.external/flexmark-ext-anchorlink-0.64.8.jar=modules/ext/flexmark-ext-anchorlink-0.64.8.jar
release.external/flexmark-ext-tables-0.64.8.jar=modules/ext/flexmark-ext-tables-0.64.8.jar
release.external/flexmark-ext-gfm-tasklist-0.64.8.jar=modules/ext/flexmark-ext-gfm-tasklist-0.64.8.jar
+release.external/flexmark-ext-gfm-strikethrough-0.64.8.jar=modules/ext/flexmark-ext-gfm-strikethrough-0.64.8.jar
release.external/jsoup-1.15.4.jar=modules/ext/jsoup-1.15.4.jar
# Sigtest seems to have issues with some Java 11 class files, better to disable it.
diff --git a/ide/libs.flexmark/nbproject/project.xml b/ide/libs.flexmark/nbproject/project.xml
index d2d8e0ca6227..64f4f141192b 100644
--- a/ide/libs.flexmark/nbproject/project.xml
+++ b/ide/libs.flexmark/nbproject/project.xml
@@ -30,72 +30,76 @@
org.jsoup
- ext/flexmark-html2md-converter-0.64.8.jar
- external/flexmark-html2md-converter-0.64.8.jar
-
-
- ext/jsoup-1.15.4.jar
- external/jsoup-1.15.4.jar
-
-
- ext/flexmark-util-ast-0.64.8.jar
- external/flexmark-util-ast-0.64.8.jar
+ ext/flexmark-util-misc-0.64.8.jar
+ external/flexmark-util-misc-0.64.8.jar
- ext/flexmark-util-builder-0.64.8.jar
- external/flexmark-util-builder-0.64.8.jar
+ ext/flexmark-util-dependency-0.64.8.jar
+ external/flexmark-util-dependency-0.64.8.jar
- ext/flexmark-util-collection-0.64.8.jar
- external/flexmark-util-collection-0.64.8.jar
+ ext/flexmark-util-visitor-0.64.8.jar
+ external/flexmark-util-visitor-0.64.8.jar
- ext/flexmark-util-data-0.64.8.jar
- external/flexmark-util-data-0.64.8.jar
+ ext/flexmark-ext-anchorlink-0.64.8.jar
+ external/flexmark-ext-anchorlink-0.64.8.jar
- ext/flexmark-util-dependency-0.64.8.jar
- external/flexmark-util-dependency-0.64.8.jar
+ ext/flexmark-ext-gfm-tasklist-0.64.8.jar
+ external/flexmark-ext-gfm-tasklist-0.64.8.jar
- ext/flexmark-util-format-0.64.8.jar
- external/flexmark-util-format-0.64.8.jar
+ ext/flexmark-util-builder-0.64.8.jar
+ external/flexmark-util-builder-0.64.8.jar
ext/flexmark-util-html-0.64.8.jar
external/flexmark-util-html-0.64.8.jar
- ext/flexmark-util-misc-0.64.8.jar
- external/flexmark-util-misc-0.64.8.jar
+ ext/jsoup-1.15.4.jar
+ external/jsoup-1.15.4.jar
- ext/flexmark-util-sequence-0.64.8.jar
- external/flexmark-util-sequence-0.64.8.jar
+ ext/flexmark-util-format-0.64.8.jar
+ external/flexmark-util-format-0.64.8.jar
- ext/flexmark-util-visitor-0.64.8.jar
- external/flexmark-util-visitor-0.64.8.jar
+ ext/flexmark-html2md-converter-0.64.8.jar
+ external/flexmark-html2md-converter-0.64.8.jar
ext/flexmark-ext-emoji-0.64.8.jar
external/flexmark-ext-emoji-0.64.8.jar
- ext/flexmark-ext-anchorlink-0.64.8.jar
- external/flexmark-ext-anchorlink-0.64.8.jar
+ ext/flexmark-0.64.8.jar
+ external/flexmark-0.64.8.jar
+
+
+ ext/flexmark-util-ast-0.64.8.jar
+ external/flexmark-util-ast-0.64.8.jar
+
+
+ ext/flexmark-util-data-0.64.8.jar
+ external/flexmark-util-data-0.64.8.jar
ext/flexmark-ext-tables-0.64.8.jar
external/flexmark-ext-tables-0.64.8.jar
- ext/flexmark-0.64.8.jar
- external/flexmark-0.64.8.jar
+ ext/flexmark-util-collection-0.64.8.jar
+ external/flexmark-util-collection-0.64.8.jar
- ext/flexmark-ext-gfm-tasklist-0.64.8.jar
- external/flexmark-ext-gfm-tasklist-0.64.8.jar
+ ext/flexmark-util-sequence-0.64.8.jar
+ external/flexmark-util-sequence-0.64.8.jar
+
+
+ ext/flexmark-ext-gfm-strikethrough-0.64.8.jar
+ external/flexmark-ext-gfm-strikethrough-0.64.8.jar
diff --git a/ide/markdown/licenseinfo.xml b/ide/markdown/licenseinfo.xml
index 0c60cbe82bf3..775ccedd758d 100644
--- a/ide/markdown/licenseinfo.xml
+++ b/ide/markdown/licenseinfo.xml
@@ -34,5 +34,10 @@
src/org/netbeans/modules/markdown/resources/Template.md
-
+
+
+ src/org/netbeans/modules/markdown/resources/Coloring.md
+
+
+
diff --git a/ide/markdown/manifest.mf b/ide/markdown/manifest.mf
index fe00e45399b8..44aa92cd5218 100644
--- a/ide/markdown/manifest.mf
+++ b/ide/markdown/manifest.mf
@@ -1,6 +1,7 @@
Manifest-Version: 1.0
AutoUpdate-Show-In-Client: true
OpenIDE-Module: org.netbeans.modules.markdown
+OpenIDE-Module-Layer: org/netbeans/modules/markdown/resources/layer.xml
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/markdown/Bundle.properties
OpenIDE-Module-Specification-Version: 1.20
diff --git a/ide/markdown/nbproject/project.properties b/ide/markdown/nbproject/project.properties
index 5137752915a4..f1bd7ebfa963 100644
--- a/ide/markdown/nbproject/project.properties
+++ b/ide/markdown/nbproject/project.properties
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-javac.source=1.8
+javac.source=17
javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/ide/markdown/nbproject/project.xml b/ide/markdown/nbproject/project.xml
index 2634c03dc1fd..ab3649a59c34 100644
--- a/ide/markdown/nbproject/project.xml
+++ b/ide/markdown/nbproject/project.xml
@@ -50,6 +50,33 @@
1.15
+
+ org.netbeans.modules.editor.mimelookup
+
+
+
+ 1
+ 1.72
+
+
+
+ org.netbeans.modules.editor.settings
+
+
+
+ 1
+ 1.89
+
+
+
+ org.netbeans.modules.editor.settings.storage
+
+
+
+ 1
+ 1.84
+
+
org.netbeans.modules.textmate.lexer
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/Bundle.properties b/ide/markdown/src/org/netbeans/modules/markdown/Bundle.properties
index 0f3cccabdc15..57a78a2eaa8d 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/Bundle.properties
+++ b/ide/markdown/src/org/netbeans/modules/markdown/Bundle.properties
@@ -20,3 +20,15 @@ OpenIDE-Module-Long-Description=\
Syntax highlighting for Markdown.
OpenIDE-Module-Name=Markdown Support
OpenIDE-Module-Short-Description=Syntax highlighting for Markdown
+
+CSS_DEFAULT=body {padding:40px;}\
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {font-size:inherit;}\
+ul, li ul {margin-left: 20px;}\
+li {margin-bottom: 3px;padding-left:5px;}\
+table {border-spacing:0;}\
+th, td {border:1px solid rgb(209, 217, 224); padding:10px;}\
+code {border-radius: 6px;}\
+pre {padding:16px;}\
+pre code {border-radius:0px;}\
+blockquote {padding: 0 16px; margin: 0px; border-left: 2px solid rgb(209, 217, 224);}\
+li blockquote {margin-bottom: 0px;}
\ No newline at end of file
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/MarkdownDataObject.java b/ide/markdown/src/org/netbeans/modules/markdown/MarkdownDataObject.java
index 8629433abec4..5a6c862d460c 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/MarkdownDataObject.java
+++ b/ide/markdown/src/org/netbeans/modules/markdown/MarkdownDataObject.java
@@ -105,11 +105,11 @@
@GrammarRegistration(mimeType=MarkdownDataObject.MIME_TYPE, grammar="markdown.tmLanguage.json")
public class MarkdownDataObject extends MultiDataObject {
- public static final String MIME_TYPE = "text/x-markdown-nb";
+ public static final String MIME_TYPE = "text/x-markdown";
public MarkdownDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
super(pf, loader);
- registerEditor("text/x-markdown", true);
+ registerEditor(MIME_TYPE, true);
}
@Override
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/MarkdownViewerElement.java b/ide/markdown/src/org/netbeans/modules/markdown/MarkdownViewerElement.java
index db65b2a5d9e9..f9c8ebe79874 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/MarkdownViewerElement.java
+++ b/ide/markdown/src/org/netbeans/modules/markdown/MarkdownViewerElement.java
@@ -19,6 +19,7 @@
package org.netbeans.modules.markdown;
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension;
+import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
@@ -27,6 +28,8 @@
import com.vladsch.flexmark.util.data.MutableDataSet;
import java.awt.BorderLayout;
import java.awt.Rectangle;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
@@ -49,6 +52,8 @@
import org.netbeans.core.spi.multiview.CloseOperationState;
import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.MultiViewElementCallback;
+import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
+import static org.netbeans.modules.markdown.MarkdownDataObject.MIME_TYPE;
import org.netbeans.modules.markdown.ui.preview.MarkdownEditorKit;
import org.openide.awt.HtmlBrowser;
import org.openide.awt.UndoRedo;
@@ -62,6 +67,7 @@
import org.openide.util.NbBundle.Messages;
import org.openide.util.RequestProcessor;
import org.openide.util.RequestProcessor.Task;
+import org.openide.util.WeakListeners;
import org.openide.windows.TopComponent;
/**
@@ -71,7 +77,7 @@
@MultiViewElement.Registration(
displayName = "#LBL_MarkdownViewer",
iconBase = "org/netbeans/modules/markdown/markdown.png",
- mimeType = "text/x-markdown",
+ mimeType = MIME_TYPE,
persistenceType = TopComponent.PERSISTENCE_NEVER,
preferredID = "MarkdownViewer",
position = 2000
@@ -94,7 +100,8 @@ public class MarkdownViewerElement implements MultiViewElement {
.set(Parser.EXTENSIONS, Arrays.asList(
AnchorLinkExtension.create(),
TablesExtension.create(),
- TaskListExtension.create()
+ TaskListExtension.create(),
+ StrikethroughExtension.create()
))
.set(HtmlRenderer.INDENT_SIZE, 2)
.set(HtmlRenderer.RENDER_HEADER_ID, true)
@@ -111,6 +118,9 @@ public class MarkdownViewerElement implements MultiViewElement {
.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
+ // Strikethrough change from del to s tag
+ .set(StrikethroughExtension.STRIKETHROUGH_STYLE_HTML_OPEN, "")
+ .set(StrikethroughExtension.STRIKETHROUGH_STYLE_HTML_CLOSE, "")
.toImmutable();
final Parser parser = Parser.builder(OPTIONS).build();
@@ -134,6 +144,9 @@ public void changedUpdate(DocumentEvent e) {
};
private final Task updater = RP.create(MarkdownViewerElement.this::updateView);
+ //event for Font config update
+ private volatile boolean fontChanged = false;
+ private final PropertyChangeListener pcl = this::colorProfileChange;
private StyledDocument source;
public MarkdownViewerElement(Lookup lookup) {
@@ -143,6 +156,7 @@ public MarkdownViewerElement(Lookup lookup) {
@Override
public JComponent getVisualRepresentation() {
if (component == null) {
+ EditorSettings.getDefault().addPropertyChangeListener(WeakListeners.propertyChange(pcl, this));
viewer = new JEditorPane();
viewer.setEditorKit(new MarkdownEditorKit());
viewer.setEditable(false);
@@ -289,4 +303,21 @@ private void linkHandler(HyperlinkEvent evt) {
}
}
}
+
+ /**
+ * redraw document if profile changes
+ * @param evt
+ */
+ public void colorProfileChange(PropertyChangeEvent evt) {
+ //TODO check some context
+ if (!fontChanged && "fontColors".equals(evt.getPropertyName())) { // NOI18N
+ //not very safe
+ //fontChanged = true;
+ }
+ if (fontChanged || EditorSettings.PROP_CURRENT_FONT_COLOR_PROFILE.equals(evt.getPropertyName())) {
+ fontChanged = false;
+ viewer.setEditorKit(new MarkdownEditorKit());
+ updateView();
+ }
+ }
}
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/StyleUtils.java b/ide/markdown/src/org/netbeans/modules/markdown/StyleUtils.java
new file mode 100644
index 000000000000..0fdff16bd77c
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/StyleUtils.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.markdown;
+
+import java.awt.Color;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.html.StyleSheet;
+import org.netbeans.api.editor.mimelookup.MimeLookup;
+import org.netbeans.api.editor.mimelookup.MimePath;
+import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
+import org.netbeans.api.editor.settings.FontColorSettings;
+import org.netbeans.modules.editor.settings.storage.api.FontColorSettingsFactory;
+import org.openide.util.NbBundle;
+
+/**
+ *
+ * @author bhaidu
+ */
+public class StyleUtils {
+
+ private static final Map fontConfig2tagMapping = new HashMap() {
+ {
+ put("body", "body"); // NOI18N
+ put("code", "code"); // NOI18N
+ put("pre", "pre"); // NOI18N
+ put("blockquote", "blockquote p"); // NOI18N
+ put("heading1", "h1, h1 a"); // NOI18N
+ put("heading2", "h2, h2 a"); // NOI18N
+ put("heading3", "h3, h3 a"); // NOI18N
+ put("heading4", "h4, h4 a"); // NOI18N
+ put("heading5", "h5, h5 a"); // NOI18N
+ put("heading6", "h6, h6 a"); // NOI18N
+ put("heading6", "h6, h6 a"); // NOI18N
+ }
+ };
+
+ public static void addNbSyles(StyleSheet ss) {
+
+ //main css
+ appendDefaultMarkdownCssRules(ss);
+
+ //coloring & font settings
+ appendColoringCssRulesFromFontConfigs(ss);
+ }
+
+ public static void addRule(StyleSheet ss, AttributeSet attributeSet, AttributeSet defaultAttributes) {
+ String nameAttr = (String) attributeSet.getAttribute(StyleConstants.NameAttribute);
+ StringBuilder cssRule = new StringBuilder();
+ String htmlTag = fontConfig2tagMapping.get(nameAttr);
+ if (htmlTag == null) {
+ return;
+ }
+ cssRule.append(htmlTag);
+ cssRule.append(" {"); // NOI18N
+ cssRule.append(rgbStyling("color", getThemeColor(attributeSet, defaultAttributes, StyleConstants.ColorConstants.Foreground))); // NOI18N
+ cssRule.append(rgbStyling("background-color", getThemeColor(attributeSet, defaultAttributes, StyleConstants.ColorConstants.Background))); // NOI18N
+ cssRule.append("}"); // NOI18N
+ ss.addRule(cssRule.toString());
+ }
+
+ public static Color getThemeColor(AttributeSet attributeSet, AttributeSet defaultAttributes, Object constant) {
+ Color color = (Color) attributeSet.getAttribute(constant);
+ if (color == null && defaultAttributes != null) {
+ color = (Color) defaultAttributes.getAttribute(constant);
+ }
+ return color;
+ }
+
+ public static String rgbStyling(String property, Color color) {
+ StringBuilder cssRule = new StringBuilder();
+ if (color != null) {
+ cssRule.append(property);
+ cssRule.append(":rgb("); // NOI18N
+ cssRule.append(color.getRed());
+ cssRule.append(","); // NOI18N
+ cssRule.append(color.getGreen());
+ cssRule.append(","); // NOI18N
+ cssRule.append(color.getBlue());
+ cssRule.append(");"); // NOI18N
+ }
+
+ return cssRule.toString();
+ }
+
+ private static void appendDefaultMarkdownCssRules(StyleSheet ss) {
+ String defaultRules = NbBundle.getMessage(StyleUtils.class, "CSS_DEFAULT"); // NOI18N
+ ss.addRule(defaultRules);
+ }
+
+ private static Iterator loadCustomizedMarkdownFontAttributes() {
+ String profile = EditorSettings.getDefault().getCurrentFontColorProfile();
+ FontColorSettingsFactory fcsf = EditorSettings.getDefault().getFontColorSettings(new String[]{MarkdownDataObject.MIME_TYPE});
+ return fcsf.getAllFontColors(profile).iterator();
+ }
+
+ private static AttributeSet loadDefaultNbMarkdownFontAttributes() {
+ FontColorSettings fcs = (MimeLookup.getLookup(MimePath.get(MarkdownDataObject.MIME_TYPE)).lookup(FontColorSettings.class));
+ return fcs.getFontColors("default"); // NOI18N
+ }
+
+ private static void appendColoringCssRulesFromFontConfigs(StyleSheet ss) {
+ //contains the default / fallback values of fontConfigs
+ AttributeSet defaultAttributes = loadDefaultNbMarkdownFontAttributes();
+
+ //contains the full list of fontConfigs but populated only with custom values
+ Iterator attributesIt = loadCustomizedMarkdownFontAttributes();
+ while (attributesIt.hasNext()) {
+ AttributeSet attributeSet = attributesIt.next();
+ Enumeration> en = attributeSet.getAttributeNames();
+
+ while (en.hasMoreElements()) {
+ Object key = en.nextElement();
+
+ if (key instanceof StyleConstants) {
+ addRule(ss, attributeSet, defaultAttributes);
+ }
+ }
+ }
+ }
+}
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/markdown.tmLanguage.json b/ide/markdown/src/org/netbeans/modules/markdown/markdown.tmLanguage.json
index 463a3fbbbdec..f28917c770af 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/markdown.tmLanguage.json
+++ b/ide/markdown/src/org/netbeans/modules/markdown/markdown.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/7418dd20d76c72e82fadee2909e03239e9973b35",
+ "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/548ccb91ef58ba40ac745b400d889933ccd5eb4d",
"name": "Markdown",
"scopeName": "text.html.markdown",
"patterns": [
@@ -3084,7 +3084,7 @@
"name": "punctuation.definition.strikethrough.markdown"
}
},
- "match": "(? Blockquote (prefix with `>`)
+
+---
+
+## 3. Lists
+### Unordered List
+- Item 1
+- Item 2
+ - Nested Item (indent with 2 spaces)
+
+### Ordered List
+1. First item
+2. Second item
+ 1. Nested item (indent with 3 spaces)
+
+### Task List
+- [x] Completed task
+- [ ] Pending task (`[ ]`)
+
+---
+
+## 4. Links
+- [Hyperlink](https://example.com) (`[text](url)`)
+
+---
+
+## 5. Code Blocks
+```java
+# Syntax-highlighted block (java)
+class HelloWorld {
+ public static main(String... args) {
+ System.out.println("Hello markdown");
+ }
+}
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-bluetheme.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-bluetheme.xml
new file mode 100644
index 000000000000..aab01d2809a7
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-bluetheme.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-citylights.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-citylights.xml
new file mode 100644
index 000000000000..aab01d2809a7
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-citylights.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-earth.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-earth.xml
new file mode 100644
index 000000000000..aab01d2809a7
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-earth.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-flatlafdark.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-flatlafdark.xml
new file mode 100644
index 000000000000..fe7c8c3bb9ae
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors-flatlafdark.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors.xml
new file mode 100644
index 000000000000..50d1eaac3c31
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/FontAndColors.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/resources/layer.xml b/ide/markdown/src/org/netbeans/modules/markdown/resources/layer.xml
new file mode 100644
index 000000000000..5395cc928587
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/resources/layer.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/MarkdownEditorKit.java b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/MarkdownEditorKit.java
index cf6523fb06f5..0f3d9e6f78cf 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/MarkdownEditorKit.java
+++ b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/MarkdownEditorKit.java
@@ -18,9 +18,14 @@
*/
package org.netbeans.modules.markdown.ui.preview;
+import javax.swing.text.Document;
import org.netbeans.modules.markdown.ui.preview.views.MarkdownViewFactory;
import javax.swing.text.ViewFactory;
+import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.StyleSheet;
+import org.netbeans.modules.editor.settings.storage.api.EditorSettings;
+import org.netbeans.modules.markdown.StyleUtils;
/**
*
@@ -29,14 +34,37 @@
public class MarkdownEditorKit extends HTMLEditorKit {
private final transient ViewFactory viewFactory;
-
+
public MarkdownEditorKit() {
super();
this.viewFactory = new MarkdownViewFactory();
}
+ /**
+ * copy/paste from the original HTMLEditorKit method but with custom styling overriding
+ * @see HTMLEditorKit.createDefaultDocument
+ *
+ * @return
+ */
+ @Override
+ public Document createDefaultDocument() {
+ StyleSheet styles = getStyleSheet();
+ StyleSheet ss = new StyleSheet();
+
+ //default style override
+ ss.addStyleSheet(styles);
+ StyleUtils.addNbSyles(ss);
+
+ HTMLDocument doc = new HTMLDocument(ss);
+ doc.setParser(getParser());
+ doc.setAsynchronousLoadPriority(4);
+ doc.setTokenThreshold(100);
+ return doc;
+ }
+
@Override
public ViewFactory getViewFactory() {
return viewFactory;
}
+
}
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/HorizontalRuleView.java b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/HorizontalRuleView.java
new file mode 100644
index 000000000000..bbc27641886c
--- /dev/null
+++ b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/HorizontalRuleView.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.markdown.ui.preview.views;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.GridLayout;
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.border.EmptyBorder;
+import javax.swing.text.ComponentView;
+import javax.swing.text.Element;
+
+/**
+ *
+ * hr tags don't have any customization from CSS using swing html renderer
+ *
+ * Render patch to have controlled display
+ */
+public class HorizontalRuleView extends ComponentView {
+
+ public HorizontalRuleView(Element elem) {
+ super(elem);
+ }
+
+ @Override
+ protected Component createComponent() {
+ JPanel panel = new JPanel();
+ panel.setOpaque(false);
+ JSeparator component = new JSeparator();
+ component.setOrientation(HORIZONTAL);
+ component.setBorder(BorderFactory.createLineBorder(new Color(209, 217, 224), 2));
+ panel.add(component);
+ panel.setBorder(new EmptyBorder(20, 0, 20, 0));
+ panel.setLayout(new GridLayout(0,1));
+ return panel;
+ }
+}
diff --git a/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/MarkdownViewFactory.java b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/MarkdownViewFactory.java
index a1c426e88b99..dc4635b09968 100644
--- a/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/MarkdownViewFactory.java
+++ b/ide/markdown/src/org/netbeans/modules/markdown/ui/preview/views/MarkdownViewFactory.java
@@ -41,6 +41,8 @@ public View create(Element elem) {
if (isElementOfTag(elem, HTML.Tag.INPUT)) {
return new CheckboxView(elem);
+ } else if (isElementOfTag(elem, HTML.Tag.HR)) {
+ return new HorizontalRuleView(elem);
}
return super.create(elem);