Coverage Summary for Class: Symbols (it.polimi.ingsw.Misc)
Class |
Method, %
|
Branch, %
|
Line, %
|
Symbols |
80%
(4/5)
|
100%
(10/10)
|
95,2%
(20/21)
|
Symbols$1 |
100%
(1/1)
|
100%
(1/1)
|
Total |
83,3%
(5/6)
|
100%
(10/10)
|
95,5%
(21/22)
|
1 package it.polimi.ingsw.Misc;
2
3 import it.polimi.ingsw.Model.Enums.PawnColour;
4
5 /**
6 * Symbols holds constants and methods used by the CLI. Mainly it focuses on colour management via ANSI codes
7 */
8 public class Symbols {
9 public static final String BLACK = "\u001b[30m";
10 public static final String WHITE = "\u001b[243m";
11 public static final String GRAY = "\u001b[37m";
12 public static final String BLUE = "\u001b[34m";
13 public static final String GREEN = "\u001b[32m";
14 public static final String PINK = "\u001b[35m";
15 public static final String RED = "\u001b[31m";
16 public static final String YELLOW = "\u001b[33m";
17
18 // colour used to represent coins
19 public static final String GOLD = "\u001b[38;5;220m";
20
21 // code used to reset terminal characters style
22 public static final String RESET = "\u001b[00m";
23
24 // simple gray background used under all the CLI to improve visibility independently of the specific console setting
25 public static final String BACKGROUND = "\u001b[48;5;237m";
26
27 // background used to highlight students in the entrance
28 public static final String BACKGROUND_BLUE = "\u001b[44m";
29 public static final String BACKGROUND_GREEN = "\u001b[42m";
30 public static final String BACKGROUND_PINK = "\u001b[45m";
31 public static final String BACKGROUND_RED = "\u001b[41m";
32 public static final String BACKGROUND_YELLOW = "\u001b[43m";
33
34 // improves readability of certain icons (towers and students)
35 public static final String BOLD = "\u001b[1m";
36
37 // used to handle no entry tiles
38 public static final String OVERLAY = "\u001b[7m";
39
40 // icons to represent specific model entities
41 public static final String PAWN = BOLD + "■" + RESET + BACKGROUND;
42 public static final String TOWER = BOLD + "≡" + RESET + BACKGROUND;
43 public static final String COIN = GOLD + "¤" + RESET + BACKGROUND;
44
45
46 /**
47 * Method used to create a visual representation of the students using a colour and the icon.
48 * Extends the functionality of the method {@link Symbols#colour(String, String)}
49 *
50 * @param p student object used to access colour information
51 * @param message the icon or character with which the student will be represented
52 * @return a String containing the ASCII code of the colour followed by the message
53 */
54 public static String colorizeStudent(PawnColour p, String message) {
55 String student = "";
56 switch (p) {
57 case BLUE -> student = student + Symbols.colour(message, Symbols.BLUE);
58 case GREEN -> student = student + Symbols.colour(message, Symbols.GREEN);
59 case PINK -> student = student + Symbols.colour(message, Symbols.PINK);
60 case RED -> student = student + Symbols.colour(message, Symbols.RED);
61 case YELLOW -> student = student + Symbols.colour(message, Symbols.YELLOW);
62 }
63 return student;
64 }
65
66 /**
67 * Method used to change the style of a string. It is usually used to change the colour of the string but
68 * can be used to change other aspect of the style in general
69 *
70 * @param s the String of which we want to change the style
71 * @param colour the ANSI code with which the String style will be modified
72 * @return a String with style changed
73 */
74 public static String colour(String s, String colour) {
75 return colour + s + Symbols.RESET + Symbols.BACKGROUND;
76 }
77
78 /**
79 * Method used to create a visual representation of the students using a colour as the background of a String.
80 *
81 * @param p student object used to access colour information
82 * @param message the icon or character with which the student will be represented
83 * @return a String containing the ASCII code of the colour followed by the message
84 */
85 public static String colorizeBackgroundStudent(PawnColour p, String message) {
86 String student = "";
87 switch (p) {
88 case BLUE ->
89 student = student + Symbols.BACKGROUND_BLUE + Symbols.BLACK + " " + message + " " + Symbols.RESET + Symbols.BACKGROUND;
90 case GREEN ->
91 student = student + Symbols.BACKGROUND_GREEN + Symbols.BLACK + " " + message + " " + Symbols.RESET + Symbols.BACKGROUND;
92 case PINK ->
93 student = student + Symbols.BACKGROUND_PINK + Symbols.BLACK + " " + message + " " + Symbols.RESET + Symbols.BACKGROUND;
94 case RED ->
95 student = student + Symbols.BACKGROUND_RED + Symbols.BLACK + " " + message + " " + Symbols.RESET + Symbols.BACKGROUND;
96 case YELLOW ->
97 student = student + Symbols.BACKGROUND_YELLOW + Symbols.BLACK + " " + message + " " + Symbols.RESET + Symbols.BACKGROUND;
98
99 }
100 return student;
101 }
102
103 /**
104 * Method used to remove all ANSI codes and tabulation from a String. Useful to count character within a String
105 * which has its style affected by ANSI codes
106 *
107 * @param s the message which the ANSI code will be stripped from
108 * @return a simple ASCII String
109 */
110 public static String stripFromANSICodes(String s) {
111 return s
112 .replaceAll("(\\x9B|\\x1B\\[)[0-?]*[ -/]*[@-~]", "") // removes all ANSI control codes
113 .replaceAll("(\t)+", " "); // converts tabs to four spaces
114 }
115 }