From 5265f0f08550d7e08d2a8bef505e46efca1ec471 Mon Sep 17 00:00:00 2001 From: 3010293 <3010293@stud.hs-mannheim.de> Date: Mon, 13 Jan 2025 16:09:39 +0100 Subject: [PATCH] deleting jacoco folder --- PR2Projekt/Hitori4x4_leicht.txt | 0 .../de.hs_mannheim.informatik.mvn/Entry.html | 1 - .../LogDemo.html | 1 - .../LogTest.html | 1 - .../LogTest.java.html | 40 - .../de.hs_mannheim.informatik.mvn/Main$1.html | 1 - .../de.hs_mannheim.informatik.mvn/Main.html | 1 - .../Main.java.html | 714 -------- .../PrintArray.html | 1 - .../PrintArray.java.html | 17 - .../de.hs_mannheim.informatik.mvn/hitori.html | 1 - .../hitori.java.html | 21 - .../de.hs_mannheim.informatik.mvn/index.html | 1 - .../index.source.html | 1 - PR2Projekt/site/jacoco/index.html | 1 - .../site/jacoco/jacoco-resources/branchfc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchnc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchpc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/bundle.gif | Bin 709 -> 0 bytes .../site/jacoco/jacoco-resources/class.gif | Bin 586 -> 0 bytes .../site/jacoco/jacoco-resources/down.gif | Bin 67 -> 0 bytes .../site/jacoco/jacoco-resources/greenbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/group.gif | Bin 351 -> 0 bytes .../site/jacoco/jacoco-resources/method.gif | Bin 193 -> 0 bytes .../site/jacoco/jacoco-resources/package.gif | Bin 227 -> 0 bytes .../site/jacoco/jacoco-resources/prettify.css | 13 - .../site/jacoco/jacoco-resources/prettify.js | 1510 ----------------- .../site/jacoco/jacoco-resources/redbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/report.css | 243 --- .../site/jacoco/jacoco-resources/report.gif | Bin 363 -> 0 bytes .../site/jacoco/jacoco-resources/session.gif | Bin 213 -> 0 bytes .../site/jacoco/jacoco-resources/sort.gif | Bin 58 -> 0 bytes .../site/jacoco/jacoco-resources/sort.js | 148 -- .../site/jacoco/jacoco-resources/source.gif | Bin 354 -> 0 bytes .../site/jacoco/jacoco-resources/up.gif | Bin 67 -> 0 bytes PR2Projekt/site/jacoco/jacoco-sessions.html | 1 - PR2Projekt/site/jacoco/jacoco.csv | 8 - PR2Projekt/site/jacoco/jacoco.xml | 1 - 38 files changed, 2726 deletions(-) create mode 100644 PR2Projekt/Hitori4x4_leicht.txt delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Entry.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/LogDemo.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/LogTest.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/LogTest.java.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main$1.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main.java.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/PrintArray.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/PrintArray.java.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/hitori.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/hitori.java.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/index.html delete mode 100644 PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/index.source.html delete mode 100644 PR2Projekt/site/jacoco/index.html delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/branchfc.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/branchnc.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/branchpc.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/bundle.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/class.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/down.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/greenbar.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/group.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/method.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/package.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/prettify.css delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/prettify.js delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/redbar.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/report.css delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/report.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/session.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/sort.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/sort.js delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/source.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-resources/up.gif delete mode 100644 PR2Projekt/site/jacoco/jacoco-sessions.html delete mode 100644 PR2Projekt/site/jacoco/jacoco.csv delete mode 100644 PR2Projekt/site/jacoco/jacoco.xml diff --git a/PR2Projekt/Hitori4x4_leicht.txt b/PR2Projekt/Hitori4x4_leicht.txt new file mode 100644 index 0000000..e69de29 diff --git a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Entry.html b/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Entry.html deleted file mode 100644 index cc8faaa..0000000 --- a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Entry.html +++ /dev/null @@ -1 +0,0 @@ -
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 9 of 9 | 0% | 0 of 0 | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| Entry(LocalTime, String) | 0% | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 25 of 25 | 0% | 0 of 0 | n/a | 3 | 3 | 9 | 9 | 3 | 3 |
| main(String[]) | 0% | n/a | 1 | 1 | 7 | 7 | 1 | 1 | ||
| static {...} | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 | ||
| LogDemo() | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 90 of 90 | 0% | 2 of 2 | 0% | 4 | 4 | 24 | 24 | 3 | 3 |
| newRecord(String, String, String) | 0% | 0% | 2 | 2 | 22 | 22 | 1 | 1 | ||
| static {...} | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 | ||
| LogTest() | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
package de.hs_mannheim.informatik.mvn; -import java.io.BufferedWriter; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Scanner; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class LogTest { - private static final Logger logger = LogManager.getLogger(LogTest.class); - - public static void newRecord(String path, String username, String time) throws FileNotFoundException { - String timePart = time.substring("Zeit: ".length()).trim(); - String[] parts = path.split("/"); - String filename = parts[parts.length - 1]; - int dotIndex = filename.lastIndexOf("."); - String result = filename.substring(0, dotIndex); - String ordner = "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/"; - String filetype = ".txt"; - String filepath = ordner + result + filetype; - System.out.println("A: " + filepath); - Scanner sc = new Scanner(filepath); - while (sc.hasNextLine()) { - sc.nextLine(); - } - sc.close(); - - try (BufferedWriter writer = new BufferedWriter(new FileWriter(filepath, true))) { - String eintrag = timePart + " " + username; - logger.info("Neuer Eintrag: {}", eintrag); - - writer.write(eintrag); - writer.newLine(); - } catch (IOException e) { - logger.error("Fehler beim Schreiben in die Datei: " + filepath, e); - } - } -} -\ No newline at end of file diff --git a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main$1.html b/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main$1.html deleted file mode 100644 index af4bbab..0000000 --- a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/Main$1.html +++ /dev/null @@ -1 +0,0 @@ -
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 51 of 51 | 0% | 0 of 0 | n/a | 3 | 3 | 11 | 11 | 3 | 3 |
| run() | 0% | n/a | 1 | 1 | 6 | 6 | 1 | 1 | ||
| lambda$run$0(JLabel, String) | 0% | n/a | 1 | 1 | 4 | 4 | 1 | 1 | ||
| {...} | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
package de.hs_mannheim.informatik.mvn;
-
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Color;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Paths;
-import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.EmptyStackException;
-import java.util.Scanner;
-import java.util.Stack;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-public class Main extends JFrame implements ActionListener {
-
- private static String[] filepath = {"", ""};
- private static CardLayout cl = new CardLayout();
- private static JPanel main = new JPanel(cl);
- private static Timer timer = new Timer();
- private static long startTime;
- private static long elapsedSeconds;
-
- public static void main(String[] args) throws FileNotFoundException {
- new Main();
- }
-
- public Main(){
- JPanel menuPanel = new JPanel(new BorderLayout());
- JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10));
- String[] buttons = {
- "4x4 - leicht",
- "5x5 - leicht",
- "8x8 - leicht",
- "8x8 - medium",
- "10x10 - medium",
- "15x15 - medium"
- };
- for(int i=0;i<buttons.length;i++){
- JButton b0 = new JButton(buttons[i]);
- buttonPanel.add(b0);
- int[] count = {i};
- String[] num = buttons[i].split("x");
- b0.addActionListener(e -> {
- int j = count[0];
- String currentDirectory = Paths.get("").toAbsolutePath().toString();
- System.out.println("Current Working Directory: " + currentDirectory);
- String[] paths = {
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori4x4_leicht.csv",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori5x5leicht.csv",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori8x8leicht.csv",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori8x8medium.csv",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori10x10medium.csv",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori15x15_medium.csv"
- };
-
- System.out.println("Current Working Directory: " + Paths.get("").toAbsolutePath());
-
- for (String path : paths) {
- File file = new File(path);
- if (file.exists()) {
- System.out.println("File found: " + file.getAbsolutePath());
- } else {
- System.out.println("File not found: " + file.getAbsolutePath());
- }
- }
-
-
- filepath[0] = paths[j];
- filepath[1] = num[0];
- try{
- ablauf(filepath);
- } catch (FileNotFoundException s){
- System.out.println("Fehler: " + s.getMessage());
- }
- });
- }
- JButton b = new JButton("Highscores");
- b.addActionListener(e -> {
- highscoreScreen();
- });
- buttonPanel.add(b);
- menuPanel.add(buttonPanel, BorderLayout.CENTER);
- JLabel text0 = new JLabel("Wählen Sie ein Level aus!");
- menuPanel.add(text0, BorderLayout.NORTH);
- //add(menuPanel);
- setVisible(true);
- setSize(600, 600);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- add(main);
- main.add(menuPanel, "HAUPT");
- cl.show(main, "HAUPT");
- }
-
- public static void ablauf(String[] filepath) throws FileNotFoundException{
- Stack<String> madeMoves = new Stack<>();
- String[][] data = getData(filepath[0], Integer.parseInt(filepath[1]));
- String[][] colors = makeColorArray(data.length);
- JButton[][] buttons = makeButtonArray(data);
- paintGame(filepath, buttons, colors, madeMoves, data);
- }
-
- private static void highscoreScreen(){
- JPanel highscorePanel = new JPanel(new BorderLayout());
- JPanel buttonPanel = new JPanel(new GridLayout(7,1,10,10));
- String[] buttons = {
- "Highscore 4x4 - leicht",
- "Highscore 5x5 - leicht",
- "Highscore 8x8 - leicht",
- "Highscore 8x8 - medium",
- "Highscore 10x10 - medium",
- "Highscore 15x15 - medium"
- };
- for(int i=0; i<buttons.length;i++){
- JButton b0 = new JButton(buttons[i]);
- buttonPanel.add(b0);
- int[] count = {i};
- b0.addActionListener(e -> {
- int j = count[0];
- String[] paths = {
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori4x4_leicht.txt",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori5x5leicht.txt",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori8x8leicht.txt",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori8x8medium.txt",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori10x10medium.txt",
- "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori15x15_medium.txt"
- };
- try {
- showHighscores(paths[j]);
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- });
- }
- JButton b = new JButton("Zurück");
- b.addActionListener(e -> {
- cl.show(main, "HAUPT");
- });
- buttonPanel.add(b);
- highscorePanel.setVisible(true);
- highscorePanel.setSize(600,600);
- highscorePanel.add(buttonPanel, BorderLayout.CENTER);
- JLabel text0 = new JLabel("Level für Highscore Liste auswählen!");
- highscorePanel.add(text0, BorderLayout.NORTH);
- main.add(highscorePanel, "HIGHSCORES");
- cl.show(main, "HIGHSCORES");
- }
-
- private static void sortByTime(String path) throws FileNotFoundException, IOException{
- File file = new File(path);
- ArrayList<Entry> entries = new ArrayList<>();
-
- try (BufferedReader br = new BufferedReader(new FileReader(file))) {
- String line;
- while ((line = br.readLine()) != null) {
- String[] parts = line.split(" ", 2);
- String timeStr = parts[0];
- String name = parts.length > 1 ? parts[1] : "";
-
- String[] timeParts = timeStr.split(":");
- int hour = Integer.parseInt(timeParts[0]);
- int minute = Integer.parseInt(timeParts[1]);
- LocalTime time = LocalTime.of(hour, minute);
-
- entries.add(new Entry(time, name));
- }
- }
-
- entries.sort(Comparator.comparing(e -> e.time));
-
- try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
- for (Entry e : entries) {
- String formattedTime = String.format("%02d:%02d", e.time.getHour(), e.time.getMinute());
- bw.write(formattedTime + " " + e.name);
- bw.newLine();
- }
- }
- }
-
- private static void showHighscores(String path) throws FileNotFoundException, IOException{
- sortByTime(path);
- JPanel mainPanel = new JPanel(new BorderLayout());
- File file = new File(path);
- int i = 0;
- try (Scanner scanner = new Scanner(file)) {
- while (scanner.hasNextLine()) {
- scanner.nextLine();
- i++;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- JPanel highscorePanel = new JPanel(new GridLayout(i,1,10,10));
- if(i>0){
- ArrayList<String> lines = readFromFile(path);
- for(String s: lines){
- JLabel text = new JLabel(s);
- highscorePanel.add(text);
- }
- JButton b = new JButton("Zurück");
- b.addActionListener(e -> {
- cl.show(main, "HIGHSCORES");
- highscoreScreen();
- });
- mainPanel.add(b, BorderLayout.SOUTH);
- } else {
- JLabel text = new JLabel("Noch kein Highscore eingetragen.");
- highscorePanel.add(text);
- JButton b = new JButton("Zurück");
- b.addActionListener(e -> {
- cl.show(main, "HIGHSCORES");
- highscoreScreen();
- });
- mainPanel.add(b, BorderLayout.SOUTH);
- }
- mainPanel.add(highscorePanel, BorderLayout.CENTER);
- mainPanel.setVisible(true);
- mainPanel.setSize(600,600);
- main.add(mainPanel, "HIGHSCORES");
- cl.show(main, "HIGHSCORES");
- }
-
- private static ArrayList<String> readFromFile(String path){
- ArrayList<String> lines = new ArrayList<>();
- try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
- String line;
- while ((line = reader.readLine()) != null) {
- lines.add(line);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return lines;
- }
-
- private static String[][] getData(String filepath, int rows) throws FileNotFoundException{
- String filepath0 = filepath;
- Scanner sc = new Scanner(new File(filepath0));
- String[][] data = new String[rows][rows];
- int rowInt = 0;
- while (sc.hasNextLine() && rowInt < rows) {
- String line = sc.nextLine();
- data[rowInt] = line.split(",");
- rowInt++;
- }
- sc.close();
- return data;
- }
-
- public static String[][] makeColorArray(int size){
- String[][] colors = new String[size][size];
- for(int i=0;i<size;i++){
- for(int j=0;j<size;j++){
- colors[i][j] = "W";
- }
- }
- return colors;
- }
-
- private static JButton[][] makeButtonArray(String[][] data){
- JButton[][] buttons = new JButton[data.length][data.length];
- for(int i=0;i<data.length;i++){
- for(int j=0;j<data.length;j++){
- String number = data[i][j];
- JButton b0 = new JButton(number);
- buttons[i][j] = b0;
- }
- }
- return buttons;
- }
-
- public static void paintGame(String[] filepath, JButton[][] buttons, String[][] colors, Stack<String> madeMoves, String[][] data) throws FileNotFoundException{
- elapsedSeconds = 0;
- System.out.println("BB: " + filepath[0]);
- System.out.println("BB: " + filepath[1]);
- int num = buttons.length;
- JPanel gameGrid = new JPanel(new GridLayout(num,num,0,0));
- for(int i=0;i<num;i++){
- for(int j=0;j<num;j++){
- JButton b = buttons[i][j];
- b.setOpaque(true);
- b.setContentAreaFilled(true);
- b.setBorderPainted(false);
- b.setFocusPainted(false);
- b.setBackground(Color.WHITE);
- gameGrid.add(b);
- String[] pos = getCords(i,j);
- b.addActionListener(e -> {paintButton(b, pos, colors , madeMoves);});
- }
- }
- JPanel mainPanel = new JPanel(new BorderLayout());
- mainPanel.add(gameGrid, BorderLayout.CENTER);
- JPanel buttonGrid = new JPanel(new GridLayout(1,4,10,10));
- JButton b0 = new JButton("Aufgeben");
- b0.addActionListener(e -> {
- filepath[0] = "";
- filepath[1] = "";
- cl.show(main, "HAUPT");
- });
- JButton b1 = new JButton("Zurück");
- b1.addActionListener(e -> {backOneStep(madeMoves, buttons, colors, gameGrid);});
- JButton b2 = new JButton("Zurücksetzen");
- b2.addActionListener(e -> {try {
- totalResetButton(buttons, colors, madeMoves, data);
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }});
- JButton b3 = new JButton("Abgeben");
- String path = filepath[0];
-
- boolean[] levelFinished = {false};
- JPanel topGrid = new JPanel(new GridLayout(1,2,10,10));
- mainPanel.add(topGrid, BorderLayout.NORTH);
- JLabel timeLabel = new JLabel("Zeit: 00:00");
- topGrid.add(timeLabel);
- topGrid.revalidate();
- topGrid.repaint();
- boolean isOkay = abgabeMöglich(path, data, colors);
- levelFinished[0] = isOkay;
- Timer timer = new Timer();
- startTimer();
- timer.scheduleAtFixedRate(new TimerTask() {
- @Override
- public void run() {
- elapsedSeconds = (System.currentTimeMillis() - startTime) / 1000;
- long minutes = (elapsedSeconds % 3600) / 60;
- long seconds = elapsedSeconds % 60;
- String newTime = String.format("Zeit: %02d:%02d", minutes, seconds);
-
- SwingUtilities.invokeLater(() -> {
- timeLabel.setText(newTime);
- timeLabel.revalidate();
- timeLabel.repaint();
- });
- }
- }, 0, 1000);
-
- JLabel luecke = new JLabel("");
- topGrid.add(luecke);
-
- b3.addActionListener(e -> {
- try {
- levelFinished[0] = abgabeMöglich(path, data, colors);
- System.out.println("0000: " + levelFinished[0]);
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- if (levelFinished[0] == true) {
- System.out.println("1111: " + levelFinished[0]);
- String endtime = stopTimer();
- timer.cancel();
- try {
- finish(endtime, filepath, path, data, colors);
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- } else {
- System.out.println("2222: " + levelFinished[0]);
- luecke.setText("Abgabe nicht richtig!");
- mainPanel.revalidate();
- mainPanel.repaint();
- }
- });
-
- buttonGrid.add(b0);buttonGrid.add(b1);buttonGrid.add(b2);buttonGrid.add(b3);
- mainPanel.add(buttonGrid, BorderLayout.SOUTH);
- mainPanel.setVisible(true);
- main.add(mainPanel, "GAME");
- cl.show(main, "GAME");
- }
-
- private static String startTimer() {
- startTime = System.currentTimeMillis();
- elapsedSeconds = 0;
- return "Zeit: 00:00";
- }
-
- private static String stopTimer() {
- timer.cancel();
- long minutes = (elapsedSeconds % 3600) / 60;
- long seconds = elapsedSeconds % 60;
- String endtime = String.format("Zeit: %02d:%02d", minutes, seconds);
- elapsedSeconds = 0; // Reset so the next start begins at zero
- return endtime;
- }
-
- private static boolean abgabeMöglich(String path, String[][] data, String[][] colors) throws FileNotFoundException{
- boolean abgabeMöglich = false;
- String[][] result = getResult(data, colors);
- System.out.println("RESULT");
- printWholeCSV(path);
- ArrayList<String> filteredData = getSolution(path, result);
- String[][] ergebnis1 = getErgebnisArray(result, filteredData);
- System.out.println("ERGEBNIS");
- int count = 0;
- for(int i=0;i<result.length;i++){
- for(int j=0;j<result.length;j++){
- if(result[i][j].equals(ergebnis1[i][j])){
- } else {
- count--;
- }
- }
- }
- if(count <0){
- abgabeMöglich = false;
- } else {
- abgabeMöglich = true;
- }
- return abgabeMöglich;
- }
-
- public static void printWholeCSV(String path) {
- System.out.println("NOW PRINTING ALL");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- String line;
- while ((line = br.readLine()) != null) {
- System.out.println(line);
- }
- } catch (IOException e) {
- System.out.println("An error occurred while reading the file: " + e.getMessage());
- }
- System.out.println("DONE PRINTING ALL");
- }
-
- private static void paintButton(JButton b, String[] pos, String[][] colors, Stack<String> madeMoves){
- int i = Integer.parseInt(pos[0]);
- int j = Integer.parseInt(pos[1]);
- String col = colors[Integer.parseInt(pos[0])][Integer.parseInt(pos[1])];
- if(col.endsWith("W")){
- b.setOpaque(true);
- b.setForeground(Color.BLACK);
- b.setContentAreaFilled(true);
- b.setBorderPainted(false);
- b.setFocusPainted(false);
- b.setBackground(Color.lightGray);
- colors[i][j] += "G";
- String logEntrance = i+"."+j+"."+"G";
- madeMoves.push(logEntrance);
- }
- if(col.endsWith("G")){
- b.setOpaque(true);
- b.setForeground(Color.WHITE);
- b.setContentAreaFilled(true);
- b.setBorderPainted(false);
- b.setFocusPainted(false);
- b.setBackground(Color.BLACK);
- colors[i][j] += "B";
- String logEntrance = i+"."+j+"."+"B";
- madeMoves.push(logEntrance);
- }
- if(col.endsWith("B")){
- b.setOpaque(true);
- b.setForeground(Color.BLACK);
- b.setContentAreaFilled(true);
- b.setBorderPainted(false);
- b.setFocusPainted(false);
- b.setBackground(Color.WHITE);
- colors[i][j] += "W";
- String logEntrance = i+"."+j+"."+"W";
- madeMoves.push(logEntrance);
- }
- }
-
- private static String[] getCords(int i, int j){
- String yKoordinate = String.valueOf(i);
- String xKoordinate = String.valueOf(j);
- String[] pos = {yKoordinate, xKoordinate};
- return pos;
- }
-
- public static void backOneStep(Stack<String> movesMade, JButton[][] buttons, String[][] colors, JPanel grid){
- try {
- String move = movesMade.pop();
- String[] line = move.split("\\.");
- String y = line[0];
- String x = line[1];
- String color = line[2];
- if(color.equals("W")){
- int i = Integer.parseInt(y);
- int j = Integer.parseInt(x);
- JButton b0 = buttons[i][j];
- b0.setOpaque(true);
- b0.setForeground(Color.WHITE);
- b0.setContentAreaFilled(true);
- b0.setBorderPainted(false);
- b0.setFocusPainted(false);
- b0.setBackground(Color.BLACK);
- buttons[i][j] = b0;
- String str = colors[i][j];
- String str0 = str.substring(0, str.length() - 1);
- colors[i][j] = str0;
- grid.repaint();
- gridUpdate(grid, buttons);
- }else if(color.equals("G")){
- int i = Integer.parseInt(y);
- int j = Integer.parseInt(x);
- JButton b0 = buttons[i][j];
- b0.setOpaque(true);
- b0.setForeground(Color.BLACK);
- b0.setContentAreaFilled(true);
- b0.setBorderPainted(false);
- b0.setFocusPainted(false);
- b0.setBackground(Color.WHITE);
- buttons[i][j] = b0;
- String str = colors[i][j];
- String str0 = str.substring(0, str.length() - 1);
- colors[i][j] = str0;
- gridUpdate(grid, buttons);
- } else if(color.equals("B")){
- int i = Integer.parseInt(y);
- int j = Integer.parseInt(x);
- JButton b0 = buttons[i][j];
- b0.setOpaque(true);
- b0.setForeground(Color.BLACK);
- b0.setContentAreaFilled(true);
- b0.setBorderPainted(false);
- b0.setFocusPainted(false);
- b0.setBackground(Color.lightGray);
- buttons[i][j] = b0;
- String str = colors[i][j];
- String str0 = str.substring(0, str.length() - 1);
- colors[i][j] = str0;
- gridUpdate(grid, buttons);
- }
- } catch(EmptyStackException e) {}
- }
-
- private static void gridUpdate(JPanel grid, JButton[][] buttons){
- grid.removeAll();
- grid.repaint();
- for(int i = 0; i<buttons.length; i++){
- for(int j = 0; j<buttons.length;j++){
- JButton b0 = buttons[i][j];
- grid.add(b0);
- grid.repaint();
- }
- }
- }
-
- private static void totalResetButton(JButton[][] buttons, String[][] colors,Stack<String> madeMoves,String[][] data) throws FileNotFoundException{
- madeMoves.clear();
- for(int i = 0; i<data.length;i++){
- for(int j = 0; j<data.length;j++){
- colors[i][j] = "W";
- buttons[i][j] = null;
- }
- JButton[][] buttons0 = makeButtonArray(data);
- paintGame(filepath, buttons0, colors, madeMoves, data);
- }
- }
-
- private static String[][] getResult(String[][] data, String[][] colors){
- String[][] result = new String[data.length][data.length];
- for(int i=0;i<data.length;i++){
- for(int j=0;j<data.length;j++){
- String farben = colors[i][j];
- String lastColor = String.valueOf(farben.charAt(farben.length() - 1));
- if(lastColor.equals("G")){
- lastColor = "W";
- }
- result[i][j] = lastColor;
- }
- }
- System.out.println("AAAAAAAA");
- return result;
- }
-
- private static ArrayList<String> getSolution(String path, String[][] result) throws FileNotFoundException {
- Scanner sc = new Scanner(new File(path));
- ArrayList<String> filteredData = new ArrayList<>();
- boolean isUnderComment = false;
- while (sc.hasNextLine()) {
- String line = sc.nextLine().trim();
- if (line.equals("//Lösung (schwarze Felder)")) {
- isUnderComment = true;
- continue;
- }
- if (isUnderComment && !line.isEmpty()) {
- String[] lineArray = line.split(",");
- int num1 = Integer.parseInt(lineArray[0]);
- int num2 = Integer.parseInt(lineArray[1]);
- String newNum1 = String.valueOf(num1-1);
- String newNum2 = String.valueOf(num2-1);
- String newLine = newNum1+","+newNum2;
- filteredData.add(newLine);
- }
- }
- sc.close();
- System.out.println("BBBBBB");
- System.out.println(filteredData);
- return filteredData;
- }
-
- private static String[][] getErgebnisArray(String[][] result, ArrayList<String> filteredData){
- String[][] ergebnis = new String[result.length][result.length];
- for(int i=0;i<result.length;i++){
- for(int j=0;j<result.length;j++){
- ergebnis[i][j] = "W";
- }
- }
- for (String index : filteredData) {
- String[] parts = index.split(",");
- int row = Integer.parseInt(parts[0].trim());
- int col = Integer.parseInt(parts[1].trim());
- if (row >= 0 && row < ergebnis.length && col >= 0 && col < ergebnis[row].length) {
- ergebnis[row][col] = "B";
- }
- }
- System.out.println("ERGEBNISMETHODE");
- return ergebnis;
- }
-
- public static void finish(String endtime, String[] filepath, String path, String[][] data, String[][] colors) throws FileNotFoundException{
- JPanel mainPanel = new JPanel(new BorderLayout());
- JLabel text = new JLabel("Geben Sie unten Ihren Namen an um sich in der Highscore Liste einzutragen.");
- mainPanel.add(text, BorderLayout.NORTH);
- JTextField field = new JTextField(20);
- mainPanel.add(field, BorderLayout.CENTER);
- JButton b = new JButton("In der Highscore Liste eintragen");
- mainPanel.add(b, BorderLayout.SOUTH);
- mainPanel.setVisible(true);
- mainPanel.setSize(600,600);
- b.addActionListener(e -> {
- String username = field.getText();
- try {
- LogTest.newRecord(path, username, endtime);
- filepath[0] = "";
- filepath[1] = "";
- cl.show(main, "HAUPT");
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- });
- main.add(mainPanel, "HIGHSCORENEU");
- cl.show(main, "HIGHSCORENEU");
- }
-
- // private static void newRecord(String path, String username, String time) throws FileNotFoundException{
- // String timePart = time.substring("Zeit: ".length()).trim();
- // String[] parts = path.split("/");
- // String filename = parts[parts.length - 1];
- // int dotIndex = filename.lastIndexOf(".");
- // String result = filename.substring(0, dotIndex);
- // String ordner = "Hitori_Highscores/";
- // String filetype = ".txt";
- // String filepath = ordner+result+filetype;
- // Scanner sc = new Scanner(filepath);
- // while (sc.hasNextLine()) {
- // sc.nextLine();
- // }
- // sc.close();
- // try (BufferedWriter writer = new BufferedWriter(new FileWriter(filepath, true))) {
- // String eintrag = timePart + " " + username;
- // System.out.println(eintrag);
- // writer.write(timePart + " " + username);
- // writer.newLine();
- // } catch (IOException e) {
- // e.printStackTrace();
- // }
- // }
-
- @Override
- public void actionPerformed(ActionEvent e){
- }
-}
-
-class Entry {
- LocalTime time;
- String name;
-
- Entry(LocalTime time, String name) {
- this.time = time;
- this.name = name;
- }
-}
-
-
-class LogDemo{
- private static final Logger log = Logger.getLogger(LogDemo.class.getName());
-
- public static void main(String[] args){
- log.info("LOS GEHTS!");
-
- try {
- ((Object) null).toString();
- } catch (Exception e) {
- log.log(Level.SEVERE, "oh oh", e);
- }
-
- log.info("GING GUT.");
- }
-}
-
\ No newline at end of file
diff --git a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/PrintArray.html b/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/PrintArray.html
deleted file mode 100644
index 32a81ff..0000000
--- a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/PrintArray.html
+++ /dev/null
@@ -1 +0,0 @@
-| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 16 of 16 | 0% | 0 of 0 | n/a | 4 | 4 | 7 | 7 | 4 | 4 |
| logExample() | 0% | n/a | 1 | 1 | 3 | 3 | 1 | 1 | ||
| static {...} | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 | ||
| PrintArray() | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 | ||
| main(String[]) | 0% | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
package de.hs_mannheim.informatik.mvn; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class PrintArray { - private static final Logger logger = LogManager.getLogger(PrintArray.class); - - public static void logExample() { - logger.info("This is an informational message."); - logger.error("This is an error message."); - } - - public static void main(String[] args) { - logExample(); // Test logging - } -} -\ No newline at end of file diff --git a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/hitori.html b/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/hitori.html deleted file mode 100644 index e40c294..0000000 --- a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/hitori.html +++ /dev/null @@ -1 +0,0 @@ -
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 29 of 29 | 0% | 0 of 0 | n/a | 4 | 4 | 7 | 7 | 4 | 4 |
| main(String[]) | 0% | n/a | 1 | 1 | 3 | 3 | 1 | 1 | ||
| add(int, int) | 0% | n/a | 1 | 1 | 2 | 2 | 1 | 1 | ||
| hitori() | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 | ||
| static {...} | 0% | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
package de.hs_mannheim.informatik.mvn; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -public class hitori { - private static final Logger LOG = LogManager.getLogger(); - - public static void main(String[] args) { - LOG.info("Hallo Maven, Gitea & Jenkins!?"); - - System.out.println(new hitori().add(3, 4)); - } - - public int add(int a, int b) { - LOG.info("a = {}, b = {}", a, b); - - return a + b; - } -} -\ No newline at end of file diff --git a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/index.html b/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/index.html deleted file mode 100644 index fe20c0c..0000000 --- a/PR2Projekt/site/jacoco/de.hs_mannheim.informatik.mvn/index.html +++ /dev/null @@ -1 +0,0 @@ -
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods | Missed | Classes |
| Total | 2,101 of 2,284 | 8% | 94 of 100 | 6% | 101 | 107 | 487 | 519 | 54 | 57 | 6 | 7 |
| Main | 8% | 6% | 82 | 88 | 426 | 458 | 36 | 39 | 0 | 1 | ||
| LogTest | 0% | 0% | 4 | 4 | 24 | 24 | 3 | 3 | 1 | 1 | ||
| Main.new TimerTask() {...} | 0% | n/a | 3 | 3 | 11 | 11 | 3 | 3 | 1 | 1 | ||
| hitori | 0% | n/a | 4 | 4 | 7 | 7 | 4 | 4 | 1 | 1 | ||
| LogDemo | 0% | n/a | 3 | 3 | 9 | 9 | 3 | 3 | 1 | 1 | ||
| PrintArray | 0% | n/a | 4 | 4 | 7 | 7 | 4 | 4 | 1 | 1 | ||
| Entry | 0% | n/a | 1 | 1 | 4 | 4 | 1 | 1 | 1 | 1 |
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods | Missed | Classes |
| Total | 2,101 of 2,284 | 8% | 94 of 100 | 6% | 101 | 107 | 487 | 519 | 54 | 57 | 6 | 7 |
| Main.java | 8% | 6% | 89 | 95 | 449 | 481 | 43 | 46 | 3 | 4 | ||
| LogTest.java | 0% | 0% | 4 | 4 | 24 | 24 | 3 | 3 | 1 | 1 | ||
| hitori.java | 0% | n/a | 4 | 4 | 7 | 7 | 4 | 4 | 1 | 1 | ||
| PrintArray.java | 0% | n/a | 4 | 4 | 7 | 7 | 4 | 4 | 1 | 1 |
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods | Missed | Classes |
| Total | 2,101 of 2,284 | 8% | 94 of 100 | 6% | 101 | 107 | 487 | 519 | 54 | 57 | 6 | 7 |
| de.hs_mannheim.informatik.mvn | 8% | 6% | 101 | 107 | 487 | 519 | 54 | 57 | 6 | 7 |
- * - * For a fairly comprehensive set of languages see the - * README - * file that came with this source. At a minimum, the lexer should work on a - * number of languages including C and friends, Java, Python, Bash, SQL, HTML, - * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk - * and a subset of Perl, but, because of commenting conventions, doesn't work on - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. - *
- * Usage:
} and {@code } tags in your source with
- * {@code class=prettyprint.}
- * You can also use the (html deprecated) {@code } tag, but the pretty
- * printer needs to do more substantial DOM manipulations to support that, so
- * some css styles may not be preserved.
- * } or {@code } element to specify the
- * language, as in {@code }. Any class that
- * starts with "lang-" followed by a file extension, specifies the file type.
- * See the "lang-*.js" files in this directory for code that implements
- * per-language file handlers.
- *
- * Change log:
- * cbeust, 2006/08/22
- *
- * Java annotations (start with "@") are now captured as literals ("lit")
- *
- * @requires console
- */
-
-// JSLint declarations
-/*global console, document, navigator, setTimeout, window */
-
-/**
- * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
- * UI events.
- * If set to {@code false}, {@code prettyPrint()} is synchronous.
- */
-window['PR_SHOULD_USE_CONTINUATION'] = true;
-
-/** the number of characters between tab columns */
-window['PR_TAB_WIDTH'] = 8;
-
-/** Walks the DOM returning a properly escaped version of innerHTML.
- * @param {Node} node
- * @param {Array.} out output buffer that receives chunks of HTML.
- */
-window['PR_normalizedHtml']
-
-/** Contains functions for creating and registering new language handlers.
- * @type {Object}
- */
- = window['PR']
-
-/** Pretty print a chunk of code.
- *
- * @param {string} sourceCodeHtml code as html
- * @return {string} code as html, but prettier
- */
- = window['prettyPrintOne']
-/** Find all the {@code } and {@code } tags in the DOM with
- * {@code class=prettyprint} and prettify them.
- * @param {Function?} opt_whenDone if specified, called when the last entry
- * has been finished.
- */
- = window['prettyPrint'] = void 0;
-
-/** browser detection. @extern @returns false if not IE, otherwise the major version. */
-window['_pr_isIE6'] = function () {
- var ieVersion = navigator && navigator.userAgent &&
- navigator.userAgent.match(/\bMSIE ([678])\./);
- ieVersion = ieVersion ? +ieVersion[1] : false;
- window['_pr_isIE6'] = function () { return ieVersion; };
- return ieVersion;
-};
-
-
-(function () {
- // Keyword lists for various languages.
- var FLOW_CONTROL_KEYWORDS =
- "break continue do else for if return while ";
- var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
- "double enum extern float goto int long register short signed sizeof " +
- "static struct switch typedef union unsigned void volatile ";
- var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
- "new operator private protected public this throw true try typeof ";
- var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
- "concept concept_map const_cast constexpr decltype " +
- "dynamic_cast explicit export friend inline late_check " +
- "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
- "template typeid typename using virtual wchar_t where ";
- var JAVA_KEYWORDS = COMMON_KEYWORDS +
- "abstract boolean byte extends final finally implements import " +
- "instanceof null native package strictfp super synchronized throws " +
- "transient ";
- var CSHARP_KEYWORDS = JAVA_KEYWORDS +
- "as base by checked decimal delegate descending event " +
- "fixed foreach from group implicit in interface internal into is lock " +
- "object out override orderby params partial readonly ref sbyte sealed " +
- "stackalloc string select uint ulong unchecked unsafe ushort var ";
- var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
- "debugger eval export function get null set undefined var with " +
- "Infinity NaN ";
- var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
- "goto if import last local my next no our print package redo require " +
- "sub undef unless until use wantarray while BEGIN END ";
- var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
- "elif except exec finally from global import in is lambda " +
- "nonlocal not or pass print raise try with yield " +
- "False True None ";
- var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
- " defined elsif end ensure false in module next nil not or redo rescue " +
- "retry self super then true undef unless until when yield BEGIN END ";
- var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
- "function in local set then until ";
- var ALL_KEYWORDS = (
- CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
- PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
-
- // token style names. correspond to css classes
- /** token style for a string literal */
- var PR_STRING = 'str';
- /** token style for a keyword */
- var PR_KEYWORD = 'kwd';
- /** token style for a comment */
- var PR_COMMENT = 'com';
- /** token style for a type */
- var PR_TYPE = 'typ';
- /** token style for a literal value. e.g. 1, null, true. */
- var PR_LITERAL = 'lit';
- /** token style for a punctuation string. */
- var PR_PUNCTUATION = 'pun';
- /** token style for a punctuation string. */
- var PR_PLAIN = 'pln';
-
- /** token style for an sgml tag. */
- var PR_TAG = 'tag';
- /** token style for a markup declaration such as a DOCTYPE. */
- var PR_DECLARATION = 'dec';
- /** token style for embedded source. */
- var PR_SOURCE = 'src';
- /** token style for an sgml attribute name. */
- var PR_ATTRIB_NAME = 'atn';
- /** token style for an sgml attribute value. */
- var PR_ATTRIB_VALUE = 'atv';
-
- /**
- * A class that indicates a section of markup that is not code, e.g. to allow
- * embedding of line numbers within code listings.
- */
- var PR_NOCODE = 'nocode';
-
- /** A set of tokens that can precede a regular expression literal in
- * javascript.
- * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
- * list, but I've removed ones that might be problematic when seen in
- * languages that don't support regular expression literals.
- *
- * Specifically, I've removed any keywords that can't precede a regexp
- * literal in a syntactically legal javascript program, and I've removed the
- * "in" keyword since it's not a keyword in many languages, and might be used
- * as a count of inches.
- *
- *
The link a above does not accurately describe EcmaScript rules since
- * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
- * very well in practice.
- *
- * @private
- */
- var REGEXP_PRECEDER_PATTERN = function () {
- var preceders = [
- "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
- "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
- "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
- "<", "<<", "<<=", "<=", "=", "==", "===", ">",
- ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
- "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
- "||=", "~" /* handles =~ and !~ */,
- "break", "case", "continue", "delete",
- "do", "else", "finally", "instanceof",
- "return", "throw", "try", "typeof"
- ];
- var pattern = '(?:^^|[+-]';
- for (var i = 0; i < preceders.length; ++i) {
- pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
- }
- pattern += ')\\s*'; // matches at end, and matches empty string
- return pattern;
- // CAVEAT: this does not properly handle the case where a regular
- // expression immediately follows another since a regular expression may
- // have flags for case-sensitivity and the like. Having regexp tokens
- // adjacent is not valid in any language I'm aware of, so I'm punting.
- // TODO: maybe style special characters inside a regexp as punctuation.
- }();
-
- // Define regexps here so that the interpreter doesn't have to create an
- // object each time the function containing them is called.
- // The language spec requires a new object created even if you don't access
- // the $1 members.
- var pr_amp = /&/g;
- var pr_lt = //g;
- var pr_quot = /\"/g;
- /** like textToHtml but escapes double quotes to be attribute safe. */
- function attribToHtml(str) {
- return str.replace(pr_amp, '&')
- .replace(pr_lt, '<')
- .replace(pr_gt, '>')
- .replace(pr_quot, '"');
- }
-
- /** escapest html special characters to html. */
- function textToHtml(str) {
- return str.replace(pr_amp, '&')
- .replace(pr_lt, '<')
- .replace(pr_gt, '>');
- }
-
-
- var pr_ltEnt = /</g;
- var pr_gtEnt = />/g;
- var pr_aposEnt = /'/g;
- var pr_quotEnt = /"/g;
- var pr_ampEnt = /&/g;
- var pr_nbspEnt = / /g;
- /** unescapes html to plain text. */
- function htmlToText(html) {
- var pos = html.indexOf('&');
- if (pos < 0) { return html; }
- // Handle numeric entities specially. We can't use functional substitution
- // since that doesn't work in older versions of Safari.
- // These should be rare since most browsers convert them to normal chars.
- for (--pos; (pos = html.indexOf('', pos + 1)) >= 0;) {
- var end = html.indexOf(';', pos);
- if (end >= 0) {
- var num = html.substring(pos + 3, end);
- var radix = 10;
- if (num && num.charAt(0) === 'x') {
- num = num.substring(1);
- radix = 16;
- }
- var codePoint = parseInt(num, radix);
- if (!isNaN(codePoint)) {
- html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
- html.substring(end + 1));
- }
- }
- }
-
- return html.replace(pr_ltEnt, '<')
- .replace(pr_gtEnt, '>')
- .replace(pr_aposEnt, "'")
- .replace(pr_quotEnt, '"')
- .replace(pr_nbspEnt, ' ')
- .replace(pr_ampEnt, '&');
- }
-
- /** is the given node's innerHTML normally unescaped? */
- function isRawContent(node) {
- return 'XMP' === node.tagName;
- }
-
- var newlineRe = /[\r\n]/g;
- /**
- * Are newlines and adjacent spaces significant in the given node's innerHTML?
- */
- function isPreformatted(node, content) {
- // PRE means preformatted, and is a very common case, so don't create
- // unnecessary computed style objects.
- if ('PRE' === node.tagName) { return true; }
- if (!newlineRe.test(content)) { return true; } // Don't care
- var whitespace = '';
- // For disconnected nodes, IE has no currentStyle.
- if (node.currentStyle) {
- whitespace = node.currentStyle.whiteSpace;
- } else if (window.getComputedStyle) {
- // Firefox makes a best guess if node is disconnected whereas Safari
- // returns the empty string.
- whitespace = window.getComputedStyle(node, null).whiteSpace;
- }
- return !whitespace || whitespace === 'pre';
- }
-
- function normalizedHtml(node, out, opt_sortAttrs) {
- switch (node.nodeType) {
- case 1: // an element
- var name = node.tagName.toLowerCase();
-
- out.push('<', name);
- var attrs = node.attributes;
- var n = attrs.length;
- if (n) {
- if (opt_sortAttrs) {
- var sortedAttrs = [];
- for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
- sortedAttrs.sort(function (a, b) {
- return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
- });
- attrs = sortedAttrs;
- }
- for (var i = 0; i < n; ++i) {
- var attr = attrs[i];
- if (!attr.specified) { continue; }
- out.push(' ', attr.name.toLowerCase(),
- '="', attribToHtml(attr.value), '"');
- }
- }
- out.push('>');
- for (var child = node.firstChild; child; child = child.nextSibling) {
- normalizedHtml(child, out, opt_sortAttrs);
- }
- if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
- out.push('<\/', name, '>');
- }
- break;
- case 3: case 4: // text
- out.push(textToHtml(node.nodeValue));
- break;
- }
- }
-
- /**
- * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
- * matches the union o the sets o strings matched d by the input RegExp.
- * Since it matches globally, if the input strings have a start-of-input
- * anchor (/^.../), it is ignored for the purposes of unioning.
- * @param {Array.} regexs non multiline, non-global regexs.
- * @return {RegExp} a global regex.
- */
- function combinePrefixPatterns(regexs) {
- var capturedGroupIndex = 0;
-
- var needToFoldCase = false;
- var ignoreCase = false;
- for (var i = 0, n = regexs.length; i < n; ++i) {
- var regex = regexs[i];
- if (regex.ignoreCase) {
- ignoreCase = true;
- } else if (/[a-z]/i.test(regex.source.replace(
- /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
- needToFoldCase = true;
- ignoreCase = false;
- break;
- }
- }
-
- function decodeEscape(charsetPart) {
- if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
- switch (charsetPart.charAt(1)) {
- case 'b': return 8;
- case 't': return 9;
- case 'n': return 0xa;
- case 'v': return 0xb;
- case 'f': return 0xc;
- case 'r': return 0xd;
- case 'u': case 'x':
- return parseInt(charsetPart.substring(2), 16)
- || charsetPart.charCodeAt(1);
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- return parseInt(charsetPart.substring(1), 8);
- default: return charsetPart.charCodeAt(1);
- }
- }
-
- function encodeEscape(charCode) {
- if (charCode < 0x20) {
- return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
- }
- var ch = String.fromCharCode(charCode);
- if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
- ch = '\\' + ch;
- }
- return ch;
- }
-
- function caseFoldCharset(charSet) {
- var charsetParts = charSet.substring(1, charSet.length - 1).match(
- new RegExp(
- '\\\\u[0-9A-Fa-f]{4}'
- + '|\\\\x[0-9A-Fa-f]{2}'
- + '|\\\\[0-3][0-7]{0,2}'
- + '|\\\\[0-7]{1,2}'
- + '|\\\\[\\s\\S]'
- + '|-'
- + '|[^-\\\\]',
- 'g'));
- var groups = [];
- var ranges = [];
- var inverse = charsetParts[0] === '^';
- for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
- var p = charsetParts[i];
- switch (p) {
- case '\\B': case '\\b':
- case '\\D': case '\\d':
- case '\\S': case '\\s':
- case '\\W': case '\\w':
- groups.push(p);
- continue;
- }
- var start = decodeEscape(p);
- var end;
- if (i + 2 < n && '-' === charsetParts[i + 1]) {
- end = decodeEscape(charsetParts[i + 2]);
- i += 2;
- } else {
- end = start;
- }
- ranges.push([start, end]);
- // If the range might intersect letters, then expand it.
- if (!(end < 65 || start > 122)) {
- if (!(end < 65 || start > 90)) {
- ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
- }
- if (!(end < 97 || start > 122)) {
- ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
- }
- }
- }
-
- // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
- // -> [[1, 12], [14, 14], [16, 17]]
- ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
- var consolidatedRanges = [];
- var lastRange = [NaN, NaN];
- for (var i = 0; i < ranges.length; ++i) {
- var range = ranges[i];
- if (range[0] <= lastRange[1] + 1) {
- lastRange[1] = Math.max(lastRange[1], range[1]);
- } else {
- consolidatedRanges.push(lastRange = range);
- }
- }
-
- var out = ['['];
- if (inverse) { out.push('^'); }
- out.push.apply(out, groups);
- for (var i = 0; i < consolidatedRanges.length; ++i) {
- var range = consolidatedRanges[i];
- out.push(encodeEscape(range[0]));
- if (range[1] > range[0]) {
- if (range[1] + 1 > range[0]) { out.push('-'); }
- out.push(encodeEscape(range[1]));
- }
- }
- out.push(']');
- return out.join('');
- }
-
- function allowAnywhereFoldCaseAndRenumberGroups(regex) {
- // Split into character sets, escape sequences, punctuation strings
- // like ('(', '(?:', ')', '^'), and runs of characters that do not
- // include any of the above.
- var parts = regex.source.match(
- new RegExp(
- '(?:'
- + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
- + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
- + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
- + '|\\\\[0-9]+' // a back-reference or octal escape
- + '|\\\\[^ux0-9]' // other escape sequence
- + '|\\(\\?[:!=]' // start of a non-capturing group
- + '|[\\(\\)\\^]' // start/emd of a group, or line start
- + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
- + ')',
- 'g'));
- var n = parts.length;
-
- // Maps captured group numbers to the number they will occupy in
- // the output or to -1 if that has not been determined, or to
- // undefined if they need not be capturing in the output.
- var capturedGroups = [];
-
- // Walk over and identify back references to build the capturedGroups
- // mapping.
- for (var i = 0, groupIndex = 0; i < n; ++i) {
- var p = parts[i];
- if (p === '(') {
- // groups are 1-indexed, so max group index is count of '('
- ++groupIndex;
- } else if ('\\' === p.charAt(0)) {
- var decimalValue = +p.substring(1);
- if (decimalValue && decimalValue <= groupIndex) {
- capturedGroups[decimalValue] = -1;
- }
- }
- }
-
- // Renumber groups and reduce capturing groups to non-capturing groups
- // where possible.
- for (var i = 1; i < capturedGroups.length; ++i) {
- if (-1 === capturedGroups[i]) {
- capturedGroups[i] = ++capturedGroupIndex;
- }
- }
- for (var i = 0, groupIndex = 0; i < n; ++i) {
- var p = parts[i];
- if (p === '(') {
- ++groupIndex;
- if (capturedGroups[groupIndex] === undefined) {
- parts[i] = '(?:';
- }
- } else if ('\\' === p.charAt(0)) {
- var decimalValue = +p.substring(1);
- if (decimalValue && decimalValue <= groupIndex) {
- parts[i] = '\\' + capturedGroups[groupIndex];
- }
- }
- }
-
- // Remove any prefix anchors so that the output will match anywhere.
- // ^^ really does mean an anchored match though.
- for (var i = 0, groupIndex = 0; i < n; ++i) {
- if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
- }
-
- // Expand letters to groupts to handle mixing of case-sensitive and
- // case-insensitive patterns if necessary.
- if (regex.ignoreCase && needToFoldCase) {
- for (var i = 0; i < n; ++i) {
- var p = parts[i];
- var ch0 = p.charAt(0);
- if (p.length >= 2 && ch0 === '[') {
- parts[i] = caseFoldCharset(p);
- } else if (ch0 !== '\\') {
- // TODO: handle letters in numeric escapes.
- parts[i] = p.replace(
- /[a-zA-Z]/g,
- function (ch) {
- var cc = ch.charCodeAt(0);
- return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
- });
- }
- }
- }
-
- return parts.join('');
- }
-
- var rewritten = [];
- for (var i = 0, n = regexs.length; i < n; ++i) {
- var regex = regexs[i];
- if (regex.global || regex.multiline) { throw new Error('' + regex); }
- rewritten.push(
- '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
- }
-
- return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
- }
-
- var PR_innerHtmlWorks = null;
- function getInnerHtml(node) {
- // inner html is hopelessly broken in Safari 2.0.4 when the content is
- // an html description of well formed XML and the containing tag is a PRE
- // tag, so we detect that case and emulate innerHTML.
- if (null === PR_innerHtmlWorks) {
- var testNode = document.createElement('PRE');
- testNode.appendChild(
- document.createTextNode('\n '));
- PR_innerHtmlWorks = !/)[\r\n]+/g, '$1')
- .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
- }
- return content;
- }
-
- var out = [];
- for (var child = node.firstChild; child; child = child.nextSibling) {
- normalizedHtml(child, out);
- }
- return out.join('');
- }
-
- /** returns a function that expand tabs to spaces. This function can be fed
- * successive chunks of text, and will maintain its own internal state to
- * keep track of how tabs are expanded.
- * @return {function (string) : string} a function that takes
- * plain text and return the text with tabs expanded.
- * @private
- */
- function makeTabExpander(tabWidth) {
- var SPACES = ' ';
- var charInLine = 0;
-
- return function (plainText) {
- // walk over each character looking for tabs and newlines.
- // On tabs, expand them. On newlines, reset charInLine.
- // Otherwise increment charInLine
- var out = null;
- var pos = 0;
- for (var i = 0, n = plainText.length; i < n; ++i) {
- var ch = plainText.charAt(i);
-
- switch (ch) {
- case '\t':
- if (!out) { out = []; }
- out.push(plainText.substring(pos, i));
- // calculate how much space we need in front of this part
- // nSpaces is the amount of padding -- the number of spaces needed
- // to move us to the next column, where columns occur at factors of
- // tabWidth.
- var nSpaces = tabWidth - (charInLine % tabWidth);
- charInLine += nSpaces;
- for (; nSpaces >= 0; nSpaces -= SPACES.length) {
- out.push(SPACES.substring(0, nSpaces));
- }
- pos = i + 1;
- break;
- case '\n':
- charInLine = 0;
- break;
- default:
- ++charInLine;
- }
- }
- if (!out) { return plainText; }
- out.push(plainText.substring(pos));
- return out.join('');
- };
- }
-
- var pr_chunkPattern = new RegExp(
- '[^<]+' // A run of characters other than '<'
- + '|<\!--[\\s\\S]*?--\>' // an HTML comment
- + '|' // a CDATA section
- // a probable tag that should not be highlighted
- + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
- + '|<', // A '<' that does not begin a larger chunk
- 'g');
- var pr_commentPrefix = /^<\!--/;
- var pr_cdataPrefix = /^) into their textual equivalent.
- *
- * @param {string} s html where whitespace is considered significant.
- * @return {Object} source code and extracted tags.
- * @private
- */
- function extractTags(s) {
- // since the pattern has the 'g' modifier and defines no capturing groups,
- // this will return a list of all chunks which we then classify and wrap as
- // PR_Tokens
- var matches = s.match(pr_chunkPattern);
- var sourceBuf = [];
- var sourceBufLen = 0;
- var extractedTags = [];
- if (matches) {
- for (var i = 0, n = matches.length; i < n; ++i) {
- var match = matches[i];
- if (match.length > 1 && match.charAt(0) === '<') {
- if (pr_commentPrefix.test(match)) { continue; }
- if (pr_cdataPrefix.test(match)) {
- // strip CDATA prefix and suffix. Don't unescape since it's CDATA
- sourceBuf.push(match.substring(9, match.length - 3));
- sourceBufLen += match.length - 12;
- } else if (pr_brPrefix.test(match)) {
- //
tags are lexically significant so convert them to text.
- // This is undone later.
- sourceBuf.push('\n');
- ++sourceBufLen;
- } else {
- if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
- // A will start a section that should be
- // ignored. Continue walking the list until we see a matching end
- // tag.
- var name = match.match(pr_tagNameRe)[2];
- var depth = 1;
- var j;
- end_tag_loop:
- for (j = i + 1; j < n; ++j) {
- var name2 = matches[j].match(pr_tagNameRe);
- if (name2 && name2[2] === name) {
- if (name2[1] === '/') {
- if (--depth === 0) { break end_tag_loop; }
- } else {
- ++depth;
- }
- }
- }
- if (j < n) {
- extractedTags.push(
- sourceBufLen, matches.slice(i, j + 1).join(''));
- i = j;
- } else { // Ignore unclosed sections.
- extractedTags.push(sourceBufLen, match);
- }
- } else {
- extractedTags.push(sourceBufLen, match);
- }
- }
- } else {
- var literalText = htmlToText(match);
- sourceBuf.push(literalText);
- sourceBufLen += literalText.length;
- }
- }
- }
- return { source: sourceBuf.join(''), tags: extractedTags };
- }
-
- /** True if the given tag contains a class attribute with the nocode class. */
- function isNoCodeTag(tag) {
- return !!tag
- // First canonicalize the representation of attributes
- .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
- ' $1="$2$3$4"')
- // Then look for the attribute we want.
- .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
- }
-
- /**
- * Apply the given language handler to sourceCode and add the resulting
- * decorations to out.
- * @param {number} basePos the index of sourceCode within the chunk of source
- * whose decorations are already present on out.
- */
- function appendDecorations(basePos, sourceCode, langHandler, out) {
- if (!sourceCode) { return; }
- var job = {
- source: sourceCode,
- basePos: basePos
- };
- langHandler(job);
- out.push.apply(out, job.decorations);
- }
-
- /** Given triples of [style, pattern, context] returns a lexing function,
- * The lexing function interprets the patterns to find token boundaries and
- * returns a decoration list of the form
- * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
- * where index_n is an index into the sourceCode, and style_n is a style
- * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
- * all characters in sourceCode[index_n-1:index_n].
- *
- * The stylePatterns is a list whose elements have the form
- * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
- *
- * Style is a style constant like PR_PLAIN, or can be a string of the
- * form 'lang-FOO', where FOO is a language extension describing the
- * language of the portion of the token in $1 after pattern executes.
- * E.g., if style is 'lang-lisp', and group 1 contains the text
- * '(hello (world))', then that portion of the token will be passed to the
- * registered lisp handler for formatting.
- * The text before and after group 1 will be restyled using this decorator
- * so decorators should take care that this doesn't result in infinite
- * recursion. For example, the HTML lexer rule for SCRIPT elements looks
- * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
- * '