#!/usr/bin/env python3 # SPDX-License-Identifier: LGPL-2.1-or-later from html.parser import HTMLParser from enum import Enum class State(Enum): NOWHERE = 0 COMPANY = 1 AFTER_COMPANY = 2 PNPID = 3 AFTER_PNPID = 4 DATE = 5 class PNPTableParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.state = State.NOWHERE self.data = "" self.pnpid = None self.company = None self.table = [] def handle_starttag(self, tag, attrs): if tag == "td": if self.state == State.NOWHERE: self.state = State.COMPANY elif self.state == State.AFTER_COMPANY: self.state = State.PNPID elif self.state == State.AFTER_PNPID: self.state = State.DATE else: raise ValueError self.data = "" def handle_endtag(self, tag): if tag == "td": if self.state == State.COMPANY: self.company = ' '.join(self.data.strip().split()) self.state = State.AFTER_COMPANY elif self.state == State.PNPID: self.pnpid = self.data.strip() self.state = State.AFTER_PNPID self.table.append((self.pnpid, self.company)) elif self.state == State.DATE: self.state = State.NOWHERE else: raise ValueError def handle_data(self, data): self.data += data def read_table(a): parser = PNPTableParser() for line in a: parser.feed(line) parser.close() parser.table.sort() for pnpid, company in parser.table: print("\nacpi:{0}*:\n ID_VENDOR_FROM_DATABASE={1}".format(pnpid, company)) a = open("acpi_id_registry.html") b = open("pnp_id_registry.html") print('# This file is part of systemd.\n' '#\n' '# Data imported from:\n' '# https://uefi.org/uefi-pnp-export\n' '# https://uefi.org/uefi-acpi-export') read_table(a) read_table(b)