package flow.netbeans.markdown.options; import java.util.prefs.Preferences; import org.openide.util.NbPreferences; import org.pegdown.Extensions; /** * @see * https://github.com/nicoulaj/idea-markdown/blob/master/src/main/java/net/nicoulaj/idea/markdown/settings/MarkdownGlobalSettings.java */ public final class MarkdownGlobalOptions { private static final MarkdownGlobalOptions INSTANCE = new MarkdownGlobalOptions(); /** The default for whether to use a custom preview refresh interval. */ private static final boolean DEFAULT_USE_CUSTOM_PREVIEW_REFRESH_INTERVAL = false; /** The default preview refresh interval in milliseconds. */ private static final int DEFAULT_PREVIEW_REFRESH_INTERVAL = 1000; /** The minimum preview refresh interval in milliseconds. */ static final int MIN_PREVIEW_INTERVAL = 10; /** The maximum preview refresh interval in milliseconds. */ static final int MAX_PREVIEW_INTERVAL = 10000; private static final String SMARTS = "SMARTS"; // NOI18N private static final String QUOTES = "QUOTES"; // NOI18N private static final String ABBREVIATIONS = "ABBREVIATIONS"; // NOI18N private static final String DEFINITION_LISTS = "DEFINITION_LISTS"; // NOI18N private static final String FENCED_CODE_BLOCKS = "FENCED_CODE_BLOCKS"; // NOI18N private static final String HARDWRAPS = "HARDWRAPS"; // NOI18N private static final String AUTOLINKS = "AUTOLINKS"; // NOI18N private static final String WIKILINKS = "WIKILINKS"; // NOI18N private static final String TABLES = "TABLES"; // NOI18N private static final String STRIKETHROUGH = "STRIKETHROUGH"; // NOI18N private static final String HTML_BLOCK_SUPPRESSION = "HTML_BLOCK_SUPPRESSION"; // NOI18N private static final String INLINE_HTML_SUPPRESSION = "INLINE_HTML_SUPPRESSION"; // NOI18N private static final String HTML_TEMPLATE = "HTML_TEMPLATE"; // NOI18N private static final String VIEW_HTML_ON_SAVE = "VIEW_HTML_ON_SAVE"; // NOI18N private static final String SAVE_IN_SOURCE_DIR = "SAVE_IN_SOURCE_DIR"; // NOI18N private static final String EXPORT_ON_SAVE = "EXPORT_ON_SAVE"; // NOI18N private static final String USE_CUSTOM_PREVIEW_REFRESH_INTERVAL = "USE_CUSTOM_PREVIEW_INTERVAL"; private static final String CUSTOM_PREVIEW_REFRESH_INTERVAL = "CUSTOM_PREVIEW_INTERVAL"; // typing hooks private static final String TYPING_HOOKS = "TYPING_HOOKS"; // NOI18N private static final String AUTO_ADDITION_LIST = "AUTO_ADDITION_LIST"; // NOI18N private static final String REMOVE_EMPTY_LIST = "REMOVE_EMPTY_LIST"; // NOI18N private static final String REORDER_ORDERED_LIST = "REORDER_ORDERED_LIST"; // NOI18N private static final String REMOVE_ORDERED_LIST = "REMOVE_ORDERED_LIST"; // NOI18N private static final String FX_HTML_VIEW_ENABLED = "FX_HTML_VIEW_ENABLED"; // NOI18N public static MarkdownGlobalOptions getInstance() { return INSTANCE; } private MarkdownGlobalOptions() { } private void bindPreferences() { abbreviations = isAbbreviations(); autoLinks = isAutoLinks(); definitions = isDefinitions(); fencedCodeBlocks = isFencedCodeBlocks(); hardWraps = isHardWraps(); suppressHTMLBlocks = isSuppressHTMLBlocks(); suppressInlineHTML = isSuppressInlineHTML(); quotes = isQuotes(); smarts = isSmarts(); tables = isTables(); wikiLinks = isWikiLinks(); strikeThrough = isStrikeThrough(); } /** * Whether the "SmartyPants style pretty ellipsises, dashes and apostrophes" * extension should be enabled. */ private boolean smarts = false; /** * Whether the "SmartyPants style pretty single and double quotes" extension * should be enabled. */ private boolean quotes = false; /** * Whether the "PHP Markdown Extra style abbreviations" extension should be * enabled. */ private boolean abbreviations = false; /** * Whether the "PHP Markdown Extra style definition lists" extension should * be enabled. */ private boolean definitions = false; /** * Whether the "PHP Markdown Extra style fenced code blocks" extension * should be enabled. */ private boolean fencedCodeBlocks = false; /** * Whether the "Github style hard wraps parsing as HTML linebreaks" * extension should be enabled. */ private boolean hardWraps = false; /** * Whether the "Github style plain auto-links" extension should be enabled. */ private boolean autoLinks = false; /** * Whether the "Wiki-style links" extension should be enabled. */ private boolean wikiLinks = false; /** * Whether the "MultiMarkdown style tables support" extension should be * enabled. */ private boolean tables = false; /** * Whether the "StrikeThrough" extension should be * enabled. */ private boolean strikeThrough = false; /** * Whether the "Suppress HTML blocks" extension should be enabled. */ private boolean suppressHTMLBlocks = false; /** * Whether the "Suppress inline HTML tags" extension should be enabled. */ private boolean suppressInlineHTML = false; /** * Get the extensions value to setup PegDown parser with. * * @return the value to use with {@link org.pegdown.PegDownProcessor(int)} */ public int getExtensionsValue() { bindPreferences(); return (smarts ? Extensions.SMARTS : 0) + (quotes ? Extensions.QUOTES : 0) + (abbreviations ? Extensions.ABBREVIATIONS : 0) + (hardWraps ? Extensions.HARDWRAPS : 0) + (autoLinks ? Extensions.AUTOLINKS : 0) + (wikiLinks ? Extensions.WIKILINKS : 0) + (tables ? Extensions.TABLES : 0) + (definitions ? Extensions.DEFINITIONS : 0) + (fencedCodeBlocks ? Extensions.FENCED_CODE_BLOCKS : 0) + (suppressHTMLBlocks ? Extensions.SUPPRESS_HTML_BLOCKS : 0) + (suppressInlineHTML ? Extensions.SUPPRESS_INLINE_HTML : 0) + (strikeThrough ? Extensions.STRIKETHROUGH : 0); } public boolean isSmarts() { return getPreferences().getBoolean(SMARTS, false); } public void setSmarts(boolean smarts) { getPreferences().putBoolean(SMARTS, smarts); } public boolean isQuotes() { return getPreferences().getBoolean(QUOTES, false); } public void setQuotes(boolean quotes) { getPreferences().putBoolean(QUOTES, quotes); } public boolean isAbbreviations() { return getPreferences().getBoolean(ABBREVIATIONS, false); } public void setAbbreviations(boolean abbreviations) { getPreferences().putBoolean(ABBREVIATIONS, abbreviations); } public boolean isDefinitions() { return getPreferences().getBoolean(DEFINITION_LISTS, false); } public void setDefinitions(boolean definitions) { getPreferences().putBoolean(DEFINITION_LISTS, definitions); } public boolean isFencedCodeBlocks() { return getPreferences().getBoolean(FENCED_CODE_BLOCKS, false); } public void setFencedCodeBlocks(boolean fencedCodeBlocks) { getPreferences().putBoolean(FENCED_CODE_BLOCKS, fencedCodeBlocks); } public boolean isHardWraps() { return getPreferences().getBoolean(HARDWRAPS, false); } public void setHardWraps(boolean hardWraps) { getPreferences().putBoolean(HARDWRAPS, hardWraps); } public boolean isAutoLinks() { return getPreferences().getBoolean(AUTOLINKS, false); } public void setAutoLinks(boolean autoLinks) { getPreferences().putBoolean(AUTOLINKS, autoLinks); } public boolean isWikiLinks() { return getPreferences().getBoolean(WIKILINKS, false); } public void setWikiLinks(boolean wikiLinks) { getPreferences().putBoolean(WIKILINKS, wikiLinks); } public boolean isTables() { return getPreferences().getBoolean(TABLES, false); } public void setTables(boolean tables) { getPreferences().putBoolean(TABLES, tables); } public boolean isStrikeThrough() { return getPreferences().getBoolean(STRIKETHROUGH, false); } public void setStrikeThrough(boolean strikeThrough) { getPreferences().putBoolean(STRIKETHROUGH, strikeThrough); } public boolean isSuppressHTMLBlocks() { return getPreferences().getBoolean(HTML_BLOCK_SUPPRESSION, false); } public void setSuppressHTMLBlocks(boolean suppressHTMLBlocks) { getPreferences().putBoolean(HTML_BLOCK_SUPPRESSION, suppressHTMLBlocks); } public boolean isSuppressInlineHTML() { return getPreferences().getBoolean(INLINE_HTML_SUPPRESSION, false); } public void setSuppressInlineHTML(boolean suppressInlineHTML) { getPreferences().putBoolean(INLINE_HTML_SUPPRESSION, suppressInlineHTML); } public String getHtmlTemplate() { return getPreferences().get(HTML_TEMPLATE, MarkdownPanel.getDefaultHtmlTemplate()); } public void setHtmlTemplate(String htmlTemplate) { getPreferences().put(HTML_TEMPLATE, htmlTemplate); } public boolean isViewHtmlOnSave() { return getPreferences().getBoolean(VIEW_HTML_ON_SAVE, false); } public void setViewHtmlOnSave(boolean onSave) { getPreferences().putBoolean(VIEW_HTML_ON_SAVE, onSave); } public boolean isSaveInSourceDir() { return getPreferences().getBoolean(SAVE_IN_SOURCE_DIR, false); } public void setSaveInSourceDir(boolean saveIn) { getPreferences().putBoolean(SAVE_IN_SOURCE_DIR, saveIn); } public boolean isExportOnSave() { return getPreferences().getBoolean(EXPORT_ON_SAVE, false); } public void setExportOnSave(boolean export) { getPreferences().putBoolean(EXPORT_ON_SAVE, export); } // typing hooks public boolean isTypingHooks() { return getPreferences().getBoolean(TYPING_HOOKS, false); } public void setTypingHooks(boolean isTypingHooks) { getPreferences().putBoolean(TYPING_HOOKS, isTypingHooks); } public boolean isAutoAdditionList() { return getPreferences().getBoolean(AUTO_ADDITION_LIST, false); } public void setAutoAdditionList(boolean isAutoAdditionList) { getPreferences().putBoolean(AUTO_ADDITION_LIST, isAutoAdditionList); } public boolean isRemoveEmptyList() { return getPreferences().getBoolean(REMOVE_EMPTY_LIST, false); } public void setRemoveEmptyList(boolean isRemoveEmptyList) { getPreferences().putBoolean(REMOVE_EMPTY_LIST, isRemoveEmptyList); } public boolean isReorderOrderedListNumber() { return getPreferences().getBoolean(REORDER_ORDERED_LIST, false); } public void setReorderOrderedListNumber(boolean isReorder) { getPreferences().putBoolean(REORDER_ORDERED_LIST, isReorder); } public boolean isRemoveOrderedListNumber() { return getPreferences().getBoolean(REMOVE_ORDERED_LIST, false); } public void setRemoveOrderedListNumber(boolean isRemoveOrderedList) { getPreferences().putBoolean(REMOVE_ORDERED_LIST, isRemoveOrderedList); } public boolean isFXHtmlViewEnabled() { return getPreferences().getBoolean(FX_HTML_VIEW_ENABLED, true); } public void setFXHtmlViewEnabled(boolean fxHtmlViewEnabled) { getPreferences().putBoolean(FX_HTML_VIEW_ENABLED, fxHtmlViewEnabled); } public boolean isCustomPreviewRefreshIntervalUsed() { return getPreferences() .getBoolean(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL, DEFAULT_USE_CUSTOM_PREVIEW_REFRESH_INTERVAL); } public void setUseCustomPreviewRefreshInterval(final boolean useCustomPreviewRefreshInterval) { getPreferences().putBoolean(USE_CUSTOM_PREVIEW_REFRESH_INTERVAL, useCustomPreviewRefreshInterval); } public int getCustomPreviewRefreshInterval() { return getPreferences() .getInt(CUSTOM_PREVIEW_REFRESH_INTERVAL, DEFAULT_PREVIEW_REFRESH_INTERVAL); } public int getPreviewRefreshIntervalInUse() { return isCustomPreviewRefreshIntervalUsed() ? getPreferences().getInt(CUSTOM_PREVIEW_REFRESH_INTERVAL, DEFAULT_PREVIEW_REFRESH_INTERVAL) : DEFAULT_PREVIEW_REFRESH_INTERVAL; } public void setCustomPreviewRefreshInterval(final int customPreviewRefreshInterval) { getPreferences().putInt(CUSTOM_PREVIEW_REFRESH_INTERVAL, customPreviewRefreshInterval); } private Preferences getPreferences() { return NbPreferences.forModule(MarkdownGlobalOptions.class); } }