diff --git a/lzw.c b/lzw.c index b1bb1610b15cce3180064397d0c4400ccdfa1a0b..5af4be4dd6c42eeefe5214282ccd999f15c9d68a 100644 --- a/lzw.c +++ b/lzw.c @@ -281,12 +281,14 @@ void init_lzw_parser() H_VRULE(LZW_11bitlitspec, h_bits(11, false)); H_VRULE(LZW_12bitlitspec, h_bits(12, false)); + H_RULE(LZW_remainingbits, h_many(h_bits(1, false))); //XXX: could validate that these bits are 0? + H_VARULE(LZW_clear, h_choice(LZW_9bitlitspec, LZW_10bitlitspec, LZW_11bitlitspec, LZW_12bitlitspec, NULL)); //XXX: VARULE or AVRULE? H_VRULE(LZW_eod, h_choice(LZW_9bitlitspec, LZW_10bitlitspec, LZW_11bitlitspec, LZW_12bitlitspec, NULL)); H_VRULE(LZW_literal, h_choice(LZW_9bitlitspec, LZW_10bitlitspec, LZW_11bitlitspec, LZW_12bitlitspec, NULL)); H_ARULE(LZW_codeword, h_choice(LZW_9bitcodeword, LZW_10bitcodeword, LZW_11bitcodeword, LZW_12bitcodeword, NULL)); - H_RULE(LZW_data, h_sequence(LZW_clear, h_many1(h_choice(LZW_literal, LZW_clear, LZW_codeword, NULL)), LZW_eod, NULL)); //XXX: butnot eod + H_RULE(LZW_data, h_sequence(LZW_clear, h_many1(h_butnot(h_choice(LZW_literal, LZW_clear, LZW_codeword, NULL), LZW_eod)), LZW_eod, LZW_remainingbits, NULL)); p_lzwdata = LZW_data; }