polyfile-weave 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of polyfile-weave might be problematic. Click here for more details.

Files changed (585) hide show
  1. polyfile/__init__.py +15 -0
  2. polyfile/__main__.py +394 -0
  3. polyfile/arithmetic.py +27 -0
  4. polyfile/ast.py +114 -0
  5. polyfile/debugger.py +1039 -0
  6. polyfile/expressions.py +346 -0
  7. polyfile/fileutils.py +343 -0
  8. polyfile/html.py +135 -0
  9. polyfile/http/__init__.py +1 -0
  10. polyfile/http/defacto.py +37 -0
  11. polyfile/http/deprecated.py +51 -0
  12. polyfile/http/experimental.py +67 -0
  13. polyfile/http/http_11.py +548 -0
  14. polyfile/http/matcher.py +37 -0
  15. polyfile/http/structured_headers.py +48 -0
  16. polyfile/iterators.py +72 -0
  17. polyfile/jpeg.py +24 -0
  18. polyfile/kaitai/__init__.py +0 -0
  19. polyfile/kaitai/compiler.py +156 -0
  20. polyfile/kaitai/parser.py +312 -0
  21. polyfile/kaitai/parsers/__init__.py +0 -0
  22. polyfile/kaitai/parsers/aix_utmp.py +116 -0
  23. polyfile/kaitai/parsers/allegro_dat.py +367 -0
  24. polyfile/kaitai/parsers/andes_firmware.py +64 -0
  25. polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
  26. polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
  27. polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
  28. polyfile/kaitai/parsers/android_dto.py +138 -0
  29. polyfile/kaitai/parsers/android_img.py +319 -0
  30. polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
  31. polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
  32. polyfile/kaitai/parsers/android_sparse.py +237 -0
  33. polyfile/kaitai/parsers/android_super.py +401 -0
  34. polyfile/kaitai/parsers/apm_partition_table.py +196 -0
  35. polyfile/kaitai/parsers/apple_single_double.py +180 -0
  36. polyfile/kaitai/parsers/asn1_der.py +235 -0
  37. polyfile/kaitai/parsers/au.py +138 -0
  38. polyfile/kaitai/parsers/avantes_roh60.py +112 -0
  39. polyfile/kaitai/parsers/avi.py +296 -0
  40. polyfile/kaitai/parsers/bcd.py +111 -0
  41. polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
  42. polyfile/kaitai/parsers/blender_blend.py +334 -0
  43. polyfile/kaitai/parsers/bmp.py +780 -0
  44. polyfile/kaitai/parsers/bson.py +411 -0
  45. polyfile/kaitai/parsers/btrfs_stream.py +318 -0
  46. polyfile/kaitai/parsers/bytes_with_io.py +27 -0
  47. polyfile/kaitai/parsers/chrome_pak.py +194 -0
  48. polyfile/kaitai/parsers/code_6502.py +456 -0
  49. polyfile/kaitai/parsers/compressed_resource.py +217 -0
  50. polyfile/kaitai/parsers/cpio_old_le.py +154 -0
  51. polyfile/kaitai/parsers/cramfs.py +344 -0
  52. polyfile/kaitai/parsers/creative_voice_file.py +342 -0
  53. polyfile/kaitai/parsers/dbf.py +274 -0
  54. polyfile/kaitai/parsers/dcmp_0.py +664 -0
  55. polyfile/kaitai/parsers/dcmp_1.py +422 -0
  56. polyfile/kaitai/parsers/dcmp_2.py +312 -0
  57. polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
  58. polyfile/kaitai/parsers/dex.py +1086 -0
  59. polyfile/kaitai/parsers/dicom.py +4370 -0
  60. polyfile/kaitai/parsers/dime_message.py +201 -0
  61. polyfile/kaitai/parsers/dns_packet.py +569 -0
  62. polyfile/kaitai/parsers/doom_wad.py +654 -0
  63. polyfile/kaitai/parsers/dos_datetime.py +191 -0
  64. polyfile/kaitai/parsers/dos_mz.py +172 -0
  65. polyfile/kaitai/parsers/ds_store.py +513 -0
  66. polyfile/kaitai/parsers/dtb.py +310 -0
  67. polyfile/kaitai/parsers/dune_2_pak.py +126 -0
  68. polyfile/kaitai/parsers/edid.py +472 -0
  69. polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
  70. polyfile/kaitai/parsers/elf.py +2482 -0
  71. polyfile/kaitai/parsers/ethernet_frame.py +114 -0
  72. polyfile/kaitai/parsers/exif.py +723 -0
  73. polyfile/kaitai/parsers/ext2.py +537 -0
  74. polyfile/kaitai/parsers/fallout2_dat.py +187 -0
  75. polyfile/kaitai/parsers/fallout_dat.py +156 -0
  76. polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
  77. polyfile/kaitai/parsers/ftl_dat.py +90 -0
  78. polyfile/kaitai/parsers/genmidi_op2.py +161 -0
  79. polyfile/kaitai/parsers/gettext_mo.py +541 -0
  80. polyfile/kaitai/parsers/gif.py +492 -0
  81. polyfile/kaitai/parsers/gimp_brush.py +244 -0
  82. polyfile/kaitai/parsers/glibc_utmp.py +114 -0
  83. polyfile/kaitai/parsers/gltf_binary.py +132 -0
  84. polyfile/kaitai/parsers/google_protobuf.py +151 -0
  85. polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
  86. polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
  87. polyfile/kaitai/parsers/grub2_font.py +337 -0
  88. polyfile/kaitai/parsers/gzip.py +232 -0
  89. polyfile/kaitai/parsers/hashcat_restore.py +60 -0
  90. polyfile/kaitai/parsers/hccap.py +111 -0
  91. polyfile/kaitai/parsers/hccapx.py +103 -0
  92. polyfile/kaitai/parsers/heaps_pak.py +177 -0
  93. polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
  94. polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
  95. polyfile/kaitai/parsers/icmp_packet.py +136 -0
  96. polyfile/kaitai/parsers/ico.py +129 -0
  97. polyfile/kaitai/parsers/id3v1_1.py +220 -0
  98. polyfile/kaitai/parsers/id3v2_3.py +324 -0
  99. polyfile/kaitai/parsers/id3v2_4.py +423 -0
  100. polyfile/kaitai/parsers/ines.py +282 -0
  101. polyfile/kaitai/parsers/ipv4_packet.py +158 -0
  102. polyfile/kaitai/parsers/ipv6_packet.py +55 -0
  103. polyfile/kaitai/parsers/iso9660.py +544 -0
  104. polyfile/kaitai/parsers/java_class.py +1113 -0
  105. polyfile/kaitai/parsers/jpeg.py +361 -0
  106. polyfile/kaitai/parsers/luks.py +149 -0
  107. polyfile/kaitai/parsers/lzh.py +165 -0
  108. polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
  109. polyfile/kaitai/parsers/mach_o.py +3033 -0
  110. polyfile/kaitai/parsers/mach_o_fat.py +92 -0
  111. polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
  112. polyfile/kaitai/parsers/manifest.json +1 -0
  113. polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
  114. polyfile/kaitai/parsers/mcap.py +1015 -0
  115. polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
  116. polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
  117. polyfile/kaitai/parsers/microsoft_pe.py +765 -0
  118. polyfile/kaitai/parsers/mifare_classic.py +706 -0
  119. polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
  120. polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
  121. polyfile/kaitai/parsers/mozilla_mar.py +239 -0
  122. polyfile/kaitai/parsers/mp4.py +333 -0
  123. polyfile/kaitai/parsers/msgpack.py +467 -0
  124. polyfile/kaitai/parsers/nitf.py +1189 -0
  125. polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
  126. polyfile/kaitai/parsers/ogg.py +118 -0
  127. polyfile/kaitai/parsers/openpgp_message.py +993 -0
  128. polyfile/kaitai/parsers/packet_ppi.py +515 -0
  129. polyfile/kaitai/parsers/pcap.py +344 -0
  130. polyfile/kaitai/parsers/pcf_font.py +506 -0
  131. polyfile/kaitai/parsers/pcx.py +195 -0
  132. polyfile/kaitai/parsers/pcx_dcx.py +79 -0
  133. polyfile/kaitai/parsers/phar_without_stub.py +399 -0
  134. polyfile/kaitai/parsers/php_serialized_value.py +505 -0
  135. polyfile/kaitai/parsers/png.py +721 -0
  136. polyfile/kaitai/parsers/protocol_body.py +260 -0
  137. polyfile/kaitai/parsers/psx_tim.py +104 -0
  138. polyfile/kaitai/parsers/python_pickle.py +718 -0
  139. polyfile/kaitai/parsers/python_pyc_27.py +510 -0
  140. polyfile/kaitai/parsers/quake_mdl.py +441 -0
  141. polyfile/kaitai/parsers/quake_pak.py +112 -0
  142. polyfile/kaitai/parsers/quicktime_mov.py +634 -0
  143. polyfile/kaitai/parsers/rar.py +265 -0
  144. polyfile/kaitai/parsers/regf.py +569 -0
  145. polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
  146. polyfile/kaitai/parsers/resource_fork.py +611 -0
  147. polyfile/kaitai/parsers/respack.py +57 -0
  148. polyfile/kaitai/parsers/riff.py +409 -0
  149. polyfile/kaitai/parsers/rpm.py +964 -0
  150. polyfile/kaitai/parsers/rtcp_payload.py +579 -0
  151. polyfile/kaitai/parsers/rtp_packet.py +150 -0
  152. polyfile/kaitai/parsers/rtpdump.py +115 -0
  153. polyfile/kaitai/parsers/ruby_marshal.py +423 -0
  154. polyfile/kaitai/parsers/s3m.py +493 -0
  155. polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
  156. polyfile/kaitai/parsers/shapefile_index.py +174 -0
  157. polyfile/kaitai/parsers/shapefile_main.py +893 -0
  158. polyfile/kaitai/parsers/some_ip.py +209 -0
  159. polyfile/kaitai/parsers/some_ip_container.py +37 -0
  160. polyfile/kaitai/parsers/some_ip_sd.py +86 -0
  161. polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
  162. polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
  163. polyfile/kaitai/parsers/specpr.py +404 -0
  164. polyfile/kaitai/parsers/sqlite3.py +472 -0
  165. polyfile/kaitai/parsers/ssh_public_key.py +252 -0
  166. polyfile/kaitai/parsers/standard_midi_file.py +390 -0
  167. polyfile/kaitai/parsers/stl.py +111 -0
  168. polyfile/kaitai/parsers/sudoers_ts.py +201 -0
  169. polyfile/kaitai/parsers/swf.py +406 -0
  170. polyfile/kaitai/parsers/systemd_journal.py +361 -0
  171. polyfile/kaitai/parsers/tcp_segment.py +57 -0
  172. polyfile/kaitai/parsers/tga.py +213 -0
  173. polyfile/kaitai/parsers/tls_client_hello.py +293 -0
  174. polyfile/kaitai/parsers/tr_dos_image.py +322 -0
  175. polyfile/kaitai/parsers/tsm.py +198 -0
  176. polyfile/kaitai/parsers/ttf.py +1847 -0
  177. polyfile/kaitai/parsers/udp_datagram.py +42 -0
  178. polyfile/kaitai/parsers/uefi_te.py +236 -0
  179. polyfile/kaitai/parsers/uimage.py +198 -0
  180. polyfile/kaitai/parsers/utf8_string.py +137 -0
  181. polyfile/kaitai/parsers/vfat.py +410 -0
  182. polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
  183. polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
  184. polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
  185. polyfile/kaitai/parsers/vp8_ivf.py +112 -0
  186. polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
  187. polyfile/kaitai/parsers/wav.py +1014 -0
  188. polyfile/kaitai/parsers/websocket.py +167 -0
  189. polyfile/kaitai/parsers/windows_evt_log.py +304 -0
  190. polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
  191. polyfile/kaitai/parsers/windows_minidump.py +575 -0
  192. polyfile/kaitai/parsers/windows_resource_file.py +243 -0
  193. polyfile/kaitai/parsers/windows_shell_items.py +190 -0
  194. polyfile/kaitai/parsers/windows_systemtime.py +52 -0
  195. polyfile/kaitai/parsers/wmf.py +502 -0
  196. polyfile/kaitai/parsers/xar.py +181 -0
  197. polyfile/kaitai/parsers/xwd.py +189 -0
  198. polyfile/kaitai/parsers/zip.py +685 -0
  199. polyfile/kaitai/parsers/zisofs.py +158 -0
  200. polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
  201. polyfile/kaitaimatcher.py +113 -0
  202. polyfile/languagematcher.py +217 -0
  203. polyfile/logger.py +135 -0
  204. polyfile/magic.py +2983 -0
  205. polyfile/magic_defs/COPYING +29 -0
  206. polyfile/magic_defs/__init__.py +0 -0
  207. polyfile/magic_defs/acorn +102 -0
  208. polyfile/magic_defs/adi +13 -0
  209. polyfile/magic_defs/adventure +122 -0
  210. polyfile/magic_defs/aes +29 -0
  211. polyfile/magic_defs/algol68 +35 -0
  212. polyfile/magic_defs/allegro +9 -0
  213. polyfile/magic_defs/alliant +18 -0
  214. polyfile/magic_defs/alpha +32 -0
  215. polyfile/magic_defs/amanda +12 -0
  216. polyfile/magic_defs/amigaos +218 -0
  217. polyfile/magic_defs/android +259 -0
  218. polyfile/magic_defs/animation +1197 -0
  219. polyfile/magic_defs/aout +46 -0
  220. polyfile/magic_defs/apache +28 -0
  221. polyfile/magic_defs/apl +7 -0
  222. polyfile/magic_defs/apple +773 -0
  223. polyfile/magic_defs/application +7 -0
  224. polyfile/magic_defs/applix +13 -0
  225. polyfile/magic_defs/apt +52 -0
  226. polyfile/magic_defs/archive +2586 -0
  227. polyfile/magic_defs/aria +38 -0
  228. polyfile/magic_defs/arm +50 -0
  229. polyfile/magic_defs/asf +132 -0
  230. polyfile/magic_defs/assembler +18 -0
  231. polyfile/magic_defs/asterix +18 -0
  232. polyfile/magic_defs/att3b +41 -0
  233. polyfile/magic_defs/audio +1291 -0
  234. polyfile/magic_defs/avm +33 -0
  235. polyfile/magic_defs/basis +18 -0
  236. polyfile/magic_defs/beetle +7 -0
  237. polyfile/magic_defs/ber +65 -0
  238. polyfile/magic_defs/bflt +14 -0
  239. polyfile/magic_defs/bhl +10 -0
  240. polyfile/magic_defs/bioinformatics +178 -0
  241. polyfile/magic_defs/biosig +154 -0
  242. polyfile/magic_defs/blackberry +8 -0
  243. polyfile/magic_defs/blcr +25 -0
  244. polyfile/magic_defs/blender +50 -0
  245. polyfile/magic_defs/blit +24 -0
  246. polyfile/magic_defs/bm +10 -0
  247. polyfile/magic_defs/bout +11 -0
  248. polyfile/magic_defs/bsdi +33 -0
  249. polyfile/magic_defs/bsi +10 -0
  250. polyfile/magic_defs/btsnoop +13 -0
  251. polyfile/magic_defs/burp +7 -0
  252. polyfile/magic_defs/bytecode +41 -0
  253. polyfile/magic_defs/c-lang +110 -0
  254. polyfile/magic_defs/c64 +531 -0
  255. polyfile/magic_defs/cad +437 -0
  256. polyfile/magic_defs/cafebabe +107 -0
  257. polyfile/magic_defs/cbor +21 -0
  258. polyfile/magic_defs/ccf +14 -0
  259. polyfile/magic_defs/cddb +12 -0
  260. polyfile/magic_defs/chord +15 -0
  261. polyfile/magic_defs/cisco +12 -0
  262. polyfile/magic_defs/citrus +12 -0
  263. polyfile/magic_defs/clarion +27 -0
  264. polyfile/magic_defs/claris +48 -0
  265. polyfile/magic_defs/clipper +65 -0
  266. polyfile/magic_defs/clojure +30 -0
  267. polyfile/magic_defs/coff +98 -0
  268. polyfile/magic_defs/commands +201 -0
  269. polyfile/magic_defs/communications +22 -0
  270. polyfile/magic_defs/compress +461 -0
  271. polyfile/magic_defs/console +1213 -0
  272. polyfile/magic_defs/convex +69 -0
  273. polyfile/magic_defs/coverage +91 -0
  274. polyfile/magic_defs/cracklib +14 -0
  275. polyfile/magic_defs/crypto +31 -0
  276. polyfile/magic_defs/csv +8 -0
  277. polyfile/magic_defs/ctags +6 -0
  278. polyfile/magic_defs/ctf +23 -0
  279. polyfile/magic_defs/cubemap +8 -0
  280. polyfile/magic_defs/cups +56 -0
  281. polyfile/magic_defs/dact +11 -0
  282. polyfile/magic_defs/database +886 -0
  283. polyfile/magic_defs/dataone +47 -0
  284. polyfile/magic_defs/dbpf +15 -0
  285. polyfile/magic_defs/der +146 -0
  286. polyfile/magic_defs/diamond +12 -0
  287. polyfile/magic_defs/dif +33 -0
  288. polyfile/magic_defs/diff +41 -0
  289. polyfile/magic_defs/digital +59 -0
  290. polyfile/magic_defs/dolby +69 -0
  291. polyfile/magic_defs/dsf +25 -0
  292. polyfile/magic_defs/dump +96 -0
  293. polyfile/magic_defs/dwarfs +45 -0
  294. polyfile/magic_defs/dyadic +61 -0
  295. polyfile/magic_defs/ebml +8 -0
  296. polyfile/magic_defs/edid +11 -0
  297. polyfile/magic_defs/editors +43 -0
  298. polyfile/magic_defs/efi +15 -0
  299. polyfile/magic_defs/elf +379 -0
  300. polyfile/magic_defs/encore +22 -0
  301. polyfile/magic_defs/epoc +62 -0
  302. polyfile/magic_defs/erlang +21 -0
  303. polyfile/magic_defs/espressif +57 -0
  304. polyfile/magic_defs/esri +28 -0
  305. polyfile/magic_defs/etf +33 -0
  306. polyfile/magic_defs/fcs +9 -0
  307. polyfile/magic_defs/filesystems +2694 -0
  308. polyfile/magic_defs/finger +16 -0
  309. polyfile/magic_defs/firmware +133 -0
  310. polyfile/magic_defs/flash +62 -0
  311. polyfile/magic_defs/flif +36 -0
  312. polyfile/magic_defs/fonts +449 -0
  313. polyfile/magic_defs/forth +82 -0
  314. polyfile/magic_defs/fortran +9 -0
  315. polyfile/magic_defs/frame +62 -0
  316. polyfile/magic_defs/freebsd +164 -0
  317. polyfile/magic_defs/fsav +128 -0
  318. polyfile/magic_defs/fusecompress +12 -0
  319. polyfile/magic_defs/games +696 -0
  320. polyfile/magic_defs/gcc +17 -0
  321. polyfile/magic_defs/gconv +10 -0
  322. polyfile/magic_defs/gentoo +85 -0
  323. polyfile/magic_defs/geo +166 -0
  324. polyfile/magic_defs/geos +20 -0
  325. polyfile/magic_defs/gimp +77 -0
  326. polyfile/magic_defs/git +13 -0
  327. polyfile/magic_defs/glibc +21 -0
  328. polyfile/magic_defs/gnome +59 -0
  329. polyfile/magic_defs/gnu +173 -0
  330. polyfile/magic_defs/gnumeric +8 -0
  331. polyfile/magic_defs/gpt +240 -0
  332. polyfile/magic_defs/gpu +28 -0
  333. polyfile/magic_defs/grace +21 -0
  334. polyfile/magic_defs/graphviz +12 -0
  335. polyfile/magic_defs/gringotts +48 -0
  336. polyfile/magic_defs/guile +13 -0
  337. polyfile/magic_defs/hardware +12 -0
  338. polyfile/magic_defs/hitachi-sh +30 -0
  339. polyfile/magic_defs/hp +433 -0
  340. polyfile/magic_defs/human68k +26 -0
  341. polyfile/magic_defs/ibm370 +52 -0
  342. polyfile/magic_defs/ibm6000 +35 -0
  343. polyfile/magic_defs/icc +214 -0
  344. polyfile/magic_defs/iff +80 -0
  345. polyfile/magic_defs/images +4210 -0
  346. polyfile/magic_defs/inform +9 -0
  347. polyfile/magic_defs/intel +310 -0
  348. polyfile/magic_defs/interleaf +9 -0
  349. polyfile/magic_defs/island +10 -0
  350. polyfile/magic_defs/ispell +63 -0
  351. polyfile/magic_defs/isz +15 -0
  352. polyfile/magic_defs/java +52 -0
  353. polyfile/magic_defs/javascript +171 -0
  354. polyfile/magic_defs/jpeg +252 -0
  355. polyfile/magic_defs/json +8 -0
  356. polyfile/magic_defs/karma +9 -0
  357. polyfile/magic_defs/kde +11 -0
  358. polyfile/magic_defs/keepass +20 -0
  359. polyfile/magic_defs/kerberos +45 -0
  360. polyfile/magic_defs/kicad +85 -0
  361. polyfile/magic_defs/kml +34 -0
  362. polyfile/magic_defs/lammps +64 -0
  363. polyfile/magic_defs/lecter +6 -0
  364. polyfile/magic_defs/lex +12 -0
  365. polyfile/magic_defs/lif +50 -0
  366. polyfile/magic_defs/linux +557 -0
  367. polyfile/magic_defs/lisp +78 -0
  368. polyfile/magic_defs/llvm +22 -0
  369. polyfile/magic_defs/locoscript +12 -0
  370. polyfile/magic_defs/lua +31 -0
  371. polyfile/magic_defs/luks +126 -0
  372. polyfile/magic_defs/m4 +11 -0
  373. polyfile/magic_defs/mach +303 -0
  374. polyfile/magic_defs/macintosh +505 -0
  375. polyfile/magic_defs/macos +7 -0
  376. polyfile/magic_defs/magic +10 -0
  377. polyfile/magic_defs/magic.mgc +0 -0
  378. polyfile/magic_defs/mail.news +132 -0
  379. polyfile/magic_defs/make +21 -0
  380. polyfile/magic_defs/map +413 -0
  381. polyfile/magic_defs/maple +109 -0
  382. polyfile/magic_defs/marc21 +30 -0
  383. polyfile/magic_defs/mathcad +8 -0
  384. polyfile/magic_defs/mathematica +188 -0
  385. polyfile/magic_defs/matroska +17 -0
  386. polyfile/magic_defs/mcrypt +52 -0
  387. polyfile/magic_defs/measure +44 -0
  388. polyfile/magic_defs/mercurial +13 -0
  389. polyfile/magic_defs/metastore +8 -0
  390. polyfile/magic_defs/meteorological +53 -0
  391. polyfile/magic_defs/microfocus +21 -0
  392. polyfile/magic_defs/mime +9 -0
  393. polyfile/magic_defs/mips +120 -0
  394. polyfile/magic_defs/mirage +8 -0
  395. polyfile/magic_defs/misctools +140 -0
  396. polyfile/magic_defs/mkid +11 -0
  397. polyfile/magic_defs/mlssa +8 -0
  398. polyfile/magic_defs/mmdf +6 -0
  399. polyfile/magic_defs/modem +92 -0
  400. polyfile/magic_defs/modulefile +9 -0
  401. polyfile/magic_defs/motorola +71 -0
  402. polyfile/magic_defs/mozilla +37 -0
  403. polyfile/magic_defs/msdos +2304 -0
  404. polyfile/magic_defs/msooxml +68 -0
  405. polyfile/magic_defs/msvc +222 -0
  406. polyfile/magic_defs/msx +309 -0
  407. polyfile/magic_defs/mup +24 -0
  408. polyfile/magic_defs/music +17 -0
  409. polyfile/magic_defs/nasa +7 -0
  410. polyfile/magic_defs/natinst +24 -0
  411. polyfile/magic_defs/ncr +49 -0
  412. polyfile/magic_defs/neko +12 -0
  413. polyfile/magic_defs/netbsd +251 -0
  414. polyfile/magic_defs/netscape +26 -0
  415. polyfile/magic_defs/netware +11 -0
  416. polyfile/magic_defs/news +13 -0
  417. polyfile/magic_defs/nifty +202 -0
  418. polyfile/magic_defs/nim-lang +29 -0
  419. polyfile/magic_defs/nitpicker +14 -0
  420. polyfile/magic_defs/numpy +9 -0
  421. polyfile/magic_defs/oasis +12 -0
  422. polyfile/magic_defs/ocaml +14 -0
  423. polyfile/magic_defs/octave +6 -0
  424. polyfile/magic_defs/ole2compounddocs +760 -0
  425. polyfile/magic_defs/olf +98 -0
  426. polyfile/magic_defs/openfst +17 -0
  427. polyfile/magic_defs/opentimestamps +16 -0
  428. polyfile/magic_defs/oric +16 -0
  429. polyfile/magic_defs/os2 +186 -0
  430. polyfile/magic_defs/os400 +39 -0
  431. polyfile/magic_defs/os9 +80 -0
  432. polyfile/magic_defs/osf1 +10 -0
  433. polyfile/magic_defs/palm +156 -0
  434. polyfile/magic_defs/parix +13 -0
  435. polyfile/magic_defs/parrot +22 -0
  436. polyfile/magic_defs/pascal +39 -0
  437. polyfile/magic_defs/pbf +11 -0
  438. polyfile/magic_defs/pbm +8 -0
  439. polyfile/magic_defs/pc88 +24 -0
  440. polyfile/magic_defs/pc98 +77 -0
  441. polyfile/magic_defs/pci_ids +116 -0
  442. polyfile/magic_defs/pcjr +8 -0
  443. polyfile/magic_defs/pdf +51 -0
  444. polyfile/magic_defs/pdp +42 -0
  445. polyfile/magic_defs/perl +100 -0
  446. polyfile/magic_defs/pgf +52 -0
  447. polyfile/magic_defs/pgp +581 -0
  448. polyfile/magic_defs/pgp-binary-keys +388 -0
  449. polyfile/magic_defs/pkgadd +7 -0
  450. polyfile/magic_defs/plan9 +25 -0
  451. polyfile/magic_defs/playdate +57 -0
  452. polyfile/magic_defs/plus5 +18 -0
  453. polyfile/magic_defs/pmem +46 -0
  454. polyfile/magic_defs/polyfile_zip +5 -0
  455. polyfile/magic_defs/polyml +23 -0
  456. polyfile/magic_defs/printer +269 -0
  457. polyfile/magic_defs/project +10 -0
  458. polyfile/magic_defs/psdbms +14 -0
  459. polyfile/magic_defs/psl +14 -0
  460. polyfile/magic_defs/pulsar +13 -0
  461. polyfile/magic_defs/puzzle +17 -0
  462. polyfile/magic_defs/pwsafe +14 -0
  463. polyfile/magic_defs/pyramid +12 -0
  464. polyfile/magic_defs/python +305 -0
  465. polyfile/magic_defs/qt +30 -0
  466. polyfile/magic_defs/revision +66 -0
  467. polyfile/magic_defs/riff +840 -0
  468. polyfile/magic_defs/rinex +44 -0
  469. polyfile/magic_defs/ringdove +45 -0
  470. polyfile/magic_defs/rpi +52 -0
  471. polyfile/magic_defs/rpm +45 -0
  472. polyfile/magic_defs/rpmsg +7 -0
  473. polyfile/magic_defs/rst +11 -0
  474. polyfile/magic_defs/rtf +94 -0
  475. polyfile/magic_defs/ruby +55 -0
  476. polyfile/magic_defs/rust +21 -0
  477. polyfile/magic_defs/sc +7 -0
  478. polyfile/magic_defs/sccs +24 -0
  479. polyfile/magic_defs/scientific +144 -0
  480. polyfile/magic_defs/securitycerts +6 -0
  481. polyfile/magic_defs/selinux +24 -0
  482. polyfile/magic_defs/sendmail +37 -0
  483. polyfile/magic_defs/sequent +42 -0
  484. polyfile/magic_defs/sereal +35 -0
  485. polyfile/magic_defs/sgi +144 -0
  486. polyfile/magic_defs/sgml +161 -0
  487. polyfile/magic_defs/sharc +23 -0
  488. polyfile/magic_defs/sinclair +40 -0
  489. polyfile/magic_defs/sisu +18 -0
  490. polyfile/magic_defs/sketch +6 -0
  491. polyfile/magic_defs/smalltalk +25 -0
  492. polyfile/magic_defs/smile +34 -0
  493. polyfile/magic_defs/sniffer +482 -0
  494. polyfile/magic_defs/softquad +40 -0
  495. polyfile/magic_defs/sosi +40 -0
  496. polyfile/magic_defs/spec +21 -0
  497. polyfile/magic_defs/spectrum +184 -0
  498. polyfile/magic_defs/sql +288 -0
  499. polyfile/magic_defs/ssh +39 -0
  500. polyfile/magic_defs/ssl +20 -0
  501. polyfile/magic_defs/statistics +45 -0
  502. polyfile/magic_defs/subtitle +38 -0
  503. polyfile/magic_defs/sun +141 -0
  504. polyfile/magic_defs/svf +5 -0
  505. polyfile/magic_defs/sylk +36 -0
  506. polyfile/magic_defs/symbos +42 -0
  507. polyfile/magic_defs/sysex +429 -0
  508. polyfile/magic_defs/tcl +29 -0
  509. polyfile/magic_defs/teapot +6 -0
  510. polyfile/magic_defs/terminfo +63 -0
  511. polyfile/magic_defs/tex +141 -0
  512. polyfile/magic_defs/tgif +7 -0
  513. polyfile/magic_defs/ti-8x +239 -0
  514. polyfile/magic_defs/timezone +42 -0
  515. polyfile/magic_defs/tplink +95 -0
  516. polyfile/magic_defs/troff +38 -0
  517. polyfile/magic_defs/tuxedo +8 -0
  518. polyfile/magic_defs/typeset +8 -0
  519. polyfile/magic_defs/uf2 +72 -0
  520. polyfile/magic_defs/unicode +15 -0
  521. polyfile/magic_defs/unisig +12 -0
  522. polyfile/magic_defs/unknown +34 -0
  523. polyfile/magic_defs/usd +21 -0
  524. polyfile/magic_defs/uterus +16 -0
  525. polyfile/magic_defs/uuencode +28 -0
  526. polyfile/magic_defs/vacuum-cleaner +54 -0
  527. polyfile/magic_defs/varied.out +46 -0
  528. polyfile/magic_defs/varied.script +21 -0
  529. polyfile/magic_defs/vax +32 -0
  530. polyfile/magic_defs/vicar +17 -0
  531. polyfile/magic_defs/virtual +307 -0
  532. polyfile/magic_defs/virtutech +12 -0
  533. polyfile/magic_defs/visx +32 -0
  534. polyfile/magic_defs/vms +30 -0
  535. polyfile/magic_defs/vmware +6 -0
  536. polyfile/magic_defs/vorbis +155 -0
  537. polyfile/magic_defs/vxl +14 -0
  538. polyfile/magic_defs/warc +16 -0
  539. polyfile/magic_defs/weak +16 -0
  540. polyfile/magic_defs/web +18 -0
  541. polyfile/magic_defs/webassembly +17 -0
  542. polyfile/magic_defs/windows +1811 -0
  543. polyfile/magic_defs/wireless +7 -0
  544. polyfile/magic_defs/wordprocessors +630 -0
  545. polyfile/magic_defs/wsdl +23 -0
  546. polyfile/magic_defs/x68000 +25 -0
  547. polyfile/magic_defs/xdelta +13 -0
  548. polyfile/magic_defs/xenix +106 -0
  549. polyfile/magic_defs/xilinx +58 -0
  550. polyfile/magic_defs/xo65 +37 -0
  551. polyfile/magic_defs/xwindows +43 -0
  552. polyfile/magic_defs/yara +17 -0
  553. polyfile/magic_defs/zfs +96 -0
  554. polyfile/magic_defs/zilog +12 -0
  555. polyfile/magic_defs/zip +126 -0
  556. polyfile/magic_defs/zyxel +17 -0
  557. polyfile/nes.py +144 -0
  558. polyfile/nitf.py +15 -0
  559. polyfile/pdf.py +1264 -0
  560. polyfile/pickles.py +45 -0
  561. polyfile/polyfile.py +409 -0
  562. polyfile/profiling.py +115 -0
  563. polyfile/repl.py +624 -0
  564. polyfile/search.py +310 -0
  565. polyfile/serialization.py +323 -0
  566. polyfile/structmatcher.py +46 -0
  567. polyfile/structs.py +281 -0
  568. polyfile/templates/download.js +162 -0
  569. polyfile/templates/hexdump.css +268 -0
  570. polyfile/templates/hexdump.js +756 -0
  571. polyfile/templates/jquery-3.4.1.min.js +2 -0
  572. polyfile/templates/template.html +119 -0
  573. polyfile/wildcards.py +62 -0
  574. polyfile/zipmatcher.py +183 -0
  575. polyfile_weave-0.5.5.dist-info/METADATA +173 -0
  576. polyfile_weave-0.5.5.dist-info/RECORD +585 -0
  577. polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
  578. polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
  579. polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
  580. polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
  581. polymerge/__init__.py +1 -0
  582. polymerge/__main__.py +296 -0
  583. polymerge/cfg.py +127 -0
  584. polymerge/polymerge.py +227 -0
  585. polymerge/polytracker.py +190 -0
@@ -0,0 +1,138 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ from enum import Enum
7
+ import collections
8
+
9
+
10
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
11
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
12
+
13
+ class Au(KaitaiStruct):
14
+ """The NeXT/Sun audio file format.
15
+
16
+ Sample files:
17
+
18
+ * <https://github.com/python/cpython/tree/b8a7daf077da/Lib/test/sndhdrdata>
19
+ * <ftp://ftp-ccrma.stanford.edu/pub/Lisp/sf.tar.gz>
20
+ * <https://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/AU/Samples.html>
21
+
22
+ .. seealso::
23
+ Source - https://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/AU/AU.html
24
+
25
+
26
+ .. seealso::
27
+ Source - http://soundfile.sapp.org/doc/NextFormat/
28
+
29
+
30
+ .. seealso::
31
+ Source - http://soundfile.sapp.org/doc/NextFormat/soundstruct.h
32
+
33
+
34
+ .. seealso::
35
+ Source - https://github.com/andreiw/polaris/blob/deb47cb/usr/src/head/audio/au.h#L87-L112
36
+
37
+
38
+ .. seealso::
39
+ Source - https://github.com/libsndfile/libsndfile/blob/86c9f9eb/src/au.c#L39-L74
40
+
41
+
42
+ .. seealso::
43
+ Source - https://github.com/chirlu/sox/blob/dd8b63bd/src/au.c#L34-L49
44
+
45
+
46
+ .. seealso::
47
+ Source - https://github.com/mpruett/audiofile/blob/b62c902/libaudiofile/NeXT.cpp#L65-L96
48
+ """
49
+
50
+ class Encodings(Enum):
51
+ mulaw_8 = 1
52
+ linear_8 = 2
53
+ linear_16 = 3
54
+ linear_24 = 4
55
+ linear_32 = 5
56
+ float = 6
57
+ double = 7
58
+ fragmented = 8
59
+ nested = 9
60
+ dsp_core = 10
61
+ fixed_point_8 = 11
62
+ fixed_point_16 = 12
63
+ fixed_point_24 = 13
64
+ fixed_point_32 = 14
65
+ display = 16
66
+ mulaw_squelch = 17
67
+ emphasized = 18
68
+ compressed = 19
69
+ compressed_emphasized = 20
70
+ dsp_commands = 21
71
+ dsp_commands_samples = 22
72
+ adpcm_g721 = 23
73
+ adpcm_g722 = 24
74
+ adpcm_g723_3 = 25
75
+ adpcm_g723_5 = 26
76
+ alaw_8 = 27
77
+ aes = 28
78
+ delta_mulaw_8 = 29
79
+ SEQ_FIELDS = ["magic", "ofs_data", "header"]
80
+ def __init__(self, _io, _parent=None, _root=None):
81
+ self._io = _io
82
+ self._parent = _parent
83
+ self._root = _root if _root else self
84
+ self._debug = collections.defaultdict(dict)
85
+
86
+ def _read(self):
87
+ self._debug['magic']['start'] = self._io.pos()
88
+ self.magic = self._io.read_bytes(4)
89
+ self._debug['magic']['end'] = self._io.pos()
90
+ if not self.magic == b"\x2E\x73\x6E\x64":
91
+ raise kaitaistruct.ValidationNotEqualError(b"\x2E\x73\x6E\x64", self.magic, self._io, u"/seq/0")
92
+ self._debug['ofs_data']['start'] = self._io.pos()
93
+ self.ofs_data = self._io.read_u4be()
94
+ self._debug['ofs_data']['end'] = self._io.pos()
95
+ self._debug['header']['start'] = self._io.pos()
96
+ self._raw_header = self._io.read_bytes(((self.ofs_data - 4) - 4))
97
+ _io__raw_header = KaitaiStream(BytesIO(self._raw_header))
98
+ self.header = Au.Header(_io__raw_header, self, self._root)
99
+ self.header._read()
100
+ self._debug['header']['end'] = self._io.pos()
101
+
102
+ class Header(KaitaiStruct):
103
+ SEQ_FIELDS = ["data_size", "encoding", "sample_rate", "num_channels", "comment"]
104
+ def __init__(self, _io, _parent=None, _root=None):
105
+ self._io = _io
106
+ self._parent = _parent
107
+ self._root = _root if _root else self
108
+ self._debug = collections.defaultdict(dict)
109
+
110
+ def _read(self):
111
+ self._debug['data_size']['start'] = self._io.pos()
112
+ self.data_size = self._io.read_u4be()
113
+ self._debug['data_size']['end'] = self._io.pos()
114
+ self._debug['encoding']['start'] = self._io.pos()
115
+ self.encoding = KaitaiStream.resolve_enum(Au.Encodings, self._io.read_u4be())
116
+ self._debug['encoding']['end'] = self._io.pos()
117
+ self._debug['sample_rate']['start'] = self._io.pos()
118
+ self.sample_rate = self._io.read_u4be()
119
+ self._debug['sample_rate']['end'] = self._io.pos()
120
+ self._debug['num_channels']['start'] = self._io.pos()
121
+ self.num_channels = self._io.read_u4be()
122
+ self._debug['num_channels']['end'] = self._io.pos()
123
+ if not self.num_channels >= 1:
124
+ raise kaitaistruct.ValidationLessThanError(1, self.num_channels, self._io, u"/types/header/seq/3")
125
+ self._debug['comment']['start'] = self._io.pos()
126
+ self.comment = (KaitaiStream.bytes_terminate(self._io.read_bytes_full(), 0, False)).decode(u"ASCII")
127
+ self._debug['comment']['end'] = self._io.pos()
128
+
129
+
130
+ @property
131
+ def len_data(self):
132
+ if hasattr(self, '_m_len_data'):
133
+ return self._m_len_data if hasattr(self, '_m_len_data') else None
134
+
135
+ self._m_len_data = ((self._io.size() - self.ofs_data) if self.header.data_size == 4294967295 else self.header.data_size)
136
+ return self._m_len_data if hasattr(self, '_m_len_data') else None
137
+
138
+
@@ -0,0 +1,112 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ import collections
7
+
8
+
9
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
10
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
11
+
12
+ class AvantesRoh60(KaitaiStruct):
13
+ """Avantes USB spectrometers are supplied with a Windows binary which
14
+ generates one ROH and one RCM file when the user clicks "Save
15
+ experiment". In the version of 6.0, the ROH file contains a header
16
+ of 22 four-byte floats, then the spectrum as a float array and a
17
+ footer of 3 floats. The first and last pixel numbers are specified in the
18
+ header and determine the (length+1) of the spectral data. In the tested
19
+ files, the length is (2032-211-1)=1820 pixels, but Kaitai determines this
20
+ automatically anyway.
21
+
22
+ The wavelength calibration is stored as a polynomial with coefficients
23
+ of 'wlintercept', 'wlx1', ... 'wlx4', the argument of which is the
24
+ (pixel number + 1), as found out by comparing with the original
25
+ Avantes converted data files. There is no intensity calibration saved,
26
+ but it is recommended to do it in your program - the CCD in the spectrometer
27
+ is so uneven that one should prepare exact pixel-to-pixel calibration curves
28
+ to get reasonable spectral results.
29
+
30
+ The rest of the header floats is not known to the author. Note that the
31
+ newer version of Avantes software has a different format, see also
32
+ <https://www.mathworks.com/matlabcentral/fileexchange/37103-avantes-to-matlab>
33
+
34
+ The RCM file contains the user-specified comment, so it may be useful
35
+ for automatic conversion of data. You may wish to divide the spectra by
36
+ the integration time before comparing them.
37
+
38
+ Written and tested by Filip Dominec, 2017-2018
39
+ """
40
+ SEQ_FIELDS = ["unknown1", "wlintercept", "wlx1", "wlx2", "wlx3", "wlx4", "unknown2", "ipixfirst", "ipixlast", "unknown3", "spectrum", "integration_ms", "averaging", "pixel_smoothing"]
41
+ def __init__(self, _io, _parent=None, _root=None):
42
+ self._io = _io
43
+ self._parent = _parent
44
+ self._root = _root if _root else self
45
+ self._debug = collections.defaultdict(dict)
46
+
47
+ def _read(self):
48
+ self._debug['unknown1']['start'] = self._io.pos()
49
+ self.unknown1 = self._io.read_f4le()
50
+ self._debug['unknown1']['end'] = self._io.pos()
51
+ self._debug['wlintercept']['start'] = self._io.pos()
52
+ self.wlintercept = self._io.read_f4le()
53
+ self._debug['wlintercept']['end'] = self._io.pos()
54
+ self._debug['wlx1']['start'] = self._io.pos()
55
+ self.wlx1 = self._io.read_f4le()
56
+ self._debug['wlx1']['end'] = self._io.pos()
57
+ self._debug['wlx2']['start'] = self._io.pos()
58
+ self.wlx2 = self._io.read_f4le()
59
+ self._debug['wlx2']['end'] = self._io.pos()
60
+ self._debug['wlx3']['start'] = self._io.pos()
61
+ self.wlx3 = self._io.read_f4le()
62
+ self._debug['wlx3']['end'] = self._io.pos()
63
+ self._debug['wlx4']['start'] = self._io.pos()
64
+ self.wlx4 = self._io.read_f4le()
65
+ self._debug['wlx4']['end'] = self._io.pos()
66
+ self._debug['unknown2']['start'] = self._io.pos()
67
+ self.unknown2 = [None] * (9)
68
+ for i in range(9):
69
+ if not 'arr' in self._debug['unknown2']:
70
+ self._debug['unknown2']['arr'] = []
71
+ self._debug['unknown2']['arr'].append({'start': self._io.pos()})
72
+ self.unknown2[i] = self._io.read_f4le()
73
+ self._debug['unknown2']['arr'][i]['end'] = self._io.pos()
74
+
75
+ self._debug['unknown2']['end'] = self._io.pos()
76
+ self._debug['ipixfirst']['start'] = self._io.pos()
77
+ self.ipixfirst = self._io.read_f4le()
78
+ self._debug['ipixfirst']['end'] = self._io.pos()
79
+ self._debug['ipixlast']['start'] = self._io.pos()
80
+ self.ipixlast = self._io.read_f4le()
81
+ self._debug['ipixlast']['end'] = self._io.pos()
82
+ self._debug['unknown3']['start'] = self._io.pos()
83
+ self.unknown3 = [None] * (4)
84
+ for i in range(4):
85
+ if not 'arr' in self._debug['unknown3']:
86
+ self._debug['unknown3']['arr'] = []
87
+ self._debug['unknown3']['arr'].append({'start': self._io.pos()})
88
+ self.unknown3[i] = self._io.read_f4le()
89
+ self._debug['unknown3']['arr'][i]['end'] = self._io.pos()
90
+
91
+ self._debug['unknown3']['end'] = self._io.pos()
92
+ self._debug['spectrum']['start'] = self._io.pos()
93
+ self.spectrum = [None] * (((int(self.ipixlast) - int(self.ipixfirst)) - 1))
94
+ for i in range(((int(self.ipixlast) - int(self.ipixfirst)) - 1)):
95
+ if not 'arr' in self._debug['spectrum']:
96
+ self._debug['spectrum']['arr'] = []
97
+ self._debug['spectrum']['arr'].append({'start': self._io.pos()})
98
+ self.spectrum[i] = self._io.read_f4le()
99
+ self._debug['spectrum']['arr'][i]['end'] = self._io.pos()
100
+
101
+ self._debug['spectrum']['end'] = self._io.pos()
102
+ self._debug['integration_ms']['start'] = self._io.pos()
103
+ self.integration_ms = self._io.read_f4le()
104
+ self._debug['integration_ms']['end'] = self._io.pos()
105
+ self._debug['averaging']['start'] = self._io.pos()
106
+ self.averaging = self._io.read_f4le()
107
+ self._debug['averaging']['end'] = self._io.pos()
108
+ self._debug['pixel_smoothing']['start'] = self._io.pos()
109
+ self.pixel_smoothing = self._io.read_f4le()
110
+ self._debug['pixel_smoothing']['end'] = self._io.pos()
111
+
112
+
@@ -0,0 +1,296 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ from enum import Enum
7
+ import collections
8
+
9
+
10
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
11
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
12
+
13
+ class Avi(KaitaiStruct):
14
+ """
15
+ .. seealso::
16
+ Source - https://learn.microsoft.com/en-us/previous-versions/ms779636(v=vs.85)
17
+ """
18
+
19
+ class ChunkType(Enum):
20
+ idx1 = 829973609
21
+ junk = 1263424842
22
+ info = 1330007625
23
+ isft = 1413894985
24
+ list = 1414744396
25
+ strf = 1718776947
26
+ avih = 1751742049
27
+ strh = 1752331379
28
+ movi = 1769369453
29
+ hdrl = 1819436136
30
+ strl = 1819440243
31
+
32
+ class StreamType(Enum):
33
+ mids = 1935960429
34
+ vids = 1935960438
35
+ auds = 1935963489
36
+ txts = 1937012852
37
+
38
+ class HandlerType(Enum):
39
+ mp3 = 85
40
+ ac3 = 8192
41
+ dts = 8193
42
+ cvid = 1684633187
43
+ xvid = 1684633208
44
+ SEQ_FIELDS = ["magic1", "file_size", "magic2", "data"]
45
+ def __init__(self, _io, _parent=None, _root=None):
46
+ self._io = _io
47
+ self._parent = _parent
48
+ self._root = _root if _root else self
49
+ self._debug = collections.defaultdict(dict)
50
+
51
+ def _read(self):
52
+ self._debug['magic1']['start'] = self._io.pos()
53
+ self.magic1 = self._io.read_bytes(4)
54
+ self._debug['magic1']['end'] = self._io.pos()
55
+ if not self.magic1 == b"\x52\x49\x46\x46":
56
+ raise kaitaistruct.ValidationNotEqualError(b"\x52\x49\x46\x46", self.magic1, self._io, u"/seq/0")
57
+ self._debug['file_size']['start'] = self._io.pos()
58
+ self.file_size = self._io.read_u4le()
59
+ self._debug['file_size']['end'] = self._io.pos()
60
+ self._debug['magic2']['start'] = self._io.pos()
61
+ self.magic2 = self._io.read_bytes(4)
62
+ self._debug['magic2']['end'] = self._io.pos()
63
+ if not self.magic2 == b"\x41\x56\x49\x20":
64
+ raise kaitaistruct.ValidationNotEqualError(b"\x41\x56\x49\x20", self.magic2, self._io, u"/seq/2")
65
+ self._debug['data']['start'] = self._io.pos()
66
+ self._raw_data = self._io.read_bytes((self.file_size - 4))
67
+ _io__raw_data = KaitaiStream(BytesIO(self._raw_data))
68
+ self.data = Avi.Blocks(_io__raw_data, self, self._root)
69
+ self.data._read()
70
+ self._debug['data']['end'] = self._io.pos()
71
+
72
+ class ListBody(KaitaiStruct):
73
+ SEQ_FIELDS = ["list_type", "data"]
74
+ def __init__(self, _io, _parent=None, _root=None):
75
+ self._io = _io
76
+ self._parent = _parent
77
+ self._root = _root if _root else self
78
+ self._debug = collections.defaultdict(dict)
79
+
80
+ def _read(self):
81
+ self._debug['list_type']['start'] = self._io.pos()
82
+ self.list_type = KaitaiStream.resolve_enum(Avi.ChunkType, self._io.read_u4le())
83
+ self._debug['list_type']['end'] = self._io.pos()
84
+ self._debug['data']['start'] = self._io.pos()
85
+ self.data = Avi.Blocks(self._io, self, self._root)
86
+ self.data._read()
87
+ self._debug['data']['end'] = self._io.pos()
88
+
89
+
90
+ class Rect(KaitaiStruct):
91
+ SEQ_FIELDS = ["left", "top", "right", "bottom"]
92
+ def __init__(self, _io, _parent=None, _root=None):
93
+ self._io = _io
94
+ self._parent = _parent
95
+ self._root = _root if _root else self
96
+ self._debug = collections.defaultdict(dict)
97
+
98
+ def _read(self):
99
+ self._debug['left']['start'] = self._io.pos()
100
+ self.left = self._io.read_s2le()
101
+ self._debug['left']['end'] = self._io.pos()
102
+ self._debug['top']['start'] = self._io.pos()
103
+ self.top = self._io.read_s2le()
104
+ self._debug['top']['end'] = self._io.pos()
105
+ self._debug['right']['start'] = self._io.pos()
106
+ self.right = self._io.read_s2le()
107
+ self._debug['right']['end'] = self._io.pos()
108
+ self._debug['bottom']['start'] = self._io.pos()
109
+ self.bottom = self._io.read_s2le()
110
+ self._debug['bottom']['end'] = self._io.pos()
111
+
112
+
113
+ class Blocks(KaitaiStruct):
114
+ SEQ_FIELDS = ["entries"]
115
+ def __init__(self, _io, _parent=None, _root=None):
116
+ self._io = _io
117
+ self._parent = _parent
118
+ self._root = _root if _root else self
119
+ self._debug = collections.defaultdict(dict)
120
+
121
+ def _read(self):
122
+ self._debug['entries']['start'] = self._io.pos()
123
+ self.entries = []
124
+ i = 0
125
+ while not self._io.is_eof():
126
+ if not 'arr' in self._debug['entries']:
127
+ self._debug['entries']['arr'] = []
128
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
129
+ _t_entries = Avi.Block(self._io, self, self._root)
130
+ _t_entries._read()
131
+ self.entries.append(_t_entries)
132
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
133
+ i += 1
134
+
135
+ self._debug['entries']['end'] = self._io.pos()
136
+
137
+
138
+ class AvihBody(KaitaiStruct):
139
+ """Main header of an AVI file, defined as AVIMAINHEADER structure.
140
+
141
+ .. seealso::
142
+ Source - https://learn.microsoft.com/en-us/previous-versions/ms779632(v=vs.85)
143
+ """
144
+ SEQ_FIELDS = ["micro_sec_per_frame", "max_bytes_per_sec", "padding_granularity", "flags", "total_frames", "initial_frames", "streams", "suggested_buffer_size", "width", "height", "reserved"]
145
+ def __init__(self, _io, _parent=None, _root=None):
146
+ self._io = _io
147
+ self._parent = _parent
148
+ self._root = _root if _root else self
149
+ self._debug = collections.defaultdict(dict)
150
+
151
+ def _read(self):
152
+ self._debug['micro_sec_per_frame']['start'] = self._io.pos()
153
+ self.micro_sec_per_frame = self._io.read_u4le()
154
+ self._debug['micro_sec_per_frame']['end'] = self._io.pos()
155
+ self._debug['max_bytes_per_sec']['start'] = self._io.pos()
156
+ self.max_bytes_per_sec = self._io.read_u4le()
157
+ self._debug['max_bytes_per_sec']['end'] = self._io.pos()
158
+ self._debug['padding_granularity']['start'] = self._io.pos()
159
+ self.padding_granularity = self._io.read_u4le()
160
+ self._debug['padding_granularity']['end'] = self._io.pos()
161
+ self._debug['flags']['start'] = self._io.pos()
162
+ self.flags = self._io.read_u4le()
163
+ self._debug['flags']['end'] = self._io.pos()
164
+ self._debug['total_frames']['start'] = self._io.pos()
165
+ self.total_frames = self._io.read_u4le()
166
+ self._debug['total_frames']['end'] = self._io.pos()
167
+ self._debug['initial_frames']['start'] = self._io.pos()
168
+ self.initial_frames = self._io.read_u4le()
169
+ self._debug['initial_frames']['end'] = self._io.pos()
170
+ self._debug['streams']['start'] = self._io.pos()
171
+ self.streams = self._io.read_u4le()
172
+ self._debug['streams']['end'] = self._io.pos()
173
+ self._debug['suggested_buffer_size']['start'] = self._io.pos()
174
+ self.suggested_buffer_size = self._io.read_u4le()
175
+ self._debug['suggested_buffer_size']['end'] = self._io.pos()
176
+ self._debug['width']['start'] = self._io.pos()
177
+ self.width = self._io.read_u4le()
178
+ self._debug['width']['end'] = self._io.pos()
179
+ self._debug['height']['start'] = self._io.pos()
180
+ self.height = self._io.read_u4le()
181
+ self._debug['height']['end'] = self._io.pos()
182
+ self._debug['reserved']['start'] = self._io.pos()
183
+ self.reserved = self._io.read_bytes(16)
184
+ self._debug['reserved']['end'] = self._io.pos()
185
+
186
+
187
+ class Block(KaitaiStruct):
188
+ SEQ_FIELDS = ["four_cc", "block_size", "data"]
189
+ def __init__(self, _io, _parent=None, _root=None):
190
+ self._io = _io
191
+ self._parent = _parent
192
+ self._root = _root if _root else self
193
+ self._debug = collections.defaultdict(dict)
194
+
195
+ def _read(self):
196
+ self._debug['four_cc']['start'] = self._io.pos()
197
+ self.four_cc = KaitaiStream.resolve_enum(Avi.ChunkType, self._io.read_u4le())
198
+ self._debug['four_cc']['end'] = self._io.pos()
199
+ self._debug['block_size']['start'] = self._io.pos()
200
+ self.block_size = self._io.read_u4le()
201
+ self._debug['block_size']['end'] = self._io.pos()
202
+ self._debug['data']['start'] = self._io.pos()
203
+ _on = self.four_cc
204
+ if _on == Avi.ChunkType.list:
205
+ self._raw_data = self._io.read_bytes(self.block_size)
206
+ _io__raw_data = KaitaiStream(BytesIO(self._raw_data))
207
+ self.data = Avi.ListBody(_io__raw_data, self, self._root)
208
+ self.data._read()
209
+ elif _on == Avi.ChunkType.avih:
210
+ self._raw_data = self._io.read_bytes(self.block_size)
211
+ _io__raw_data = KaitaiStream(BytesIO(self._raw_data))
212
+ self.data = Avi.AvihBody(_io__raw_data, self, self._root)
213
+ self.data._read()
214
+ elif _on == Avi.ChunkType.strh:
215
+ self._raw_data = self._io.read_bytes(self.block_size)
216
+ _io__raw_data = KaitaiStream(BytesIO(self._raw_data))
217
+ self.data = Avi.StrhBody(_io__raw_data, self, self._root)
218
+ self.data._read()
219
+ else:
220
+ self.data = self._io.read_bytes(self.block_size)
221
+ self._debug['data']['end'] = self._io.pos()
222
+
223
+
224
+ class StrhBody(KaitaiStruct):
225
+ """Stream header (one header per stream), defined as AVISTREAMHEADER structure.
226
+
227
+ .. seealso::
228
+ Source - https://learn.microsoft.com/en-us/previous-versions/ms779638(v=vs.85)
229
+ """
230
+ SEQ_FIELDS = ["fcc_type", "fcc_handler", "flags", "priority", "language", "initial_frames", "scale", "rate", "start", "length", "suggested_buffer_size", "quality", "sample_size", "frame"]
231
+ def __init__(self, _io, _parent=None, _root=None):
232
+ self._io = _io
233
+ self._parent = _parent
234
+ self._root = _root if _root else self
235
+ self._debug = collections.defaultdict(dict)
236
+
237
+ def _read(self):
238
+ self._debug['fcc_type']['start'] = self._io.pos()
239
+ self.fcc_type = KaitaiStream.resolve_enum(Avi.StreamType, self._io.read_u4le())
240
+ self._debug['fcc_type']['end'] = self._io.pos()
241
+ self._debug['fcc_handler']['start'] = self._io.pos()
242
+ self.fcc_handler = KaitaiStream.resolve_enum(Avi.HandlerType, self._io.read_u4le())
243
+ self._debug['fcc_handler']['end'] = self._io.pos()
244
+ self._debug['flags']['start'] = self._io.pos()
245
+ self.flags = self._io.read_u4le()
246
+ self._debug['flags']['end'] = self._io.pos()
247
+ self._debug['priority']['start'] = self._io.pos()
248
+ self.priority = self._io.read_u2le()
249
+ self._debug['priority']['end'] = self._io.pos()
250
+ self._debug['language']['start'] = self._io.pos()
251
+ self.language = self._io.read_u2le()
252
+ self._debug['language']['end'] = self._io.pos()
253
+ self._debug['initial_frames']['start'] = self._io.pos()
254
+ self.initial_frames = self._io.read_u4le()
255
+ self._debug['initial_frames']['end'] = self._io.pos()
256
+ self._debug['scale']['start'] = self._io.pos()
257
+ self.scale = self._io.read_u4le()
258
+ self._debug['scale']['end'] = self._io.pos()
259
+ self._debug['rate']['start'] = self._io.pos()
260
+ self.rate = self._io.read_u4le()
261
+ self._debug['rate']['end'] = self._io.pos()
262
+ self._debug['start']['start'] = self._io.pos()
263
+ self.start = self._io.read_u4le()
264
+ self._debug['start']['end'] = self._io.pos()
265
+ self._debug['length']['start'] = self._io.pos()
266
+ self.length = self._io.read_u4le()
267
+ self._debug['length']['end'] = self._io.pos()
268
+ self._debug['suggested_buffer_size']['start'] = self._io.pos()
269
+ self.suggested_buffer_size = self._io.read_u4le()
270
+ self._debug['suggested_buffer_size']['end'] = self._io.pos()
271
+ self._debug['quality']['start'] = self._io.pos()
272
+ self.quality = self._io.read_u4le()
273
+ self._debug['quality']['end'] = self._io.pos()
274
+ self._debug['sample_size']['start'] = self._io.pos()
275
+ self.sample_size = self._io.read_u4le()
276
+ self._debug['sample_size']['end'] = self._io.pos()
277
+ self._debug['frame']['start'] = self._io.pos()
278
+ self.frame = Avi.Rect(self._io, self, self._root)
279
+ self.frame._read()
280
+ self._debug['frame']['end'] = self._io.pos()
281
+
282
+
283
+ class StrfBody(KaitaiStruct):
284
+ """Stream format description."""
285
+ SEQ_FIELDS = []
286
+ def __init__(self, _io, _parent=None, _root=None):
287
+ self._io = _io
288
+ self._parent = _parent
289
+ self._root = _root if _root else self
290
+ self._debug = collections.defaultdict(dict)
291
+
292
+ def _read(self):
293
+ pass
294
+
295
+
296
+
@@ -0,0 +1,111 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ import collections
7
+
8
+
9
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
10
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
11
+
12
+ class Bcd(KaitaiStruct):
13
+ """BCD (Binary Coded Decimals) is a common way to encode integer
14
+ numbers in a way that makes human-readable output somewhat
15
+ simpler. In this encoding scheme, every decimal digit is encoded as
16
+ either a single byte (8 bits), or a nibble (half of a byte, 4
17
+ bits). This obviously wastes a lot of bits, but it makes translation
18
+ into human-readable string much easier than traditional
19
+ binary-to-decimal conversion process, which includes lots of
20
+ divisions by 10.
21
+
22
+ For example, encoding integer 31337 in 8-digit, 8 bits per digit,
23
+ big endian order of digits BCD format yields
24
+
25
+ ```
26
+ 00 00 00 03 01 03 03 07
27
+ ```
28
+
29
+ Encoding the same integer as 8-digit, 4 bits per digit, little
30
+ endian order BCD format would yield:
31
+
32
+ ```
33
+ 73 31 30 00
34
+ ```
35
+
36
+ Using this type of encoding in Kaitai Struct is pretty
37
+ straightforward: one calls for this type, specifying desired
38
+ encoding parameters, and gets result using either `as_int` or
39
+ `as_str` attributes.
40
+ """
41
+ SEQ_FIELDS = ["digits"]
42
+ def __init__(self, num_digits, bits_per_digit, is_le, _io, _parent=None, _root=None):
43
+ self._io = _io
44
+ self._parent = _parent
45
+ self._root = _root if _root else self
46
+ self.num_digits = num_digits
47
+ self.bits_per_digit = bits_per_digit
48
+ self.is_le = is_le
49
+ self._debug = collections.defaultdict(dict)
50
+
51
+ def _read(self):
52
+ self._debug['digits']['start'] = self._io.pos()
53
+ self.digits = [None] * (self.num_digits)
54
+ for i in range(self.num_digits):
55
+ if not 'arr' in self._debug['digits']:
56
+ self._debug['digits']['arr'] = []
57
+ self._debug['digits']['arr'].append({'start': self._io.pos()})
58
+ _on = self.bits_per_digit
59
+ if _on == 4:
60
+ if not 'arr' in self._debug['digits']:
61
+ self._debug['digits']['arr'] = []
62
+ self._debug['digits']['arr'].append({'start': self._io.pos()})
63
+ self.digits[i] = self._io.read_bits_int_be(4)
64
+ self._debug['digits']['arr'][i]['end'] = self._io.pos()
65
+ elif _on == 8:
66
+ if not 'arr' in self._debug['digits']:
67
+ self._debug['digits']['arr'] = []
68
+ self._debug['digits']['arr'].append({'start': self._io.pos()})
69
+ self.digits[i] = self._io.read_u1()
70
+ self._debug['digits']['arr'][i]['end'] = self._io.pos()
71
+ self._debug['digits']['arr'][i]['end'] = self._io.pos()
72
+
73
+ self._debug['digits']['end'] = self._io.pos()
74
+
75
+ @property
76
+ def as_int(self):
77
+ """Value of this BCD number as integer. Endianness would be selected based on `is_le` parameter given."""
78
+ if hasattr(self, '_m_as_int'):
79
+ return self._m_as_int if hasattr(self, '_m_as_int') else None
80
+
81
+ self._m_as_int = (self.as_int_le if self.is_le else self.as_int_be)
82
+ return self._m_as_int if hasattr(self, '_m_as_int') else None
83
+
84
+ @property
85
+ def as_int_le(self):
86
+ """Value of this BCD number as integer (treating digit order as little-endian)."""
87
+ if hasattr(self, '_m_as_int_le'):
88
+ return self._m_as_int_le if hasattr(self, '_m_as_int_le') else None
89
+
90
+ self._m_as_int_le = (self.digits[0] + (0 if self.num_digits < 2 else ((self.digits[1] * 10) + (0 if self.num_digits < 3 else ((self.digits[2] * 100) + (0 if self.num_digits < 4 else ((self.digits[3] * 1000) + (0 if self.num_digits < 5 else ((self.digits[4] * 10000) + (0 if self.num_digits < 6 else ((self.digits[5] * 100000) + (0 if self.num_digits < 7 else ((self.digits[6] * 1000000) + (0 if self.num_digits < 8 else (self.digits[7] * 10000000)))))))))))))))
91
+ return self._m_as_int_le if hasattr(self, '_m_as_int_le') else None
92
+
93
+ @property
94
+ def last_idx(self):
95
+ """Index of last digit (0-based)."""
96
+ if hasattr(self, '_m_last_idx'):
97
+ return self._m_last_idx if hasattr(self, '_m_last_idx') else None
98
+
99
+ self._m_last_idx = (self.num_digits - 1)
100
+ return self._m_last_idx if hasattr(self, '_m_last_idx') else None
101
+
102
+ @property
103
+ def as_int_be(self):
104
+ """Value of this BCD number as integer (treating digit order as big-endian)."""
105
+ if hasattr(self, '_m_as_int_be'):
106
+ return self._m_as_int_be if hasattr(self, '_m_as_int_be') else None
107
+
108
+ self._m_as_int_be = (self.digits[self.last_idx] + (0 if self.num_digits < 2 else ((self.digits[(self.last_idx - 1)] * 10) + (0 if self.num_digits < 3 else ((self.digits[(self.last_idx - 2)] * 100) + (0 if self.num_digits < 4 else ((self.digits[(self.last_idx - 3)] * 1000) + (0 if self.num_digits < 5 else ((self.digits[(self.last_idx - 4)] * 10000) + (0 if self.num_digits < 6 else ((self.digits[(self.last_idx - 5)] * 100000) + (0 if self.num_digits < 7 else ((self.digits[(self.last_idx - 6)] * 1000000) + (0 if self.num_digits < 8 else (self.digits[(self.last_idx - 7)] * 10000000)))))))))))))))
109
+ return self._m_as_int_be if hasattr(self, '_m_as_int_be') else None
110
+
111
+