mirror of
https://github.com/systemd/systemd
synced 2024-10-14 20:17:52 +00:00
hwdb: fix parser to work with newer pyparsing
The handling of whitespace in pyparsing is a bother. There's some global state, and per-element state, and it's hard to get a handle on things. With python3-pyparsing-2.4.7-10.fc36.noarch the grammar would not match. After handling of tabs was fixed to not accept duplicate tabs, the grammar passes. It seems that the entry for usb:v8087p8087* was generated incorrectly because we treated the interface line (with two TABs) as a device line (with one TAB).
This commit is contained in:
parent
88a65c936e
commit
f73d689587
|
@ -69815,9 +69815,6 @@ usb:v8087p8008*
|
||||||
usb:v8087p800A*
|
usb:v8087p800A*
|
||||||
ID_MODEL_FROM_DATABASE=Hub
|
ID_MODEL_FROM_DATABASE=Hub
|
||||||
|
|
||||||
usb:v8087p8087*
|
|
||||||
ID_MODEL_FROM_DATABASE=07da Centrino Advanced-N 6235
|
|
||||||
|
|
||||||
usb:v80EE*
|
usb:v80EE*
|
||||||
ID_VENDOR_FROM_DATABASE=VirtualBox
|
ID_VENDOR_FROM_DATABASE=VirtualBox
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import sys
|
||||||
from pyparsing import (Word, White, Literal, Regex,
|
from pyparsing import (Word, White, Literal, Regex,
|
||||||
LineEnd, SkipTo,
|
LineEnd, SkipTo,
|
||||||
ZeroOrMore, OneOrMore, Combine, Optional, Suppress,
|
ZeroOrMore, OneOrMore, Combine, Optional, Suppress,
|
||||||
Group,
|
Group, ParserElement,
|
||||||
stringEnd, pythonStyleComment)
|
stringEnd, pythonStyleComment)
|
||||||
|
|
||||||
EOL = LineEnd().suppress()
|
EOL = LineEnd().suppress()
|
||||||
|
@ -20,6 +20,8 @@ COMMENTLINE = pythonStyleComment + EOL
|
||||||
EMPTYLINE = LineEnd()
|
EMPTYLINE = LineEnd()
|
||||||
text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL
|
text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL
|
||||||
|
|
||||||
|
ParserElement.set_default_whitespace_chars(' \n')
|
||||||
|
|
||||||
def klass_grammar():
|
def klass_grammar():
|
||||||
klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text')
|
klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text')
|
||||||
subclass_line = TAB + NUM2('subclass') + text_eol('text')
|
subclass_line = TAB + NUM2('subclass') + text_eol('text')
|
||||||
|
@ -35,8 +37,12 @@ def klass_grammar():
|
||||||
def usb_ids_grammar():
|
def usb_ids_grammar():
|
||||||
vendor_line = NUM4('vendor') + text_eol('text')
|
vendor_line = NUM4('vendor') + text_eol('text')
|
||||||
device_line = TAB + NUM4('device') + text_eol('text')
|
device_line = TAB + NUM4('device') + text_eol('text')
|
||||||
|
interface_line = TAB + TAB + NUM4('interface') + NUM4('interface2') + text_eol('text')
|
||||||
|
device = (device_line +
|
||||||
|
ZeroOrMore(Group(interface_line)
|
||||||
|
^ COMMENTLINE.suppress()))
|
||||||
vendor = (vendor_line('VENDOR') +
|
vendor = (vendor_line('VENDOR') +
|
||||||
ZeroOrMore(Group(device_line)('VENDOR_DEV*') ^ COMMENTLINE.suppress()))
|
ZeroOrMore(Group(device)('VENDOR_DEV*') ^ COMMENTLINE.suppress()))
|
||||||
|
|
||||||
klass = klass_grammar()
|
klass = klass_grammar()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue