Advertisement
zinch

JavaFX RegExp Visualizer

Feb 24th, 2014
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.24 KB | None | 0 0
  1. import javafx.application.Application;
  2. import javafx.event.ActionEvent;
  3. import javafx.event.EventHandler;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.Button;
  6. import javafx.scene.control.Label;
  7. import javafx.scene.control.TextArea;
  8. import javafx.scene.control.TextField;
  9. import javafx.scene.layout.GridPane;
  10. import javafx.scene.web.HTMLEditor;
  11. import javafx.stage.Stage;
  12.  
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.regex.Matcher;
  16. import java.util.regex.Pattern;
  17. import java.util.regex.PatternSyntaxException;
  18.  
  19. public class RegexTestHarness extends Application {
  20.  
  21.     public static final int TEXT_WIDTH = 214;
  22.     private TextField regex;
  23.     private TextArea text;
  24.     private HTMLEditor result;
  25.  
  26.     public static void main(String[] args) {
  27.         launch(args);
  28.     }
  29.  
  30.     @Override
  31.     public void start(Stage stage) throws Exception {
  32.  
  33.         GridPane root = new GridPane();
  34.         root.setHgap(10);
  35.         root.setVgap(4);
  36.  
  37.         Label regexLbl = new Label("Regex");
  38.         regex = new TextField();
  39.         regex.setMinHeight(25);
  40.         regex.setMinWidth(TEXT_WIDTH);
  41.  
  42.         root.add(regexLbl, 0, 0);
  43.         root.add(regex, 1, 0);
  44.  
  45.         Label textLbl = new Label("Text");
  46.         text = new TextArea();
  47.         text.setMinHeight(50);
  48.         text.setPrefRowCount(10);
  49.         text.setMinWidth(TEXT_WIDTH);
  50.  
  51.         root.add(textLbl, 0, 1);
  52.         root.add(text, 1, 1);
  53.  
  54.         result = new HTMLEditor();
  55.  
  56.         root.add(result, 0, 2, 2, 1);
  57.  
  58.         Button match = new Button("Match");
  59.         match.setOnAction(new EventHandler<ActionEvent>() {
  60.             @Override
  61.             public void handle(ActionEvent actionEvent) {
  62.  
  63.                 matchRegExp();
  64.  
  65.             }
  66.         });
  67.  
  68.         root.add(match, 0, 3);
  69.  
  70.         Button dumpHtml = new Button("Dump html");
  71.         dumpHtml.setOnAction(new EventHandler<ActionEvent>() {
  72.             @Override
  73.             public void handle(ActionEvent actionEvent) {
  74.                 System.err.println(result.getHtmlText());
  75.             }
  76.         });
  77.  
  78.         root.add(dumpHtml, 1, 3);
  79.  
  80.         Scene scene = new Scene(root, 800, 600);
  81.         stage.setScene(scene);
  82.         stage.show();
  83.     }
  84.  
  85.     private void matchRegExp() {
  86.         Pattern pattern = null;
  87.         try {
  88.             pattern = Pattern.compile(regex.getText());
  89.  
  90.         } catch (PatternSyntaxException psex) {
  91.             result.setHtmlText(String.format(
  92.                     "<html><body><p>" +
  93.                             "<span style=\"color:Red;\">%s</span>" +
  94.                             "</p></body></html>",
  95.                     psex.getMessage()));
  96.             return;
  97.         }
  98.  
  99.         Matcher matcher = pattern.matcher(text.getText());
  100.  
  101.         boolean found = false;
  102.         StringBuilder sb = new StringBuilder();
  103.  
  104.         class Tuple {
  105.             final int start, end;
  106.  
  107.             Tuple(int start, int end) {
  108.                 this.start = start;
  109.                 this.end = end;
  110.             }
  111.  
  112.             @Override
  113.             public String toString() {
  114.                 return "Tuple{start=" + start + ", end=" + end + '}';
  115.             }
  116.         }
  117.  
  118.         List<Tuple> positions = new ArrayList<Tuple>();
  119.  
  120.         while (matcher.find()) {
  121.             positions.add(new Tuple(matcher.start(), matcher.end()));
  122.             found = true;
  123.         }
  124.         if (!found) {
  125.             sb.append(String.format("No match found.%n"));
  126.         } else {
  127.             System.out.println(positions);
  128.             int pos = 0;
  129.             for (int i = 0; i < positions.size(); i++) {
  130.  
  131.                 sb.append(text.getText().substring(pos, positions.get(i).start))
  132.                         .append("<span style=\"color:ForestGreen;font-size:20px\">")
  133.                         .append(text.getText().substring(positions.get(i).start, positions.get(i).end))
  134.                         .append("</span>");
  135.  
  136.                 pos = positions.get(i).end;
  137.             }
  138.  
  139.             if (pos > 0) {
  140.                 sb.append(text.getText().substring(pos));
  141.             }
  142.         }
  143.  
  144.         String html = String.format("" +
  145.                 "<html><body><p>%s</p></body></html>", sb.toString());
  146.  
  147.         result.setHtmlText(html);
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement