Skip to content

Commit de337e0

Browse files
committed
Make entry fomatter more modular
1 parent b6af6b6 commit de337e0

File tree

1 file changed

+62
-99
lines changed

1 file changed

+62
-99
lines changed

src/components/EntryFormatter.vala

Lines changed: 62 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,42 @@
11
namespace Pebbles {
22
public class EntryFormatter {
3+
// Modular replacement rules for scientific mode
4+
private const string replacement_rules_scientific = """
5+
{
6+
"x": {"radial": "θ", "default": "x", "len_gain": 0},
7+
"+": {"default": " + ", "len_gain": 2},
8+
"": {"default": "", "len_gain": 2},
9+
"-": {"default": "", "len_gain": 2},
10+
"÷": {"default": " ÷ ", "len_gain": 2},
11+
"/": {"default": " ÷ ", "len_gain": 2},
12+
"×": {"default": " × ", "len_gain": 2, "double": " ^ "},
13+
"*": {"default": " × ", "len_gain": 2, "double": " ^ "},
14+
"s": {"default": "sin ", "len_gain": 3},
15+
"S": {"default": "isin ", "len_gain": 4},
16+
"h": {"default": "sinh ", "len_gain": 4},
17+
"H": {"default": "isinh ", "len_gain": 5},
18+
"c": {"default": "cos ", "len_gain": 3},
19+
"C": {"default": "icos ", "len_gain": 4},
20+
"o": {"default": "cosh ", "len_gain": 4},
21+
"O": {"default": "icosh ", "len_gain": 5},
22+
"t": {"default": "tan ", "len_gain": 3},
23+
"T": {"default": "itan ", "len_gain": 4},
24+
"a": {"default": "tanh ", "len_gain": 4},
25+
"A": {"default": "itanh ", "len_gain": 5},
26+
"q": {"default": " ^ ", "len_gain": 2},
27+
"Q": {"default": "", "len_gain": 0},
28+
"z": {"default": "10 ^ ", "len_gain": 5},
29+
"Z": {"default": "e ^ ", "len_gain": 3},
30+
"F": {"default": "!", "len_gain": 0},
31+
"f": {"default": "!", "len_gain": 0},
32+
"m": {"default": " mod ", "len_gain": 4},
33+
"M": {"default": " log ", "len_gain": 4},
34+
"l": {"default": "10 log ", "len_gain": 5},
35+
"L": {"default": "ln ", "len_gain": 5},
36+
"p": {"default": "P", "len_gain": 0},
37+
"P": {"default": "C", "len_gain": 0}
38+
}
39+
""";
340
public unowned Gtk.Entry main_entry;
441
public bool polar_mode;
542
private bool auto_entry;
@@ -128,107 +165,33 @@ namespace Pebbles {
128165
out int len_gain
129166
) {
130167
double_replaced = false;
131-
switch (current_symbol) {
132-
case "x":
133-
len_gain = 0;
134-
if (radial_mode) {
135-
return "θ";
136-
} else {
137-
return "x";
138-
}
139-
case "+":
140-
len_gain = 2;
141-
return " + ";
142-
case "":
143-
case "-":
144-
len_gain = 2;
145-
return "";
146-
case "÷":
147-
case "/":
148-
len_gain = 2;
149-
return " ÷ ";
150-
case "×":
151-
case "*":
152-
len_gain = 2;
153-
if (previous_symbol == "×") {
154-
double_replaced = true;
155-
return " ^ ";
156-
}
157-
158-
return " × ";
159-
case "s":
160-
len_gain = 3;
161-
return "sin ";
162-
case "S":
163-
len_gain = 4;
164-
return "isin ";
165-
case "h":
166-
len_gain = 4;
167-
return "sinh ";
168-
case "H":
169-
len_gain = 5;
170-
return "isinh ";
171-
case "c":
172-
len_gain = 3;
173-
return "cos ";
174-
case "C":
175-
len_gain = 4;
176-
return "icos ";
177-
case "o":
178-
len_gain = 4;
179-
return "cosh ";
180-
case "O":
181-
len_gain = 5;
182-
return "icosh ";
183-
case "t":
184-
len_gain = 3;
185-
return "tan ";
186-
case "T":
187-
len_gain = 4;
188-
return "itan ";
189-
case "a":
190-
len_gain = 4;
191-
return "tanh ";
192-
case "A":
193-
len_gain = 5;
194-
return "itanh ";
195-
case "q":
196-
len_gain = 2;
197-
return " ^ ";
198-
case "Q":
199-
len_gain = 0;
200-
return "";
201-
case "z":
202-
len_gain = 5;
203-
return "10 ^ ";
204-
case "Z":
205-
len_gain = 3;
206-
return "e ^ ";
207-
case "F":
208-
case "f":
209-
len_gain = 0;
210-
return "!";
211-
case "m":
212-
len_gain = 4;
213-
return " mod ";
214-
case "M":
215-
len_gain = 4;
216-
return " log ";
217-
case "l":
218-
len_gain = 5;
219-
return "10 log ";
220-
case "L":
221-
len_gain = 5;
222-
return "ln ";
223-
case "p":
224-
len_gain = 0;
225-
return "P";
226-
case "P":
227-
len_gain = 0;
228-
return "C";
229-
default:
168+
var rules = new Json.Parser();
169+
try {
170+
rules.load_from_data(replacement_rules_scientific.strip(), -1);
171+
var obj = rules.get_root().get_object();
172+
if (!obj.has_member(current_symbol)) {
230173
len_gain = 0;
231174
return current_symbol;
175+
}
176+
var rule = obj.get_object_member(current_symbol);
177+
// Generic double replacement: if the rule has a "double" key and the previous symbol matches the current one
178+
var to_be_replaced_with = rule.get_string_member("default");
179+
180+
if (rule.has_member("double") && previous_symbol.strip () == to_be_replaced_with.strip ()) {
181+
len_gain = (int) rule.get_int_member("len_gain");
182+
double_replaced = true;
183+
return rule.get_string_member("double");
184+
}
185+
// Handle radial mode for x
186+
if (current_symbol == "x" && radial_mode && rule.has_member("radial")) {
187+
len_gain = (int) rule.get_int_member("len_gain");
188+
return rule.get_string_member("radial");
189+
}
190+
len_gain = (int) rule.get_int_member("len_gain");
191+
return to_be_replaced_with;
192+
} catch (Error e) {
193+
len_gain = 0;
194+
return current_symbol;
232195
}
233196
}
234197
}

0 commit comments

Comments
 (0)