Mercurial > ~dholland > hg > ag > index.cgi
comparison anagram/guisupport/charsdc.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:13d2b8934445 |
---|---|
1 /* | |
2 * AnaGram, A System for Syntax Directed Programming | |
3 * Copyright 1993-2000 Parsifal Software. All Rights Reserved. | |
4 * See the file COPYING for license and usage terms. | |
5 * | |
6 * charsdc.cpp - Character set display module | |
7 */ | |
8 | |
9 #include "arrays.h" | |
10 #include "charsdc.h" | |
11 #include "csexp.h" | |
12 #include "data.h" | |
13 #include "dc.h" | |
14 #include "dict.h" | |
15 #include "stacks.h" | |
16 #include "symbol.h" | |
17 #include "token.h" | |
18 #include "tree.h" | |
19 #include "ut.h" | |
20 #include "ws.h" | |
21 | |
22 //#define INCLUDE_LOGGING | |
23 #include "log.h" | |
24 | |
25 | |
26 #define PURE_MARKER '%' | |
27 | |
28 static int partition_set_tabs[] = {5,0}; | |
29 | |
30 static void part_set_display(int pn) { | |
31 int tn = map_part_number[pn].token_number; | |
32 token_number_map *tp = &map_token_number[tn]; | |
33 int name, tree; | |
34 | |
35 ssprintf("P%03d\tT%03d", pn, tn); | |
36 if (tn == 0) { | |
37 return; | |
38 } | |
39 name = tp->token_name; | |
40 if (name) { | |
41 ass(": "); | |
42 //ass(dict_str(tkn_dict, name)); | |
43 ass(Symbol(name)->string.pointer()); | |
44 if (tp->pure) { | |
45 acs(PURE_MARKER); | |
46 } | |
47 return; | |
48 } | |
49 tree = tp->parse_tree; | |
50 if (tree) { | |
51 name = map_parse_tree[tree].token_name; | |
52 if (name) { | |
53 //ass(dict_str(tkn_dict,name)); | |
54 ass(Symbol(name)->string.pointer()); | |
55 if (tp->pure) { | |
56 acs(PURE_MARKER); | |
57 } | |
58 } | |
59 } | |
60 } | |
61 | |
62 static int part_set_window_ok(int pn) { | |
63 return pn > 0 && (unsigned)pn < part_dict->nsx; | |
64 } | |
65 | |
66 dc_ref part_set_window(int pn){ | |
67 unsigned *list = lstptr(map_part_number[pn], chars); | |
68 dc_ref window; | |
69 | |
70 AgString foot = AgString::format("P%03d", pn); | |
71 //window = find_on_screen("Set Elements", foot); | |
72 //if (window.exists()) return window; | |
73 return dc_ref(new set_elements_dc(list, | |
74 map_part_number[pn].size,foot.pointer())); | |
75 } | |
76 | |
77 | |
78 static int char_map_tabs[] = {5,8,14,0}; | |
79 | |
80 char_map_dc::char_map_dc(void) | |
81 : dc("Character Map") | |
82 { | |
83 tab_stops = char_map_tabs; | |
84 columnHeadTitle = "Code\tChar\tSet\tToken"; | |
85 //des->c_size = cursor_bar_size; | |
86 des->d_size.y = n_chars; | |
87 //getWidth(); | |
88 //resize_window(); | |
89 } | |
90 | |
91 //extern int ersatz_tab; | |
92 | |
93 void char_map_dc::getLine(unsigned ln) const { | |
94 LOGSECTION("char_map_dc::getLine"); | |
95 char_number_map cm = map_char_number[ln]; | |
96 int name = map_char_number[ln].token_name; | |
97 int tn = cm.token_number; | |
98 extern int min_char_number; | |
99 int ch = ln + min_char_number; | |
100 int c = ch > 0 && ch < 255 ? ch : 32; | |
101 | |
102 LOGV(tn) LCV(name); | |
103 LOGV(ch) LCV(c) LCV(cm.part_number); | |
104 //ersatz_tab = 255; | |
105 if (c == '\t') { | |
106 c = 255; | |
107 } | |
108 ssprintf("%3d\t%c\tP%03d\tT%03d", ch, c, cm.part_number, tn); | |
109 if (tn) { | |
110 ass(": "); | |
111 atkn(tn); | |
112 return; | |
113 } | |
114 if (name) { | |
115 apprintf(" %s", Symbol(name)->string.pointer()); | |
116 //apprintf(" %s", dict_str(tkn_dict, name)); | |
117 apprintf(" %s", Symbol(name)->string.pointer()); | |
118 } | |
119 } | |
120 | |
121 int char_map_dc::set_elements_ok(unsigned ln) { | |
122 return part_set_window_ok(map_char_number[ln].part_number); | |
123 } | |
124 | |
125 dc_ref char_map_dc:: set_elements(unsigned ln) { | |
126 return part_set_window(map_char_number[ln].part_number); | |
127 } | |
128 | |
129 int char_map_dc::usage_ok(unsigned ln) { | |
130 return token_usage_window_ok(map_char_number[ln].token_number); | |
131 } | |
132 | |
133 dc_ref char_map_dc::usage(unsigned ln) { | |
134 return token_usage_window(map_char_number[ln].token_number); | |
135 } | |
136 | |
137 static int char_set_tabs[] = {6,12, 0}; | |
138 | |
139 void char_set_dc::getLine(unsigned ln) const { | |
140 int pt; | |
141 int tn; | |
142 int name; | |
143 | |
144 ln++; | |
145 ssprintf("C%03d:\t",ln); | |
146 pt = map_char_set[ln].parse_tree; | |
147 tn = map_parse_tree[pt].token_number; | |
148 if (tn) { | |
149 apprintf("T%03d:\t",tn); | |
150 name = map_token_number[tn].token_name; | |
151 } | |
152 else { | |
153 acs('\t'); | |
154 name = map_parse_tree[pt].token_name; | |
155 } | |
156 if (name) { | |
157 //apprintf("%s = ", dict_str(tkn_dict,name)); | |
158 apprintf("%s = ", Symbol(name)->string.pointer()); | |
159 } | |
160 //ass(node_string(map_parse_tree[pt].tree,4).pointer()); | |
161 ass(map_parse_tree[pt].expression->asString().pointer()); | |
162 } | |
163 | |
164 char_set_dc::char_set_dc(void) | |
165 : dc("Character Sets") | |
166 { | |
167 //des->c_size = cursor_bar_size; | |
168 des->d_size.y = char_set_dict->nsx - 1; | |
169 | |
170 tab_stops = char_set_tabs; | |
171 columnHeadTitle = "Set\tToken\tSet Representation"; | |
172 //getWidth(); | |
173 //resize_window(); | |
174 } | |
175 | |
176 int char_set_dc::set_elements_ok(unsigned ln) { | |
177 return char_set_window_ok(ln+1); | |
178 } | |
179 | |
180 dc_ref char_set_dc::set_elements(unsigned ln) { | |
181 return char_set_window(ln+1); | |
182 } | |
183 | |
184 dc_ref char_set_dc::partition_sets(unsigned ln) { | |
185 return new partition_set_dc(ln+1, AgString::format("C%03d", ln)); | |
186 } | |
187 | |
188 int char_set_dc::usage_ok(unsigned ln) { | |
189 int pt = map_char_set[ln+1].parse_tree; | |
190 return token_usage_window_ok(map_parse_tree[pt].token_number); | |
191 } | |
192 | |
193 dc_ref char_set_dc::usage(unsigned ln) { | |
194 int pt = map_char_set[ln+1].parse_tree; | |
195 return token_usage_window(map_parse_tree[pt].token_number); | |
196 } | |
197 | |
198 | |
199 partition_set_dc::partition_set_dc(unsigned csn, const AgString foot) | |
200 : dc("Partition Sets", foot) | |
201 { | |
202 char_set_number = csn; | |
203 des->d_size.y = map_char_set[csn].nparts; | |
204 | |
205 tab_stops = partition_set_tabs; | |
206 columnHeadTitle = "Set\tToken"; | |
207 //getWidth(); | |
208 //des->c_size = cursor_bar_size; | |
209 //resize_window(); | |
210 } | |
211 | |
212 void partition_set_dc::getLine(unsigned ln) const { | |
213 unsigned *parts = lstptr(map_char_set[char_set_number], part); | |
214 part_set_display(parts[ln]); | |
215 } | |
216 | |
217 dc_ref partition_set_dc:: set_elements(unsigned ln) { | |
218 unsigned *parts = lstptr(map_char_set[char_set_number], part); | |
219 return part_set_window(parts[ln]); | |
220 } | |
221 | |
222 | |
223 int partition_set_dc::usage_ok(unsigned ln) { | |
224 unsigned *parts = lstptr(map_char_set[char_set_number], part); | |
225 return token_usage_window_ok(map_part_number[parts[ln]].token_number); | |
226 } | |
227 | |
228 dc_ref partition_set_dc::usage(unsigned ln) { | |
229 unsigned *parts = lstptr(map_char_set[char_set_number], part); | |
230 return token_usage_window(map_part_number[parts[ln]].token_number); | |
231 } | |
232 | |
233 void partition_table_dc::getLine(unsigned ln) const { | |
234 part_set_display(ln); | |
235 } | |
236 | |
237 partition_table_dc::partition_table_dc(void) | |
238 : dc("Partition Sets") | |
239 { | |
240 //des->c_size = cursor_bar_size; | |
241 des->d_size.y = part_dict->nsx; | |
242 | |
243 tab_stops = partition_set_tabs; | |
244 columnHeadTitle = "Set\tToken"; | |
245 //getWidth(); | |
246 //resize_window(); | |
247 } | |
248 | |
249 dc_ref partition_table_dc::set_elements(unsigned ln) { | |
250 return part_set_window(ln); | |
251 } | |
252 | |
253 int partition_table_dc::usage_ok(unsigned ln) { | |
254 return token_usage_window_ok(map_part_number[ln].token_number); | |
255 } | |
256 | |
257 dc_ref partition_table_dc::usage(unsigned ln) { | |
258 return token_usage_window(map_part_number[ln].token_number); | |
259 } | |
260 | |
261 static int set_elements_tabs[] = {5,0}; | |
262 void set_elements_dc::getLine(unsigned ln) const { | |
263 int ch = list[ln]; | |
264 int c = ch > 0 && ch < 255 ? ch : 32; | |
265 ssprintf("%3d\t%c", ch, c); | |
266 } | |
267 | |
268 set_elements_dc::set_elements_dc(unsigned *l, unsigned n, char *foot) | |
269 : dc("Set Elements", foot) | |
270 { | |
271 list = l; | |
272 tab_stops = set_elements_tabs; | |
273 columnHeadTitle = "No.\tCharacter"; | |
274 //des->c_size = cursor_bar_size; | |
275 des->d_size.y = n; | |
276 //getWidth(); | |
277 //resize_window(); | |
278 } | |
279 | |
280 |