From afd6445e9d97779367fbdd5ab4a2dddc40eef99d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 5 Feb 2018 02:59:07 +0100 Subject: [PATCH] doxygen: explicitly save symbol count. With all the aliases the autodetected number was quite off. --- doxygen/dox2html5.py | 10 +++++----- doxygen/search.js | 8 ++++---- doxygen/test/js-test-data/empty.bin | Bin 18 -> 20 bytes doxygen/test/js-test-data/searchdata.b85 | 2 +- doxygen/test/js-test-data/searchdata.bin | Bin 648 -> 650 bytes doxygen/test/js-test-data/unicode.bin | Bin 122 -> 124 bytes doxygen/test/js-test-data/wrong-magic.bin | Bin 18 -> 20 bytes doxygen/test/js-test-data/wrong-version.bin | 2 +- doxygen/test/populate-js-test-data.py | 12 ++++++------ doxygen/test/test-search.js | 16 ++++++++-------- doxygen/test/test_search.py | 13 +++++++------ 11 files changed, 32 insertions(+), 31 deletions(-) diff --git a/doxygen/dox2html5.py b/doxygen/dox2html5.py index c87df833..51559ea8 100755 --- a/doxygen/dox2html5.py +++ b/doxygen/dox2html5.py @@ -332,13 +332,13 @@ class ResultMap: assert len(output) == offset return output -search_data_header_struct = struct.Struct('<3sBI') +search_data_header_struct = struct.Struct('<3sBHI') -def serialize_search_data(trie: Trie, map: ResultMap, merge_subtrees=True, merge_prefixes=True) -> bytearray: +def serialize_search_data(trie: Trie, map: ResultMap, symbol_count, merge_subtrees=True, merge_prefixes=True) -> bytearray: serialized_trie = trie.serialize(merge_subtrees=merge_subtrees) serialized_map = map.serialize(merge_prefixes=merge_prefixes) - # magic header, version, offset of result map - return search_data_header_struct.pack(b'MCS', 0, len(serialized_trie) + 8) + serialized_trie + serialized_map + # magic header, version, symbol count, offset of result map + return search_data_header_struct.pack(b'MCS', 0, symbol_count, len(serialized_trie) + 10) + serialized_trie + serialized_map xref_id_rx = re.compile(r"""(.*)_1(_[a-z-]+[0-9]+)$""") slugify_nonalnum_rx = re.compile(r"""[^\w\s-]""") @@ -1796,7 +1796,7 @@ def build_search_data(state: State, merge_subtrees=True, add_lookahead_barriers= keyword_index = map.add(title, '', alias=index, suffix_length=suffix_length) trie.insert(search.lower(), keyword_index) - return serialize_search_data(trie, map, merge_subtrees=merge_subtrees, merge_prefixes=merge_prefixes) + return serialize_search_data(trie, map, len(state.search), merge_subtrees=merge_subtrees, merge_prefixes=merge_prefixes) def base85encode_search_data(data: bytearray) -> bytearray: return (b"/* Generated by http://mcss.mosra.cz/doxygen/. Do not edit. */\n" + diff --git a/doxygen/search.js b/doxygen/search.js index 35060dd6..79903fe4 100644 --- a/doxygen/search.js +++ b/doxygen/search.js @@ -40,7 +40,7 @@ var Search = { let view = new DataView(buffer); /* The file is too short to contain at least the headers */ - if(view.byteLength < 18) { + if(view.byteLength < 20) { console.error("Search data too short"); return false; } @@ -58,13 +58,13 @@ var Search = { } /* Separate the data into the trie and the result map */ - let mapOffset = view.getUint32(4, true); - this.trie = new DataView(buffer, 8, mapOffset - 8); + let mapOffset = view.getUint32(6, true); + this.trie = new DataView(buffer, 10, mapOffset - 10); this.map = new DataView(buffer, mapOffset); /* Set initial properties */ this.dataSize = buffer.byteLength; - this.symbolCount = (this.map.getUint32(0, true) & 0x00ffffff)/4 - 1; + this.symbolCount = view.getUint16(4, true); this.maxResults = maxResults ? maxResults : 100; this.searchString = ''; this.searchStack = [this.trie.getUint32(0, true)]; diff --git a/doxygen/test/js-test-data/empty.bin b/doxygen/test/js-test-data/empty.bin index 6d194001ded57661326bd550013ee951d9ef184b..67dc8acd8bab56f383e3fdd70215edb1172a03ab 100644 GIT binary patch literal 20 TcmeZu4rX9r5CCEpAcl|t5&r=E literal 18 TcmeZu4rbtEU|?VYVh9NU5E}sc diff --git a/doxygen/test/js-test-data/searchdata.b85 b/doxygen/test/js-test-data/searchdata.b85 index 7353fb94..ab4e029f 100644 --- a/doxygen/test/js-test-data/searchdata.b85 +++ b/doxygen/test/js-test-data/searchdata.b85 @@ -1 +1 @@ -O+!-viU9xsZ~*`S0RRC2009I504V?g2mk;m009mF0B!&Q6aWBe0RRI400AHX04V?gBme*?00Alh0B!&QFaQ8)00A}t0BryPJOBVX0RaL4LI8j|00Bq<0CE5UPyhgL00CA20CWHWTmS%L00CkE0A&FH1poj6ZU6u&00D9U04M+fcmM!y00Djg0BHaLga80-00D{s06GBy1OSi#fI0vHmH+@{00Eu=0A~OJqyPYJ00F810AT;M3600P(m0Aca~0BHdL2LJ#80s#PJ009O80BisO3;_UV009yK0B!*Q2mk;99svL;00I~R0AV5l04M+fC;VQpn|aA9L*O<{CsE@*UZYybcf2s%1#X>KTKZgealX>N2W03&T_ZU6uPIyzQmV{~tF0Ap-nb8}5$bZB2OUolo?V{~tFE@*UZYyton20A)zX>KSfAY*TCb94YBZE0=*0025VQekdqWdLJrVRLg$VRUF;F<&uKVQyz-E@*UZYyKSfAY*TCb94YBZE0>$VP|C^!n+_-bz*Q~XJr6$bz*Q~XJsyEbZu+|08(XRbYX61Y-I!h2LJ#9IyzEiV{|Af \ No newline at end of file +O+!-v2LOx#003|S000310RR921ONaj009U904M+f4gdgd009&L0BHdL0{{R4AOHX<00ATb04M+fDgXd(00A%n0BHaLHUI!^00BGz06GBy0suk)fI0vHNB{tG00B?{0B-;RRsaBW00CS80Am0FVgLYT0RRO600C|Q04V?gasU7*00DRa0B!&QegFVz00D#m0BryPiU0sQ0RaR6kN|)>00EW&0A&CHo&W%600E=`0B!&QssI3C00SBT0BvXh0Cund0CE5Uwg3P+0RaF2!~lRg00GJX0B8UK(f|N-0{{U40{{g800G_r04V?g<^TXF00Ha(0B!&R*Z=@w@&Ev70RRU8009C40A&CH1_1zU009gE0A~OJ5&-~i0RRX900ABW04V?h7y$rbA^`v>00Afg0CWHWG64W%00OE20AV-*0A&FH1^@s7NC5z400B$^0A~OJQUL&A00CG50B`^SUI74N00CqH0CfNa_y7QHXaE3qJ^=u7Y5@RqC;$KuKL7w}R{#JidjJ4wkpKWFvj6~X$p8SraA9X<0CRO>aA9X classMath_1_1Vector.html 2: ::Range [prefix=0[:0], type=CLASS] -> classMath_1_1Range.html """) - self.assertEqual(len(serialized), 239) + self.assertEqual(len(serialized), 241) class Search(IntegrationTestCase): def __init__(self, *args, **kwargs): @@ -374,8 +374,9 @@ class Search(IntegrationTestCase): serialized = f.read() search_data_pretty = pretty_print(serialized)[0] #print(search_data_pretty) - self.assertEqual(len(serialized), 4570) + self.assertEqual(len(serialized), 4572) self.assertEqual(search_data_pretty, """ +36 symbols deprecated_macro [0] || | ($ || | ) [1] -- 2.30.2