Giter Club home page Giter Club logo

mspaintide's Introduction

MS Paint IDE Logo header

Website | Wiki | Discord | Installation/Demo | Custom OCR

People joke about what IDE they use often, things like Word, MS Notepad, sometimes even Eclipse, and then often times MS Paint. People joke about MS Paint because it's not even a text editor, people joke about it because it doesn't have one feature in common with IDEs. Well, this application gives MS Paint a boost, and lets MS Paint highlight, compile, and execute code, with just a few clicks of a button, and only text coming from MS Paint. It is now much more practical than things like Word, Notepad, and obviously Eclipse.

Features

MS Paint IDE has grown an insane amount over the past year, and I plan for it to grow even more in the following year. Currently, these are some of the features present in MS Paint IDE:

  • Can read, parse, and highlight code from purely image files
  • Finding and replacing of text from image files
  • Supports Java, Python, JavaScript, and Go, with many more planned
    • Includes LSP support alongside a very simple language API to add custom languages
    • Expandable build system support, with Gradle included
  • Git tools, to create and manage your project in Git from within the IDE
  • Google Assistant support
  • Right-click context menu to open and edit ANY text file in an MS Paint instance
  • Integrated buttons within MS Paint (No program modifications) to do basic IDE tasks
  • Native installer for easy usage
  • Full Discord RPC Support
  • IDE theming via CSS files
  • Program and compiler outputs as image logs

The following is a video of the IDE being installed and used (For just usage, skip to 2:18)

video preview

How It Works

MS Paint IDE is an application that runs alongside MS Paint that reads its images you make from MS Paint. It then uses a custom OCR to read, parse, highlight, and execute the text. All output files and logs are created as images, to show you the program output, and compilation/interpretation output.

Wiki

Every feature, button, usage instructions, and whatever you want is on the wiki, which is the best place to start if you're interested in trying out the IDE. https://wiki.ms-paint-i.de/

Contributing

Contributors are always welcome, and for setting up the repository locally, there's a wiki page walking through the whole process: https://wiki.ms-paint-i.de/developing. If you simply have a bug or feature request, please make a issue on GitHub using the corresponding template.

A video of getting the codebase locally is available below.

video preview

Screenshots

Many screenshots are available through the wiki, but some showing off the IDE are below so you don't need to dig through it.

screenshot

screenshot

screenshot

screenshot

screenshot

Donations

I've been doing mainly this project for over a year now, and even though I'm not making money off of it, I would be extremely appreciative for any contributions to help pay for the domain and the website's VPS. If you donate and want to be mentioned here, just put it in the donation message. Feel free to donate via PayPal or Open Collective.

Thank you very much to the current donors:

@Mr. Midnight

@Stef

@iCodeHaven

@AL1L

Special Thanks To:

YourKit Logo

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

mspaintide's People

Contributors

al1l avatar cubeserverdev avatar gleich avatar imgbotapp avatar jhg023 avatar monkeywithacupcake avatar neverrare avatar rubbaboy avatar trigary avatar wyatt-herkamp 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

mspaintide's Issues

Exception on startup

I press the jarfile, and realize it doesn't work. I do it on the console, and then it threw this:

(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\vince>java -jar C:\Users\vince\Downloads\MSPaintIDE-2.1.1-SNAPSHOT.jar
Using JDK
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
        at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.NoClassDefFoundError: com/sun/javafx/css/converters/PaintConverter
        at com.jfoenix.controls.JFXTextField$StyleableProperties.<clinit>(JFXTextField.java:266)
        at com.jfoenix.controls.JFXTextField.<init>(JFXTextField.java:171)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
        at java.base/java.lang.Class.newInstance(Class.java:560)
        at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:1019)
        at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
        at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3253)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3129)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3122)
        at com.uddernetworks.mspaint.main.MainGUI.registerThings(MainGUI.java:214)
        at com.uddernetworks.mspaint.main.MainGUI.start(MainGUI.java:192)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
        ... 1 more
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.css.converters.PaintConverter
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 29 more
Exception running application com.uddernetworks.mspaint.main.MainGUI```

Add Automatic OCR Training

In the installation window, add an option (selected by default) to train the OCR automatically. If you wanted, this could feature a selection between the default languages, however defaulting to Comic Sans would suffice. This would reduce the amount of stuff to do during setup, and would ensure that the OCR is (almost) always trained. If anyone else wants to tackle this issue and has questions about implementation, let me know.

Full Linux/Mac support

Right now the IDE is only easily available on Windows, and while it works well, it's not easy to use (if at all) on other OSs. Adding some form of abstraction for other systems may be the best solution, along with updating JPackage at the same time, as it was last used as a very early beta.

Background Service For Database

One problem with the IDE is multiple files can't be edited via the context menu at once, or while the IDE is open and the IDR is using HSQLDB, due to file locks. If a background service was introduced to essentially keep NewOCR open and just reference and queue calls from there, it would allow for as many IDE instances open as needed, and as many text editing Paint windows as needed.

If anyone else has suggestions for communication between this background service (And how the service should be made) feel free to converse here. I'd like to get this closed by Release v3.

Add TextMate Support

While the LSP support is being added, the old JFlex usage needs to be ditched as it's a pain in the ass to deal with and there are better solutions out there. TextMate is a good alternative that a lot of other IDEs use, and would allow for easier configurability.

Once I work out LSP support a bit more (I'll post updates here) it would be great if someone could help with the implementation of TextMate, the bulk of it being in LanguageHighlighter and a new uncommitted API method to give the filename of the TextMate file.

Google Assistant Support

One annoying thing you have to do in all IDEs natively including MS Paint IDE is clicking to compile and run your code. A very useful feature to have would be Google Assistant Integration, to be used on something like a phone or a Google Home device so you could say things like "Hey Google, run my program" for a hands-off approach to development.

OCR Not working

Hi,
I am unable to use MSPaintIDE, even though it is the IDE of the gods.
When testing, in the highligted folder, I see that the OCR completely fails. Attached is a screenshot.
My file:
main

OCR-ed image:
main_highlighted

Add Spring Boot

Add Spring Boot into MS Paint IDE. This would allow for much better DI and assist in the cleaning up of the spaghetti legacy code still lurking in the project. This would also make it easier to implement new features, as there would be no need to carry around instances of the main class everywhere just for simple tasks.

Null pointer when clicking start

Followed the startup directions and clicked start and got this error message:

C:\MSPaintIDE>java -jar MSPaintIDE-2.0.1-SNAPSHOT.jar
Scanning all images...
Index keys:
[!, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, , ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, ~]
Finished scanning all images in 142ms
Scanning all images...
Finished highlighting all images in 0ms
Finished writing to file in 0ms
Compiling...
Error happened! Thread Thread[Thread-6,5,main] exception: null
java.lang.NullPointerException
at com.uddernetworks.mspaint.main.CodeCompiler.compile(CodeCompiler.java:73)
at com.uddernetworks.mspaint.main.CodeCompiler.compileAndExecute(CodeCompiler.java:149)
at com.uddernetworks.mspaint.main.Main.compile(Main.java:209)
at com.uddernetworks.mspaint.main.MainGUI.lambda$startScan$3(MainGUI.java:174)
at java.lang.Thread.run(Unknown Source)

Upgrade Project

Please upgrade the project to work with Java19.
There is also an error when downloading the Java language - it complains about the GZip format.

Gradle Integration

The addition of Gradle would make the usage of Java projects much easier and in closer relation to other less-advanced IDEs. This will be done with Gradle's Tooling API to run things and get dependencies. The hardest task about this will most likely be communicating these changes with the LSP Server, though from what it looks like, the Tooling API allows you to get the jars of dependencies.

A question to others:

Should all projects be Gradle, or should it just be an option? If gradle enforcement was present, it would be easier to implement, however, not everyone may want Gradle and it would lack the necessary modularity if Maven, Bazel, etc. also wanted to be implemented.

If anyone has suggestions or would like to help with this, let me know in the comments. Following this, I would love to make a stream and/or series of programming a large application in MS Paint IDE.

Support Language Servers

To add more validation and more support for more languages easily, this IDE should consider adding support for language servers that rely on the language server protocol.

SCSS/Auto reloading themes

A good enhancement to the IDE would be automatic reloading of external theme CSS files, so a restart of the IDE (Or I believe theme switch) wouldn't be required. Also, taking advantage of SCSS would be useful with automatic change detection and automatic compiling/applying would be a good and fairly simple addition.

With the use of an SCSS compiling library, a change detector could be inserted into the ThemeManager class upon changing the active theme. Change detection could be simply derived from the TextEditorManager class, though it would be better to make a separate class just for general file change watching with appropriate callbacks.

Not working with OS's other than Windows 7

This is a known bug being fixed currently:
The MS Paint OCR isn't recognizing text made by anything not Windows 7. This is due to the slight variation of how different Windows versions render text in MS Paint, thus not allowing the OCR to scan for the letters properly. A new OCR is currently being developed to support multiple fonts, fixing the issue.

Add support for Piet

In a development environment based around parsing images, it seems only logical that there should be support for Piet, the language where source files are literally just images.

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.