diff --git a/pom.xml b/pom.xml
index 2116bcf..b5af8ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,73 +2,79 @@
- 4.0.0
+ 4.0.0
- org.lumijiez
- Monoalpha
- 1.0-SNAPSHOT
- Monoalpha
+ org.lumijiez
+ Monoalpha
+ 1.0-SNAPSHOT
+ Monoalpha
-
- UTF-8
-5.10.2
+
+ UTF-8
+ 5.10.2
+
-
-
- org.openjfx
- javafx-controls
- 17.0.6
-
-
- org.openjfx
- javafx-fxml
- 17.0.6
-
+
+
+ org.openjfx
+ javafx-controls
+ 17.0.6
+
+
+ org.openjfx
+ javafx-fxml
+ 17.0.6
+
+
+ io.github.mkpaz
+ atlantafx-base
+ 2.0.1
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.version}
+ test
+
+
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit.version}
- test
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 17
- 17
-
-
-
- org.openjfx
- javafx-maven-plugin
- 0.0.8
-
-
-
- default-cli
-
- org.lumijiez.monoalpha/org.lumijiez.monoalpha.HelloApplication
- app
- app
- app
- true
- true
- true
-
-
-
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ 17
+ 17
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.8
+
+
+
+ default-cli
+
+ org.lumijiez.monoalpha/org.lumijiez.monoalpha.MonoAlpha
+ app
+ app
+ app
+ true
+ true
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 9e7d241..1bd5c13 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,8 +1,10 @@
module org.lumijiez.monoalpha {
- requires javafx.controls;
requires javafx.fxml;
+ requires atlantafx.base;
opens org.lumijiez.monoalpha to javafx.fxml;
exports org.lumijiez.monoalpha;
+ exports org.lumijiez.monoalpha.util;
+ opens org.lumijiez.monoalpha.util to javafx.fxml;
}
\ No newline at end of file
diff --git a/src/main/java/org/lumijiez/monoalpha/MainController.java b/src/main/java/org/lumijiez/monoalpha/MainController.java
index b0ab077..745a938 100644
--- a/src/main/java/org/lumijiez/monoalpha/MainController.java
+++ b/src/main/java/org/lumijiez/monoalpha/MainController.java
@@ -3,12 +3,22 @@ package org.lumijiez.monoalpha;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.XYChart;
+import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+import org.lumijiez.monoalpha.util.CharacterSwitcher;
+import org.lumijiez.monoalpha.util.InputAnalyzer;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class HelloController {
+public class MainController {
@FXML
private BarChart barChart;
@@ -16,9 +26,34 @@ public class HelloController {
@FXML
private TextArea inputArea;
+ @FXML
+ private TextArea ruleArea;
+
+ @FXML
+ private TextArea outputArea;
+
+ @FXML
+ private TextField patternInput;
+
+ @FXML
+ private Button patternButton;
+
+ @FXML
+ private TextArea patternOutput;
+
+ private Map> dictionaryMap;
+
@FXML
private void initialize() {
- analyzeText();
+ analyzeText();
+ loadDictionary();
+ barChart.setStyle("-fx-font-size: 18px;");
+ inputArea.textProperty().addListener((observable, oldValue, newValue) -> {
+ analyzeText();
+ applyChanges();
+ });
+ ruleArea.textProperty().addListener((observable, oldValue, newValue) -> applyChanges());
+ patternButton.setOnAction(e -> matchPattern());
}
@FXML
@@ -26,18 +61,78 @@ public class HelloController {
String inputText = inputArea.getText();
Map frequencyMap = InputAnalyzer.analyzeFrequency(inputText);
List> barChartData = InputAnalyzer.getBarChartData(frequencyMap);
- updateBarChart(barChart, barChartData);
+ InputAnalyzer.updateBarChart(barChart, barChartData);
}
- private void updateBarChart(BarChart barChart, List> data) {
- barChart.getData().clear();
- XYChart.Series series = new XYChart.Series<>();
- series.setName("Letter Frequencies");
+ private void applyChanges() {
+ String rules = ruleArea.getText();
+ String changedText = CharacterSwitcher.applyRules(rules, inputArea.getText());
+ outputArea.setText(changedText);
+ }
- for (XYChart.Data datum : data) {
- series.getData().add(new XYChart.Data<>(datum.getXValue(), datum.getYValue()));
+ private void loadDictionary() {
+ dictionaryMap = new HashMap<>();
+
+ try (InputStream is = getClass().getResourceAsStream("/org/lumijiez/monoalpha/dictionary.txt")) {
+ assert is != null;
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
+
+ String line;
+ while ((line = reader.readLine()) != null) {
+ String[] parts = line.split(" ");
+ if (parts.length == 2) {
+ String pattern = parts[0];
+ String word = parts[1];
+ dictionaryMap.computeIfAbsent(pattern, k -> new ArrayList<>()).add(word);
+ }
+ }
+
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ patternOutput.setText("Error loading dictionary");
+ }
+ }
+
+ private void matchPattern() {
+ String inputWord = patternInput.getText().trim();
+ if (inputWord.isEmpty()) {
+ patternOutput.setText("Please enter a word.");
+ return;
}
- barChart.getData().add(series);
+ String inputPattern = generatePattern(inputWord);
+
+ List matchingWords = dictionaryMap.getOrDefault(inputPattern, new ArrayList<>());
+
+ if (matchingWords.isEmpty()) {
+ patternOutput.setText("No matching words found.");
+ } else {
+ patternOutput.setText(String.join("\n", matchingWords));
+ }
+ }
+
+ private String generatePattern(String word) {
+ StringBuilder pattern = new StringBuilder();
+ char nextLower = 'a';
+ char nextUpper = 'A';
+ Map charMap = new HashMap<>();
+
+ for (char c : word.toCharArray()) {
+ if (Character.isLowerCase(c)) {
+ if (!charMap.containsKey(c)) {
+ charMap.put(c, nextLower++);
+ }
+ pattern.append(charMap.get(c));
+ } else if (Character.isUpperCase(c)) {
+ if (!charMap.containsKey(c)) {
+ charMap.put(c, nextUpper++);
+ }
+ pattern.append(charMap.get(c));
+ } else {
+ pattern.append(c);
+ }
+ }
+ return pattern.toString();
}
}
\ No newline at end of file
diff --git a/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java b/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java
index 3a13f93..ea989c6 100644
--- a/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java
+++ b/src/main/java/org/lumijiez/monoalpha/MonoAlpha.java
@@ -1,17 +1,27 @@
package org.lumijiez.monoalpha;
+import atlantafx.base.theme.Dracula;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
+import javafx.scene.image.Image;
+import javafx.scene.layout.BackgroundImage;
+import javafx.scene.layout.BackgroundPosition;
+import javafx.scene.layout.BackgroundRepeat;
+import javafx.scene.layout.BackgroundSize;
import javafx.stage.Stage;
import java.io.IOException;
+import java.util.Objects;
-public class HelloApplication extends Application {
+public class MonoAlpha extends Application {
@Override
public void start(Stage stage) throws IOException {
- FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("monoalpha.fxml"));
+
+ Application.setUserAgentStylesheet(new Dracula().getUserAgentStylesheet());
+ FXMLLoader fxmlLoader = new FXMLLoader(MonoAlpha.class.getResource("monoalpha.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 1280, 720);
+
stage.setMinHeight(720);
stage.setMinWidth(1280);
stage.setTitle("MonoAlpha");
diff --git a/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java b/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java
index 3e56324..6b53ec9 100644
--- a/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java
+++ b/src/main/java/org/lumijiez/monoalpha/util/CharacterSwitcher.java
@@ -1,4 +1,4 @@
-package org.lumijiez.monoalpha;
+package org.lumijiez.monoalpha.util;
import java.util.HashMap;
import java.util.Map;
@@ -21,10 +21,7 @@ public class CharacterSwitcher {
StringBuilder result = new StringBuilder();
for (char c : text.toCharArray()) {
- char newChar = c;
- while (ruleMap.containsKey(newChar)) {
- newChar = ruleMap.get(newChar);
- }
+ char newChar = ruleMap.getOrDefault(c, c);
result.append(newChar);
}
diff --git a/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java b/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java
index 073f99f..efda703 100644
--- a/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java
+++ b/src/main/java/org/lumijiez/monoalpha/util/InputAnalyzer.java
@@ -1,4 +1,4 @@
-package org.lumijiez.monoalpha;
+package org.lumijiez.monoalpha.util;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.XYChart;
@@ -28,7 +28,7 @@ public class InputAnalyzer {
.collect(Collectors.toList());
}
- static void updateBarChart(BarChart barChart, List> data) {
+ public static void updateBarChart(BarChart barChart, List> data) {
barChart.getData().clear();
XYChart.Series series = new XYChart.Series<>();
diff --git a/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml b/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml
index 24cd355..3ab276d 100644
--- a/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml
+++ b/src/main/resources/org/lumijiez/monoalpha/monoalpha.fxml
@@ -1,16 +1,164 @@
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+