Coder Social home page Coder Social logo

vsch / idea-multimarkdown Goto Github PK

View Code? Open in Web Editor NEW
811.0 34.0 130.0 4.96 GB

Markdown language support for IntelliJ IDEA.

Home Page: https://plugins.jetbrains.com/plugin/7896-markdown-navigator

License: Apache License 2.0

Java 46.08% CSS 1.29% HTML 2.65% Kotlin 48.60% JavaScript 1.37% Python 0.01%
intellij-plugin markdown-editor markdown-to-html markdown-viewer markdown-toc

idea-multimarkdown's Introduction

Markdown Navigator 3.0

Table of Contents

Overview

Screenshot

Markdown language support for IntelliJ platform

You can download it on the JetBrains plugin page.

Document with pleasure!

Work with Markdown files like you do with other languages in the IDE, by getting full support for:

  • Paste images into documents for fast screen capture links
  • Drag & Drop files and images for fast link insertion
  • Drag and Drop text, HTML or links from other applications
  • Formatting to clean up documents with a keystroke
  • Navigation and Find Usages to find references without effort
  • Copy Markdown as JIRA, YouTrack or HTML formatted text
  • Convert HTML to Markdown by pasting it into a Markdown document.
  • Export to HTML or PDF to share with others
  • Refactoring of all referencing elements:
    • files ⟺ links
    • headings ⟺ ref anchors
    • footnotes ⟺ footnote refs
    • references ⟺ ref links/ref images
  • Completions to reduce typing:
    • link address ⇐ files
    • ref anchors ⇐ headings
    • footnote refs ⇐ footnotes
    • ref links/ref images ⇐ references
    • link text ⇐ ref anchor/link address
  • Error and Warning annotations to help catch mistakes early
  • Intention actions for fast results with less effort
  • Wrap on Typing to keep it nicely formatted as you edit
  • GitHub style rendering that you are used to, out of the box
  • GitLab parsing and rendering extensions
  • Math block and inline rendering by Katex or codecogs.com
  • PlantUML fenced code rendering by PlantUML or gravizo.com
  • Fast typing response for distraction free editing
  • Fully customizable to adjust to your preferences and project needs

Two tier model

  1. Previewing, syntax highlighting, basic editing functionality with link completions with split editor preview is available in the basic open source edition. Intended for mostly previewing and editing of Markdown documents without full document format.

  2. Advanced features used for creating and maintaining Markdown documents: refactoring, find usages, validation and auto formatting were available with the Enhanced version, from the JetBrains Marketplace.

    ℹ️ The latest release is only to address compatibility issues for newer IDEs from 2021.3 to 2023.1.1.

    It is a full-featured Enhanced version, released without needing a license.

    It is only intended as a measure to allow users, who depended on this plugin for their workflow, to have a working solution until I can figure out if it is possible to continue maintaining this plugin in an economically sustainable manner and return Markdown Navigator Enhanced to the JetBrains Marketplace as a paid plugin, or let it go for good.

Source

The source in this repository is for the unlicensed version of the plugin. As such, it does not have all the features of the enhanced version.

Working with the source

IntelliJ Gradle Plugin development environment. See Building from sources

Some internal details, should you care to know

The pegdown Markdown parser used by the plugin in its original incarnation was changed to flexmark-java and pegdown dependencies have been removed as of version 2.2.0.

flexmark-java is a fork of commonmark-java, with changes:

  • source element based AST with detailed break down of each element for syntax highlighting
  • complete source position tracking for all elements and their lexical parts
  • optimized for efficient parsing with many parser extensions installed
  • unified core and extension options API to simplify parser/renderer configuration
  • options to tweak core parser rules

On the coding end, the new parser is a joy to maintain and enhance. The parser architecture, inherited from commonmark-java, is easy to debug and test. Markdown element parsers have little or no interdependencies with other element parsers making it easy to fine tune parser behaviour on a per-element basis and add parser configuration options to emulate other Markdown processors. All this is in contrast to pegdown's one big PEG grammar implementation with everything potentially inter-dependent.

Background

It all started with a desire to see Markdown files in PhpStorm IDE as they would look on GitHub. I was already using nicoulaj/idea-markdown plugin but found its preview was more like Craig's List than GitHub. It did not appear to have been recently updated, so I decided to fork it and modify its style sheet. How hard could that be?

I found out quickly that there was more to it than meets the eye. Rendering is done by Swing not a browser, the parser is HTML 3.1, with many features not implemented. Additionally, the Table extension did not work in pegdown version used by the plugin.

I upgraded the plugin to use the latest pegdown, parboiled. Fixed a few bugs. I was already in the code, so I might as well add a few more features like user editable style sheet, fix a few more bugs, add updates to preview so that I could split the editor pane and edit in one while seeing the preview in the other.

Now, years later, the plugin is brimming with features to make Markdown editing and creation a breeze. It was a lot more work, and code, than I imagined but more satisfying that I had hoped.

It has been a fun trip down the rabbit hole of IntelliJ IDEA plugin development which started with a simple desire for a Markdown preview that looked like GitHub's.


* This plugin was originally based on the nicoulaj/idea-markdown plugin by nicoulaj, which was based on pegdown library by sirthias.

Markdown Navigator, Copyright (c) 2015-2023, Vladimir Schneider, All Rights Reserved.

idea-multimarkdown's People

Contributors

cmf avatar grantham avatar lmeadors avatar nicoulaj avatar valich avatar vsch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

idea-multimarkdown's Issues

Incompatibility with PyCharm 4.5.3/4

I tried to use the plug-in by PyCharm (4.5.x) and when I try to open my markdown files I have follow exception

13.47.37 PluginException: javafx/beans/value/ChangeListener : Unsupported major.minor version 52.0 [Plugin: com.vladsch.idea.multimarkdown]

I downloaded and installed it by plugin PyCharm interface and I'm wondering if I missing something (I did just one click and restart PyCharm). I tried it by 4.5.3 and 4.5.4 versions but I suspect that is an 4.5.x related issue.

Incorrect coloring of completed task lists when using capital X.

When writing a task list, I typically complete it with:

- [X] Some Task

However, that highlights as a link. However, this highlights correctly:

- [x] Some Task

See the following screenshot:

taskhighlightingbug

This is obviously a minor issue, but it would be nice if it works, since it does on GitHub.

PHPStorm - IDE Fatal Error (Already disposed: Project (Disposed) mycheck-docs

PHPStorm version 9.0.2
Multimarkdown version 1.1.12

Step 1-
Closed an open project (mycheck-docs) after saving, committing, and pushing.

Step 2-
Without closing PHPStorm, opened a new, unrelated project.

Step 3-
Upon opening of the project, was greeted with the following IDE fatal error:

Already disposed: Project (Disposed) mycheck-docs
java.lang.AssertionError: Already disposed: Project (Disposed) mycheck-docs
    at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:192)
    at com.intellij.openapi.fileEditor.FileEditorManager.getInstance(FileEditorManager.java:35)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditor.isMyTabSelected(MultiMarkdownFxPreviewEditor.java:663)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditor$10$1.run(MultiMarkdownFxPreviewEditor.java:655)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:332)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

NullPointerException: InvocationTargetException

WebStorm 10.0.4 , windows 10 x64, JDK 1.8.0_60

InvocationTargetException

Detail:

java.lang.NullPointerException
    at com.sun.glass.ui.Application.run(Application.java:146)
    at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:263)
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
    at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:254)
    at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:269)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditor$MyJFXPanel.<init>(MultiMarkdownFxPreviewEditor.java:221)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditor$MyJFXPanel.<init>(MultiMarkdownFxPreviewEditor.java:221)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditor.<init>(MultiMarkdownFxPreviewEditor.java:291)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditorProvider.createEditor(MultiMarkdownFxPreviewEditorProvider.java:127)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditorProvider.createEditor(MultiMarkdownFxPreviewEditorProvider.java:105)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$12.run(FileEditorManagerImpl.java:859)
    at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2369)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:842)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:776)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$9.run(FileEditorManagerImpl.java:756)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:124)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:85)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:753)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:694)
    at com.intellij.openapi.fileEditor.ex.FileEditorManagerEx.openFile(FileEditorManagerEx.java:146)
    at com.intellij.codeInsight.navigation.NavigationUtil.a(NavigationUtil.java:191)
    at com.intellij.codeInsight.navigation.NavigationUtil.openFileWithPsiElement(NavigationUtil.java:167)
    at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.navigate(AbstractPsiBasedNode.java:207)
    at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.navigate(AbstractPsiBasedNode.java:217)
    at com.intellij.ide.projectView.impl.nodes.PsiFileNode.navigate(PsiFileNode.java:132)
    at com.intellij.util.OpenSourceUtil.navigate(OpenSourceUtil.java:53)
    at com.intellij.util.OpenSourceUtil.openSourcesFrom(OpenSourceUtil.java:31)
    at com.intellij.util.EditSourceOnDoubleClickHandler$TreeMouseListener.processDoubleClick(EditSourceOnDoubleClickHandler.java:130)
    at com.intellij.util.EditSourceOnDoubleClickHandler$TreeMouseListener.onDoubleClick(EditSourceOnDoubleClickHandler.java:122)
    at com.intellij.ui.DoubleClickListener.onClick(DoubleClickListener.java:30)
    at com.intellij.ui.ClickListener$1.mouseReleased(ClickListener.java:73)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at com.intellij.ui.treeStructure.Tree.processMouseEvent(Tree.java:421)
    at com.intellij.ide.dnd.aware.DnDAwareTree.processMouseEvent(DnDAwareTree.java:53)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:702)
    at java.awt.EventQueue$3.run(EventQueue.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:724)
    at java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:565)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

javafx/embed/swing/JFXPanel : Unsupported major.minor version 52.0 [Plugin: com.vladsch.idea.multimarkdown]

javafx/embed/swing/JFXPanel : Unsupported major.minor version 52.0 [Plugin: com.vladsch.idea.multimarkdown]
com.intellij.diagnostic.PluginException: javafx/embed/swing/JFXPanel : Unsupported major.minor version 52.0 [Plugin: com.vladsch.idea.multimarkdown]
at com.intellij.ide.plugins.cl.PluginClassLoader.b(PluginClassLoader.java:130)
at com.intellij.ide.plugins.cl.PluginClassLoader.a(PluginClassLoader.java:77)
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:266)
at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditorProvider.createEditor(MultiMarkdownFxPreviewEditorProvider.java:115)
at com.vladsch.idea.multimarkdown.editor.MultiMarkdownFxPreviewEditorProvider.createEditor(MultiMarkdownFxPreviewEditorProvider.java:105)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$12.run(FileEditorManagerImpl.java:859)
at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2369)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:842)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:776)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$9.run(FileEditorManagerImpl.java:756)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:117)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:85)
20150909095446

Assertion when adding/removing a line

The following assertion appear when I create or remove a line :

Assertion failed
java.lang.Throwable
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:144)
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:153)
    at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.findClass(JavaFileManagerImpl.java:114)
    at com.intellij.psi.impl.PsiElementFinderImpl.findClass(PsiElementFinderImpl.java:54)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.a(JavaPsiFacadeImpl.java:124)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:101)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:98)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:949)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveClassReference(MultiMarkdownPathResolver.java:96)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$2.run(MultiMarkdownPathResolver.java:162)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveLink(MultiMarkdownPathResolver.java:180)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.canResolveLink(MultiMarkdownPathResolver.java:110)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.checkTarget(MultiMarkdownLinkRenderer.java:66)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.render(MultiMarkdownLinkRenderer.java:82)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:134)
    at org.pegdown.ast.ExpLinkNode.accept(ExpLinkNode.java:33)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:381)
    at org.pegdown.ast.SuperNode.accept(SuperNode.java:43)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.printTag(ToHtmlSerializer.java:418)
    at org.pegdown.ToHtmlSerializer.printBreakBeforeTag(ToHtmlSerializer.java:425)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:190)
    at org.pegdown.ast.ParaNode.accept(ParaNode.java:35)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:89)
    at org.pegdown.ast.RootNode.accept(RootNode.java:51)
    at org.pegdown.ToHtmlSerializer.toHtml(ToHtmlSerializer.java:70)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.markdownToHtml(MultiMarkdownPreviewEditor.java:471)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.updateHtmlContent(MultiMarkdownPreviewEditor.java:492)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.access$100(MultiMarkdownPreviewEditor.java:74)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor$5$1.run(MultiMarkdownPreviewEditor.java:401)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:337)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:321)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:861)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:649)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:380)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)



java.lang.Throwable
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:144)
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:153)
    at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.findClass(JavaFileManagerImpl.java:114)
    at com.intellij.psi.impl.PsiElementFinderImpl.findClass(PsiElementFinderImpl.java:54)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.a(JavaPsiFacadeImpl.java:124)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:101)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:98)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:949)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveClassReference(MultiMarkdownPathResolver.java:96)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$2.run(MultiMarkdownPathResolver.java:162)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveLink(MultiMarkdownPathResolver.java:180)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.canResolveLink(MultiMarkdownPathResolver.java:110)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.checkTarget(MultiMarkdownLinkRenderer.java:66)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.render(MultiMarkdownLinkRenderer.java:82)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:134)
    at org.pegdown.ast.ExpLinkNode.accept(ExpLinkNode.java:33)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:381)
    at org.pegdown.ast.SuperNode.accept(SuperNode.java:43)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.printTag(ToHtmlSerializer.java:418)
    at org.pegdown.ToHtmlSerializer.printBreakBeforeTag(ToHtmlSerializer.java:425)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:190)
    at org.pegdown.ast.ParaNode.accept(ParaNode.java:35)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:89)
    at org.pegdown.ast.RootNode.accept(RootNode.java:51)
    at org.pegdown.ToHtmlSerializer.toHtml(ToHtmlSerializer.java:70)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.markdownToHtml(MultiMarkdownPreviewEditor.java:471)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.updateHtmlContent(MultiMarkdownPreviewEditor.java:492)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.access$100(MultiMarkdownPreviewEditor.java:74)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor$5$1.run(MultiMarkdownPreviewEditor.java:401)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:337)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:321)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:861)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:649)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:380)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)



java.lang.Throwable
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:144)
    at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:153)
    at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.findClass(JavaFileManagerImpl.java:114)
    at com.intellij.psi.impl.PsiElementFinderImpl.findClass(PsiElementFinderImpl.java:54)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.a(JavaPsiFacadeImpl.java:124)
    at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:101)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:98)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$1.compute(MultiMarkdownPathResolver.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:949)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveClassReference(MultiMarkdownPathResolver.java:96)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver$2.run(MultiMarkdownPathResolver.java:162)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.resolveLink(MultiMarkdownPathResolver.java:180)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPathResolver.canResolveLink(MultiMarkdownPathResolver.java:110)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.checkTarget(MultiMarkdownLinkRenderer.java:66)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownLinkRenderer.render(MultiMarkdownLinkRenderer.java:82)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:134)
    at org.pegdown.ast.ExpLinkNode.accept(ExpLinkNode.java:33)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:381)
    at org.pegdown.ast.SuperNode.accept(SuperNode.java:43)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.printTag(ToHtmlSerializer.java:418)
    at org.pegdown.ToHtmlSerializer.printBreakBeforeTag(ToHtmlSerializer.java:425)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:190)
    at org.pegdown.ast.ParaNode.accept(ParaNode.java:35)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildrenSkipFirst(MultiMarkdownToHtmlSerializer.java:188)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownToHtmlSerializer.visitChildren(MultiMarkdownToHtmlSerializer.java:113)
    at org.pegdown.ToHtmlSerializer.visit(ToHtmlSerializer.java:89)
    at org.pegdown.ast.RootNode.accept(RootNode.java:51)
    at org.pegdown.ToHtmlSerializer.toHtml(ToHtmlSerializer.java:70)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.markdownToHtml(MultiMarkdownPreviewEditor.java:471)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.updateHtmlContent(MultiMarkdownPreviewEditor.java:492)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor.access$100(MultiMarkdownPreviewEditor.java:74)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditor$5$1.run(MultiMarkdownPreviewEditor.java:401)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:337)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:321)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:861)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:649)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:380)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

I use the last JDK + the last EAP of IDEA and the last version of the plugin on Linux.

PHPStorm - IDE Fatal Error

Hello,

I have multimarkdown installed on PHPStorm 9.0.2. Today, while opening up the IDE, I was greeted with an IDE fatal error. Here are the details from the crash report:

@NotNull method com/vladsch/idea/multimarkdown/util/ThreadSafeMirrorCache.getCache must not return null

java.lang.IllegalStateException: @NotNull method com/vladsch/idea/multimarkdown/util/ThreadSafeMirrorCache.getCache must not return null
    at com.vladsch.idea.multimarkdown.util.ThreadSafeMirrorCache.getCache(ThreadSafeMirrorCache.java:30)
    at com.vladsch.idea.multimarkdown.MultiMarkdownProjectComponent$MainFileListUpdater$1.run(MultiMarkdownProjectComponent.java:167)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:332)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Add color attributes define colors in the CSS used for the Preview tab

Add attributes that define colors in the CSS used for the Preview tab so that preview colors are also coming from user configuration instead of having to hardcode them into the CSS.

Then dynamically replace the place holders in the CSS before passing it on to the HTMLEditorKit. This would allow creating color schemes without having to modify the CSS.

Refactor rename wiki markdown file will not update links if the name contains - or @$

This is an issue on a high priority list. IDEA does not generate the usual refactoring calls for references if the referring element text contains spaces, combinations of $ @ / etc. That are needed for wiki link refs.

This affects renaming or moving a file that has - or @ and $ in particular combinations.

The link references are still active and you can do a refactor rename operation on the link to get the file rename dialog, but the links will not be updated with the new file name. Trying to get IntelliJ help to get this one resolved since it is out of my reach.

Affects version 1.1.6

Failed processing Markdown document: Error while parsing action

Threw away cache and reloaded.

Error message

Failed processing Markdown document: Error while parsing action 'Root/Sequence/ZeroOrMore/Sequence/Block/FirstOf/Table/Sequence/Optional/Sequence/NodeSequence/Sequence/TableRow/Sequence/OneOrMore/Sequence/TableCell/NodeSequence/Sequence/OneOrMore/Sequence/Inline/Inline_Action1' at input position (line 503, pos 1):

Details

Failed processing Markdown document: Error while parsing action 'Root/Sequence/ZeroOrMore/Sequence/Block/FirstOf/Table/Sequence/Optional/Sequence/NodeSequence/Sequence/TableRow/Sequence/OneOrMore/Sequence/TableCell/NodeSequence/Sequence/OneOrMore/Sequence/Inline/Inline_Action1' at input position (line 503, pos 1):
**strRightBack**  _.strRightBack(string, pattern)
^

org.pegdown.ParsingTimeoutException
org.parboiled.errors.ParserRuntimeException: Error while parsing action 'Root/Sequence/ZeroOrMore/Sequence/Block/FirstOf/Table/Sequence/Optional/Sequence/NodeSequence/Sequence/TableRow/Sequence/OneOrMore/Sequence/TableCell/NodeSequence/Sequence/OneOrMore/Sequence/Inline/Inline_Action1' at input position (line 503, pos 1):
**strRightBack**  _.strRightBack(string, pattern)
^

org.pegdown.ParsingTimeoutException
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:366)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:41)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.OneOrMoreMatcher.match(OneOrMoreMatcher.java:38)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.OneOrMoreMatcher.match(OneOrMoreMatcher.java:38)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.matchers.VarFramingMatcher.match(VarFramingMatcher.java:44)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.OptionalMatcher.match(OptionalMatcher.java:36)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.matchers.VarFramingMatcher.match(VarFramingMatcher.java:44)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.parserunners.BasicParseRunner.run(BasicParseRunner.java:72)
    at org.parboiled.parserunners.ReportingParseRunner.runBasicMatch(ReportingParseRunner.java:86)
    at org.parboiled.parserunners.ReportingParseRunner.run(ReportingParseRunner.java:66)
    at org.parboiled.parserunners.AbstractParseRunner.run(AbstractParseRunner.java:81)
    at org.pegdown.Parser.parseToParsingResult(Parser.java:1787)
    at org.pegdown.Parser.parseInternal(Parser.java:1774)
    at org.pegdown.Parser.parse(Parser.java:91)
    at org.pegdown.PegDownProcessor.parseMarkdown(PegDownProcessor.java:181)
    at com.vladsch.idea.multimarkdown.parser.MultiMarkdownLexParser.parseMarkdown(MultiMarkdownLexParser.java:282)
    at com.vladsch.idea.multimarkdown.parser.MultiMarkdownLexer.start(MultiMarkdownLexer.java:83)
    at com.intellij.lexer.DelegateLexer.start(DelegateLexer.java:39)
    at com.intellij.psi.impl.cache.impl.BaseFilterLexer.start(BaseFilterLexer.java:153)
    at com.intellij.lexer.Lexer.start(Lexer.java:47)
    at com.intellij.psi.impl.cache.impl.BaseFilterLexerUtil.scanContent(BaseFilterLexerUtil.java:48)
    at com.intellij.psi.impl.cache.impl.todo.LexerBasedTodoIndexer.map(LexerBasedTodoIndexer.java:36)
    at com.intellij.psi.impl.cache.impl.todo.LexerBasedTodoIndexer.map(LexerBasedTodoIndexer.java:32)
    at com.intellij.psi.impl.cache.impl.todo.TodoIndex$4.map(TodoIndex.java:108)
    at com.intellij.psi.impl.cache.impl.todo.TodoIndex$4.map(TodoIndex.java:100)
    at com.intellij.util.indexing.MapReduceIndex.update(MapReduceIndex.java:398)
    at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1744)
    at com.intellij.util.indexing.FileBasedIndexImpl.a(FileBasedIndexImpl.java:1671)
    at com.intellij.util.indexing.FileBasedIndexImpl.indexFileContent(FileBasedIndexImpl.java:1616)
    at com.intellij.util.indexing.UnindexedFilesUpdater$2.consume(UnindexedFilesUpdater.java:109)
    at com.intellij.util.indexing.UnindexedFilesUpdater$2.consume(UnindexedFilesUpdater.java:105)
    at com.intellij.openapi.project.CacheUpdateRunner$MyRunnable$1.run(CacheUpdateRunner.java:225)
    at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1169)
    at com.intellij.openapi.project.CacheUpdateRunner$MyRunnable$2.run(CacheUpdateRunner.java:245)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:142)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:127)
    at com.intellij.openapi.project.CacheUpdateRunner$MyRunnable.run(CacheUpdateRunner.java:239)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:365)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at org.jetbrains.ide.PooledThreadExecutor$1$1.run(PooledThreadExecutor.java:55)
Caused by: org.pegdown.ParsingTimeoutException
    at org.pegdown.Parser.checkForParsingTimeout(Parser.java:1792)
    at org.pegdown.Action$cxzDYiA1YTOH9nKV.run(Unknown Source)
    at org.parboiled.matchers.ActionMatcher.match(ActionMatcher.java:96)
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    ... 110 more

NullPointerException

null
java.lang.NullPointerException
at com.vladsch.idea.multimarkdown.MultiMarkdownProjectComponent$MainFileListUpdater$1.run(MultiMarkdownProjectComponent.java:173)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:337)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:321)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:861)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:649)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:380)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Having too many issues with this plugin now :-(. So uninstalling.

Color inheritance from standard settings

Need a mapping of markdown elements to standard colour settings so these can be inherited:

  • Headers from constant (looks fine in dark themes at least), not applicable in general.
  • Escaped symbols can be inherited from valid escape symbols
  • Also links and images can be inherited from links
  • HTML parts can be inherited from strings-

original from issue #8

Anyone having a good idea please add to the list.

HTML code boundary detection fails

The following renders incorrectly in HTML (starting with #Header). Issues are noted within sample

Header

code line 1
code line 2 (clipped by code box)

Should not be code, but is

should be code, but is not

Export HTML

Is it possible to export the HTML as it is shown in the "HTML Preview" pane? If not, is it a feature that you envision to develop?

HTMLEditorKit parsing bug. List items of the same list being parsed as sub items of previous item.

<ul>
  <li class="bulleti"><img width="12" height="12" class="bullet" />&nbsp;test</li>
  <li class="bulleti"><img width="12" height="12" class="bullet" />&nbsp;test</li>
  <li class="bulleti"><img width="12" height="12" class="bullet" />&nbsp;test</li>
  <li class="bulleti"><img width="12" height="12" class="bullet" />&nbsp;test</li>
  <li class="bulletp"><p class="p"><img width="12" height="12" class="bullet" />&nbsp;IDEA Editor in the JS Shell toolwindow instead of JEdtiorPane. You get IDEA keymap, advanced editing functions, Application UI theme and JS syntax highlighting.</p>
    <p><img src="https://raw.githubusercontent.com/vsch/scriptmonkey/develop/assets/ScreenShot_toolwindow_default.png" alt="Default" /></p>
    <p><img src="https://raw.githubusercontent.com/vsch/scriptmonkey/develop/assets/ScreenShot_toolwindow_darcula.png" alt="Darcula" /> </p>
    <p>The switchover is not complete. Hitting return when the cursor is after the last prompt position will <code>eval()</code> all text between the last prompt and the end of text.<br/>Otherwise, return will just insert a new line (as per your keymap) in the text.</p>
    <p>You can edit any text in the pane, but to execute it you will need to copy it to the bottom of the file, after the last prompt. If the pasted text ends in \n then it will be immediately executed, otherwise it will execute when you hit return at the end of text.</p>
  </li>
  <li class="bulletp"><p class="p"><img width="12" height="12" class="bullet" />&nbsp;test</p></li>
  <li class="bulletp"><p class="p"><img width="12" height="12" class="bullet" />&nbsp;Exception in scripts now properly reflect the source file name</p></li>
  <li class="bulletp"><p class="p"><img width="12" height="12" class="bullet" />&nbsp;Exceptions in JS Shell scripts reflect the actual line and column of the source in the shell pane.</p></li>
</ul>

produces a list with sublist:
screen shot 2015-09-03 at 10 21 18 pm

instead of a single list:

  •  test
  •  test
  •  test
  •  test
  •  IDEA Editor in the JS Shell toolwindow instead of JEdtiorPane. You get IDEA keymap, advanced editing functions, Application UI theme and JS syntax highlighting.

    Default

    Darcula

    The switchover is not complete. Hitting return when the cursor is after the last prompt position will eval() all text between the last prompt and the end of text.
    Otherwise, return will just insert a new line (as per your keymap) in the text.

    You can edit any text in the pane, but to execute it you will need to copy it to the bottom of the file, after the last prompt. If the pasted text ends in \n then it will be immediately executed, otherwise it will execute when you hit return at the end of text.

  •  test

  •  Exception in scripts now properly reflect the source file name

  •  Exceptions in JS Shell scripts reflect the actual line and column of the source in the shell pane.

Unless there is a work-around, this will be a will-not-fix until I can replace the rendering engine for HTML. HTMLEditorKit has too many bugs and limitations. #16

No table support

Blah blah

Blah blah

Blah blah

Blah Blah
Blah Blah
Blah Blah
Blah Blah
Blah Blah
Blah Blah

capture d ecran 2015-08-28 a 12 25 02

HTML Preview cannot preview correct

There are something wrong when HTML preview.

Reproduce step:

  • Open any markdown file(ex: README.md), and preview result of tab 'HTML Preview' is correct first time.
    screenshot 2015-10-07 at 13 49 26
  • Switch to 'Text' tab and then click 'HTML Preview' again, the result have something wrong.
    screenshot 2015-10-07 at 13 49 54

Version:
Intellij IDEA 14, community edition
MultiMarkdown 1.1.12

Typing in larger files is way too slow because of syntax highlighting lexer speed.

This is caused the by the lexer using pegdown for parsing and then generating lexer tokens based on the AST returned by pegdown.

Need to restore syntax highlighting for files back to using Annotator while leaving the lexer strictly for color setup sample document.

Annotator should reset attributes and provide new ones for syntax highlighting. This way the lexing will not affect typing speed and added benefit is that attributes will be combined as they were before lexer was added for syntax highlighting.

Nested lists not working

This doesn't display correctly:

* a
  * sub a
* b

Unless there's a config variable that governs this behavior...?

4k monitor support

the "HTML Preview" window does not scale based on resolution or window size. Could this be resolved by using relative sizes instead of hard-coded "px" sizes? my assumption is its being powered by CSS. alternatively, use the font size specified in the IDE for the code window?

Syntax highlighting is gone

For some reason the syntax highlighting is not working for me. I have all the options enabled.

preferences

IJ-141.1311.1 (14.1.5 EAP)
Plugin version 1.0.14

java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Align project with CommonMark

CommonMark is a spec of Markdown created by many big names in the industry (Github, Jeff Atwood). I won't explain a lot of what it is as it can be read about here: http://commonmark.org/

I believe IntelliJ IDE's need a plugin that follows CommonMark and think this plugin would be a great option to base it off of. Particularly it could use the java implementation that already exists: https://github.com/atlassian/commonmark-java

I'd be willing to spend some time getting some initial prototypes working.

Thoughts?

task item (done) not checked?

Hello. I just tried MultiMarkdown for pycharm (141.2569 on OS X 10.10.5) and it looks pretty cool. However, I wonder why the former checkbox in this example is not shown as checked?

* [x] done 
* [ ] not done

screen shot 2015-10-07 at 11 29 42

Not working in version 14.0.3

The current "Compatible builds" information is: 134.549.
I tried installing it on a version 14.0.3 build 139.1117. Launching it here fails with two occurences of java.lang.NoClassDefFoundError: com/intellij/ide/scratch/ScratchFileService

Scratch Files were introduced in version 14 of IntelliJ IDEA, so it is not entirely clear to me, why this is happening. There could of course have been a refactoring with the enhancements in 1.41, which have either added or moved the class...
Depending of where the problem arises, it might not be feasible to fix. But then the compatibility information should be updated to reflect that you need a recent version. (I don't know how these build-numbers change between Community and Ultimate editions, though.)

Full stack-trace:

java.lang.NoClassDefFoundError: com/intellij/ide/scratch/ScratchFileService
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditorProvider.accept(MultiMarkdownPreviewEditorProvider.java:49)
    at com.vladsch.idea.multimarkdown.editor.MultiMarkdownPreviewEditorProvider.accept(MultiMarkdownPreviewEditorProvider.java:66)
    at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl$2.compute(FileEditorProviderManagerImpl.java:92)
    at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl$2.compute(FileEditorProviderManagerImpl.java:89)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:920)
    at com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl.getProviders(FileEditorProviderManagerImpl.java:89)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.c(FileEditorManagerImpl.java:963)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:768)
    at com.intellij.openapi.fileEditor.impl.EditorsSplitters$UIBuilder.processFiles(EditorsSplitters.java:855)
    at com.intellij.openapi.fileEditor.impl.EditorsSplitters$UIBuilder.processFiles(EditorsSplitters.java:830)
    at com.intellij.openapi.fileEditor.impl.EditorsSplitters$ConfigTreeReader.process(EditorsSplitters.java:821)
    at com.intellij.openapi.fileEditor.impl.EditorsSplitters.openFiles(EditorsSplitters.java:245)
    at com.intellij.openapi.fileEditor.impl.OpenFilesActivity.runActivity(OpenFilesActivity.java:35)
    at com.intellij.ide.startup.impl.StartupManagerImpl$2.run(StartupManagerImpl.java:146)
    at com.intellij.ide.startup.impl.StartupManagerImpl.b(StartupManagerImpl.java:303)
    at com.intellij.ide.startup.impl.StartupManagerImpl.runPostStartupActivitiesFromExtensions(StartupManagerImpl.java:151)
    at com.intellij.openapi.project.impl.ProjectManagerImpl$8.run(ProjectManagerImpl.java:471)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$6.run(ProgressManagerImpl.java:410)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:621)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$7.run(ProgressManagerImpl.java:422)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$3.run(ProgressManagerImpl.java:194)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:181)
    at com.intellij.openapi.application.impl.ApplicationImpl$10$1.run(ApplicationImpl.java:641)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:406)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
    at org.jetbrains.ide.PooledThreadExecutor$1$1.run(PooledThreadExecutor.java:56)

Correct the idea-version dependency or support older JDK

Even if it is possible on MacOS to change the JDK IDEA (or IDEs based on it) is started with, there are tons of issues that require to use the legacy 1.6 that Apple provided.
Additionally, PHPStorm for instance is still not shipped with a bundled JDK, unless you download the special Yosemite version, and "[...] this non-default option may contain some issues."
https://intellij-support.jetbrains.com/hc/en-us/articles/206827627-IDE-doesn-t-start-after-updating-to-Mac-OS-Yosemite-or-Mavericks

So I believe the decision to require a higher Java version is a bad idea unless Jetbrains changes its opinion and minimum requirements.

To avoid any installation trouble and unhappy users I suggest to

Add Parser and PSI related functionality

  • add a PSIBuilder compatible parser and implement expected functionality:
  • for wiki links
    • missing link reference annotations
    • link code completion for wiki pages
    • goto link target
    • file move/rename to change reference links to new name/location
    • find usages of references
    • annotation of missing link targets
    • quick fixes for: missing targets, links with - instead of space, files with space instead of dash, character case mismatch between link and file, unreachable link (outside the wiki home directory)
    • inspections
    • wiki to explicit link
    • automatic wiki to explicit link refactoring when the target is moved out of wiki link range
  • for image links
    • file move/rename to change reference links to new name/location
    • find usages of references
    • link code completion for link to in-project image files
    • alt-text code completion by using the link file name to derive the text (similar to wiki link page ref to file name conversion)
    • annotation of missing link targets
    • quick fixes for: missing targets, links to non-image targets
    • inspections
    • absolute/relative address toggle
  • for explicit links
    • file move/rename to change reference links to new name/location
    • targets to anchor links of headers should be considered as references
    • find usages of references both to files and anchor links
    • link code completion for images
    • annotation of missing link targets
    • absolute/relative address toggle
    • explicit to wiki where possible
  • for references
    • find usages of references
    • code folding for link references
    • renaming of link references
    • annotation of unused references
    • annotation of missing reference targets
    • code completion of link targets
    • file move/rename to change reference links to new name/location
    • quick fix for missing targets
    • quick fix for unused references
    • change link/image to reference equivalent and vice-versa
  • for reference links
    • goto reference
    • find usages of references
    • annotation of missing references
    • code completion of link references
  • for reference images
    • goto reference
    • find usages of references
    • annotation of missing references
    • code completion of link references
  • for anchor references and Headers
    • code completion
    • refactoring
    • inspections
  • for footnotes
    • find usages
    • go to definition
    • renaming of link references
    • annotation of unused footnotes

formatting, live templates and table refactoring moved to its own issue #124
language injection related functionality moved to issue #111

Github markdown processing

Add the option to use github to process the markdown file? It is after all what most of us are used to seeing.

My work flow for now is to use this plugin for editing / preview. Once it is how I like it I open it in sublime text and use my markdown package there to send it through github for processing.

HTML Preview in every scratch file

HTML Preview in every scratch file

scratch_2_-online_ipb-__projects_ipb_online_ipb-_intellij_idea__minerva__iu-142_4245_2

IntelliJ IDEA (Minerva) IU-142.4245.2
Build #IU-142.4245, built on August 25, 2015
JRE: 1.8.0_60-b27 x86_64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation

Graphviz images not displayed / converted to HTML

When trying to include a graphviz image, as shown in this example, it will instead just display the plain text code in the HTML preview and also in the HTML text. This would be very helpful though, as you then could directly generate and include your UML diagrams in your project's documentation.

Alignment issue with Task Lists

I'm running into an alignment issue with Task Lists:


screen shot 2015-09-04 at 5 28 38 pm


I'm sure I could fix it with some custom CSS, but would rather report to error, as it doesn't bother me too much. I'm wondering if this is an OS X issue; I haven't confirmed it on other platforms yet.

Proper colors inheritance

I have quite good color theme (screenshot is a bit old, but anyway) and I'd like to add markdown highlighing, but it doesn't inherit default values as specified in General and Language defaults in color settings.
Can you add proper inheritance so that I'll not need to add all colors manually? It would be much easier for me to maintain theme.

Exception in plugin Multimarkdown

PhpStorm 9.0.2 accessing a linux samba share from windows 10 desktop. Long list of jpeg files with two files differing in case but the file system is reported as ignore case: true.

Will add check to scan only project 'source roots' and 'resource roots' for link resolution which will avoid the issue. No way to fix this because it is happening in the Vfs api which is detecting a conflict between expected file system behaviour and actual.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.