Lines Matching refs:self
41 def __init__(self, prefix, debug=0, enable_fname=False): argument
46 self.prefix = prefix
47 self.debug = debug
48 self.enable_fname = enable_fname
50 self.data = {}
53 self.max_size_name = len(self.h_name)
54 self.max_size_kconfig = len(self.h_kconfig)
55 self.max_size_description = len(self.h_description)
56 self.max_size_desc_word = 0
57 self.max_size_subsys = len(self.h_subsys)
58 self.max_size_status = len(self.h_status)
59 self.max_size_arch = len(self.h_arch)
60 self.max_size_arch_with_header = self.max_size_arch + self.max_size_arch
61 self.description_size = 1
63 self.msg = ""
65 def emit(self, msg="", end="\n"): argument
66 self.msg += msg + end
68 def parse_error(self, fname, ln, msg, data=None): argument
84 def parse_feat_file(self, fname): argument
93 if self.debug:
98 self.max_size_subsys = max(self.max_size_subsys, len(subsys))
106 if self.debug > 1:
109 if self.enable_fname:
111 self.emit(f".. FILE {full_fname}")
121 self.max_size_name = max(self.max_size_name,
129 self.max_size_kconfig = max(self.max_size_kconfig,
137 self.max_size_description = max(self.max_size_description,
142 self.max_size_desc_word = max(self.max_size_desc_word,
166 self.max_size_status = max(self.max_size_status,
168 self.max_size_arch = max(self.max_size_arch, len(arch))
177 self.parse_error(fname, ln, "Line is invalid", line)
180 self.parse_error(fname, 0, "Feature name not found")
183 self.parse_error(fname, 0, "Subsystem not found")
186 self.parse_error(fname, 0, "Kconfig not found")
189 self.parse_error(fname, 0, "Description not found")
192 self.parse_error(fname, 0, "Architecture table not found")
195 self.data[feature_name] = {
204 self.max_size_arch_with_header = self.max_size_arch + len(self.h_arch)
206 def parse(self): argument
209 path = os.path.expanduser(self.prefix)
211 if self.debug > 2:
218 self.parse_feat_file(fname)
220 return self.data
222 def output_arch_table(self, arch, feat=None): argument
229 self.emit("=" * len(title))
230 self.emit(title)
231 self.emit("=" * len(title))
232 self.emit()
234 self.emit("=" * self.max_size_subsys + " ", end="")
235 self.emit("=" * self.max_size_name + " ", end="")
236 self.emit("=" * self.max_size_kconfig + " ", end="")
237 self.emit("=" * self.max_size_status + " ", end="")
238 self.emit("=" * self.max_size_description)
240 self.emit(f"{self.h_subsys:<{self.max_size_subsys}} ", end="")
241 self.emit(f"{self.h_name:<{self.max_size_name}} ", end="")
242 self.emit(f"{self.h_kconfig:<{self.max_size_kconfig}} ", end="")
243 self.emit(f"{self.h_status:<{self.max_size_status}} ", end="")
244 self.emit(f"{self.h_description:<{self.max_size_description}}")
246 self.emit("=" * self.max_size_subsys + " ", end="")
247 self.emit("=" * self.max_size_name + " ", end="")
248 self.emit("=" * self.max_size_kconfig + " ", end="")
249 self.emit("=" * self.max_size_status + " ", end="")
250 self.emit("=" * self.max_size_description)
252 sorted_features = sorted(self.data.keys(),
253 key=lambda x: (self.data[x]["subsys"],
260 arch_table = self.data[name]["table"]
265 self.emit(f"{self.data[name]['subsys']:<{self.max_size_subsys}} ",
267 self.emit(f"{name:<{self.max_size_name}} ", end="")
268 self.emit(f"{self.data[name]['kconfig']:<{self.max_size_kconfig}} ",
270 self.emit(f"{arch_table[arch]:<{self.max_size_status}} ",
272 self.emit(f"{self.data[name]['description']}")
274 self.emit("=" * self.max_size_subsys + " ", end="")
275 self.emit("=" * self.max_size_name + " ", end="")
276 self.emit("=" * self.max_size_kconfig + " ", end="")
277 self.emit("=" * self.max_size_status + " ", end="")
278 self.emit("=" * self.max_size_description)
280 return self.msg
282 def output_feature(self, feat): argument
289 self.emit("=" * len(title))
290 self.emit(title)
291 self.emit("=" * len(title))
292 self.emit()
294 if not feat in self.data:
297 if self.data[feat]["subsys"]:
298 self.emit(f":Subsystem: {self.data[feat]['subsys']}")
299 if self.data[feat]["kconfig"]:
300 self.emit(f":Kconfig: {self.data[feat]['kconfig']}")
302 desc = self.data[feat]["description"]
305 self.emit(f"\n{desc}.\n")
307 com = self.data[feat]["comments"].strip()
309 self.emit("Comments")
310 self.emit("--------")
311 self.emit(f"\n{com}\n")
313 self.emit("=" * self.max_size_arch + " ", end="")
314 self.emit("=" * self.max_size_status)
316 self.emit(f"{self.h_arch:<{self.max_size_arch}} ", end="")
317 self.emit(f"{self.h_status:<{self.max_size_status}}")
319 self.emit("=" * self.max_size_arch + " ", end="")
320 self.emit("=" * self.max_size_status)
322 arch_table = self.data[feat]["table"]
324 self.emit(f"{arch:<{self.max_size_arch}} ", end="")
325 self.emit(f"{arch_table[arch]:<{self.max_size_status}}")
327 self.emit("=" * self.max_size_arch + " ", end="")
328 self.emit("=" * self.max_size_status)
330 return self.msg
332 def matrix_lines(self, desc_size, max_size_status, header): argument
342 self.emit("+" + ln_marker * self.max_size_name + "+", end="")
343 self.emit(ln_marker * desc_size, end="")
344 self.emit("+" + ln_marker * max_size_status + "+")
346 def output_matrix(self): argument
354 self.emit("=" * len(title))
355 self.emit(title)
356 self.emit("=" * len(title))
357 self.emit()
361 desc_size = self.max_size_kconfig + 4
362 if not self.description_size:
363 desc_size = max(self.max_size_description, desc_size)
365 desc_size = max(self.description_size, desc_size)
367 desc_size = max(self.max_size_desc_word, desc_size, len(desc_title))
370 self.max_size_status = max(self.max_size_status, len(notcompat))
372 min_status_size = self.max_size_status + self.max_size_arch + 4
373 max_size_status = max(min_status_size, self.max_size_status)
379 for name in sorted(self.data.keys(),
380 key=lambda x: (self.data[x]["subsys"], x.lower())):
381 if not cur_subsys or cur_subsys != self.data[name]["subsys"]:
383 self.emit()
385 cur_subsys = self.data[name]["subsys"]
388 self.emit(title)
389 self.emit("=" * len(title))
390 self.emit()
392 self.matrix_lines(desc_size, max_size_status, 0)
394 self.emit(f"|{self.h_name:<{self.max_size_name}}", end="")
395 self.emit(f"|{desc_title:<{desc_size}}", end="")
396 self.emit(f"|{h_status_per_arch:<{max_size_status}}|")
398 self.matrix_lines(desc_size, max_size_status, 1)
405 arch_table = sorted(self.data[name]["table"].items(),
406 key=lambda x: (self.status_map.get(x[1], 99),
428 description = self.data[name]["description"]
458 self.emit(f"|{col[0]:<{self.max_size_name}}", end="")
459 self.emit(f"|{col[1]:<{desc_size}}", end="")
460 self.emit(f"|{line:<{max_size_status}}|")
462 self.matrix_lines(desc_size, max_size_status, 0)
464 return self.msg
466 def list_arch_features(self, arch, feat): argument
470 self.emit("#")
471 self.emit(f"# Kernel feature support matrix of the '{arch}' architecture:")
472 self.emit("#")
475 for name in sorted(self.data.keys(),
476 key=lambda n: (self.data[n]["subsys"].lower(),
481 feature = self.data[name]
486 self.emit(f"{feature['subsys']:>{self.max_size_subsys + 1}}/ ",
488 self.emit(f"{name:<{self.max_size_name}}: ", end="")
489 self.emit(f"{status:<5}| ", end="")
490 self.emit(f"{feature['kconfig']:>{self.max_size_kconfig}} ",
492 self.emit(f"# {feature['description']}")
494 return self.msg