Skip to content

Commit

Permalink
Added Python requirements checking
Browse files Browse the repository at this point in the history
  • Loading branch information
RubbaBoy committed Jan 15, 2019
1 parent 3c2ad05 commit 18f555c
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 123 deletions.
40 changes: 40 additions & 0 deletions src/main/java/com/uddernetworks/mspaint/cmd/Commandline.java
@@ -0,0 +1,40 @@
package com.uddernetworks.mspaint.cmd;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

public class Commandline {

public static void runCommand(String command, boolean async, File directory, Consumer<String> result) {
Runnable commandRunnable = () -> {
try {
StringBuilder stringBuilder = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command, null, directory);

try (BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = input.readLine()) != null) {
stringBuilder.append(line);
}
}

result.accept(stringBuilder.toString());
} catch (IOException e) {
e.printStackTrace();
result.accept("");
}
};

if (async) {
CompletableFuture.runAsync(commandRunnable);
} else {
commandRunnable.run();
}
}

}
3 changes: 1 addition & 2 deletions src/main/java/com/uddernetworks/mspaint/code/ImageClass.java
Expand Up @@ -77,8 +77,7 @@ public void highlight(File highlightImagePath) throws IOException {
System.out.println("\n" + prefix + "Highlighting...");
long start = System.currentTimeMillis();

LanguageHighlighter highlighter = this.mainGUI.getCurrentLanguage().getLanguageHighlighter();
highlighter.highlight(scannedImage);
new LanguageHighlighter().highlight(this.mainGUI.getCurrentLanguage().getLanguageHighlighter(), this.scannedImage);

System.out.println(prefix + "Finished highlighting in " + (System.currentTimeMillis() - start) + "ms");

Expand Down
Expand Up @@ -42,10 +42,10 @@ public interface Language {
boolean meetsRequirements();

/**
* Gets the language's LanguageHighlighter for custom highlighting
* @return the language's LanguageHighlighter
* Gets the language's Lexer for custom highlighting
* @return the language's implementation of DefaultJFlexLexer
*/
LanguageHighlighter getLanguageHighlighter();
DefaultJFlexLexer getLanguageHighlighter();

/**
* Compiles and/or executes the given image. If the language does not compile, it will interpret the files.
Expand Down
Expand Up @@ -8,27 +8,17 @@
import java.util.ArrayList;
import java.util.List;

public interface LanguageHighlighter {
DefaultJFlexLexer getHighlighter();
public class LanguageHighlighter {

default void highlight(ScannedImage scannedImage) {
public void highlight(DefaultJFlexLexer lexer, ScannedImage scannedImage) {
String text = scannedImage.getPrettyString();

DefaultJFlexLexer highlighter = getHighlighter();

List<Token> toks = new ArrayList<>(text.length() / 10);
long ts = System.nanoTime();
int len = text.length();
try {
Segment seg = new Segment();
seg.array = text.toCharArray();
seg.offset = 0;
seg.count = text.length();
highlighter.parse(seg, 0, toks);
} finally {
System.out.println(String.format("Parsed %d in %d ms, giving %d tokens\n",
len, (System.nanoTime() - ts) / 1000000, toks.size()));
}

Segment seg = new Segment();
seg.array = text.toCharArray();
seg.count = text.length();
lexer.parse(seg, 0, toks);

toks.forEach(token -> {
TokenType type = token.getTokenType();
Expand All @@ -42,4 +32,5 @@ default void highlight(ScannedImage scannedImage) {
}
});
}

}
@@ -1,9 +1,9 @@
package com.uddernetworks.mspaint.code.languages.brainfuck;

import com.uddernetworks.mspaint.code.ImageClass;
import com.uddernetworks.mspaint.code.languages.DefaultJFlexLexer;
import com.uddernetworks.mspaint.code.languages.Language;
import com.uddernetworks.mspaint.code.languages.LanguageError;
import com.uddernetworks.mspaint.code.languages.LanguageHighlighter;
import com.uddernetworks.mspaint.imagestreams.ImageOutputStream;
import com.uddernetworks.mspaint.main.MainGUI;

Expand All @@ -18,8 +18,6 @@

public class BrainfuckLanguage implements Language {

private BrainfuckLanguageHighlighter brainfuckLanguageHighlighter = new BrainfuckLanguageHighlighter();

@Override
public String getName() {
return "Brainfuck";
Expand All @@ -46,8 +44,8 @@ public boolean meetsRequirements() {
}

@Override
public LanguageHighlighter getLanguageHighlighter() {
return this.brainfuckLanguageHighlighter;
public DefaultJFlexLexer getLanguageHighlighter() {
return new BrainfuckLexer();
}

@Override
Expand Down

This file was deleted.

@@ -1,9 +1,9 @@
package com.uddernetworks.mspaint.code.languages.java;

import com.uddernetworks.mspaint.code.ImageClass;
import com.uddernetworks.mspaint.code.languages.DefaultJFlexLexer;
import com.uddernetworks.mspaint.code.languages.Language;
import com.uddernetworks.mspaint.code.languages.LanguageError;
import com.uddernetworks.mspaint.code.languages.LanguageHighlighter;
import com.uddernetworks.mspaint.imagestreams.ImageOutputStream;
import com.uddernetworks.mspaint.main.MainGUI;

Expand All @@ -18,7 +18,6 @@
public class JavaLanguage implements Language {

private CodeCompiler codeCompiler = new CodeCompiler();
private LanguageHighlighter languageHighlighter = new JavaLanguageHighlighter();

@Override
public String getName() {
Expand Down Expand Up @@ -46,8 +45,8 @@ public boolean meetsRequirements() {
}

@Override
public LanguageHighlighter getLanguageHighlighter() {
return this.languageHighlighter;
public DefaultJFlexLexer getLanguageHighlighter() {
return new JavaLexer();
}

@Override
Expand Down

This file was deleted.

@@ -1,9 +1,10 @@
package com.uddernetworks.mspaint.code.languages.python;

import com.uddernetworks.mspaint.cmd.Commandline;
import com.uddernetworks.mspaint.code.ImageClass;
import com.uddernetworks.mspaint.code.languages.DefaultJFlexLexer;
import com.uddernetworks.mspaint.code.languages.Language;
import com.uddernetworks.mspaint.code.languages.LanguageError;
import com.uddernetworks.mspaint.code.languages.LanguageHighlighter;
import com.uddernetworks.mspaint.imagestreams.ImageOutputStream;
import com.uddernetworks.mspaint.main.MainGUI;

Expand All @@ -12,11 +13,12 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern;

public class PythonLanguage implements Language {

private PythonLanguageHighlighter pythonLanguageHighlighter = new PythonLanguageHighlighter();

@Override
public String getName() {
return "Python";
Expand All @@ -39,12 +41,25 @@ public boolean isInterpreted() {

@Override
public boolean meetsRequirements() {
return true;
try {
var versionPattern = Pattern.compile("Python 3\\.[0-9]\\.[0-9]");

var future = new CompletableFuture<String>();
Commandline.runCommand("py --version", false, null, future::complete);
var result = future.get();

var matcher = versionPattern.matcher(result);

return matcher.matches();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
return false;
}
}

@Override
public LanguageHighlighter getLanguageHighlighter() {
return this.pythonLanguageHighlighter;
public DefaultJFlexLexer getLanguageHighlighter() {
return new PythonLexer();
}

@Override
Expand Down

This file was deleted.

0 comments on commit 18f555c

Please sign in to comment.