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,780 @@
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 Bmp(KaitaiStruct):
14
+ """The **BMP file format**, also known as **bitmap image file** or **device independent
15
+ bitmap (DIB) file format** or simply a **bitmap**, is a raster graphics image file
16
+ format used to store bitmap digital images, independently of the display
17
+ device (such as a graphics adapter), especially on Microsoft Windows
18
+ and OS/2 operating systems.
19
+
20
+ ## Samples
21
+
22
+ Great collection of various BMP sample files:
23
+ [**BMP Suite Image List**](
24
+ http://entropymine.com/jason/bmpsuite/bmpsuite/html/bmpsuite.html
25
+ ) (by Jason Summers)
26
+
27
+ If only there was such a comprehensive sample suite for every file format! It's like
28
+ a dream for every developer of any binary file format parser. It contains a lot of
29
+ different types and variations of BMP files, even the tricky ones, where it's not clear
30
+ from the specification how to deal with them (marked there as "**q**uestionable").
31
+
32
+ If you make a program which will be able to read all the "**g**ood" and "**q**uestionable"
33
+ BMP files and won't crash on the "**b**ad" ones, it will definitely have one of the most
34
+ extensive support of BMP files in the universe!
35
+
36
+ ## BITMAPV2INFOHEADER and BITMAPV3INFOHEADER
37
+
38
+ A beneficial discussion on Adobe forum (archived):
39
+ [**Invalid BMP Format with Alpha channel**](
40
+ https://web.archive.org/web/20150127132443/https://forums.adobe.com/message/3272950
41
+ )
42
+
43
+ In 2010, someone noticed that Photoshop generated BMP with an odd type of header. There wasn't
44
+ any documentation available for this header at the time (and still isn't).
45
+ However, Chris Cox (former Adobe employee) claimed that they hadn't invented any type
46
+ of proprietary header and everything they were writing was taken directly
47
+ from the Microsoft documentation.
48
+
49
+ It showed up that the unknown header was called BITMAPV3INFOHEADER.
50
+ Although Microsoft has apparently requested and verified the use of the header,
51
+ the documentation on MSDN has probably got lost and they have probably
52
+ forgotten about this type of header.
53
+
54
+ This is the only source I could find about these structures, so we could't rely
55
+ on it so much, but I think supporting them as a read-only format won't harm anything.
56
+ Due to the fact that it isn't documented anywhere else, most applications don't support it.
57
+
58
+ All Windows headers at once (including mentioned BITMAPV2INFOHEADER and BITMAPV3INFOHEADER):
59
+
60
+ ![Bitmap headers overview](
61
+ https://web.archive.org/web/20190527043845/https://forums.adobe.com/servlet/JiveServlet/showImage/2-3273299-47801/BMP_Headers.png
62
+ )
63
+
64
+ ## Specs
65
+ * [Bitmap Storage (Windows Dev Center)](
66
+ https://learn.microsoft.com/en-us/windows/win32/gdi/bitmap-storage
67
+ )
68
+ * BITMAPFILEHEADER
69
+ * BITMAPINFOHEADER
70
+ * BITMAPV4HEADER
71
+ * BITMAPV5HEADER
72
+ * [OS/2 Bitmap File Format](
73
+ https://www.fileformat.info/format/os2bmp/egff.htm
74
+ )
75
+ * BITMAPFILEHEADER (OS2BMPFILEHEADER)
76
+ * BITMAPCOREHEADER (OS21XBITMAPHEADER)
77
+ * OS22XBITMAPHEADER
78
+ * [Microsoft Windows Bitmap](
79
+ http://netghost.narod.ru/gff/graphics/summary/micbmp.htm
80
+ )
81
+ * BITMAPFILEHEADER (WINBMPFILEHEADER)
82
+ * BITMAPCOREHEADER (WIN2XBITMAPHEADER)
83
+ * BITMAPINFOHEADER (WINNTBITMAPHEADER)
84
+ * BITMAPV4HEADER (WIN4XBITMAPHEADER)
85
+ """
86
+
87
+ class Intent(Enum):
88
+ business = 1
89
+ graphics = 2
90
+ images = 4
91
+ abs_colorimetric = 8
92
+
93
+ class ColorSpace(Enum):
94
+ calibrated_rgb = 0
95
+ profile_linked = 1279872587
96
+ profile_embedded = 1296188740
97
+ windows = 1466527264
98
+ s_rgb = 1934772034
99
+
100
+ class Os2Rendering(Enum):
101
+ no_halftoning = 0
102
+ error_diffusion = 1
103
+ panda = 2
104
+ super_circle = 3
105
+
106
+ class HeaderType(Enum):
107
+ bitmap_core_header = 12
108
+ bitmap_info_header = 40
109
+ bitmap_v2_info_header = 52
110
+ bitmap_v3_info_header = 56
111
+ os2_2x_bitmap_header = 64
112
+ bitmap_v4_header = 108
113
+ bitmap_v5_header = 124
114
+
115
+ class Compressions(Enum):
116
+ rgb = 0
117
+ rle8 = 1
118
+ rle4 = 2
119
+ bitfields = 3
120
+ jpeg = 4
121
+ png = 5
122
+ alpha_bitfields = 6
123
+
124
+ class Os2Compressions(Enum):
125
+ rgb = 0
126
+ rle8 = 1
127
+ rle4 = 2
128
+ huffman_1d = 3
129
+ rle24 = 4
130
+ SEQ_FIELDS = ["file_hdr", "dib_info", "bitmap"]
131
+ def __init__(self, _io, _parent=None, _root=None):
132
+ self._io = _io
133
+ self._parent = _parent
134
+ self._root = _root if _root else self
135
+ self._debug = collections.defaultdict(dict)
136
+
137
+ def _read(self):
138
+ self._debug['file_hdr']['start'] = self._io.pos()
139
+ self.file_hdr = Bmp.FileHeader(self._io, self, self._root)
140
+ self.file_hdr._read()
141
+ self._debug['file_hdr']['end'] = self._io.pos()
142
+ self._debug['dib_info']['start'] = self._io.pos()
143
+ self._raw_dib_info = self._io.read_bytes((self.file_hdr.ofs_bitmap - 14))
144
+ _io__raw_dib_info = KaitaiStream(BytesIO(self._raw_dib_info))
145
+ self.dib_info = Bmp.BitmapInfo(_io__raw_dib_info, self, self._root)
146
+ self.dib_info._read()
147
+ self._debug['dib_info']['end'] = self._io.pos()
148
+ self._debug['bitmap']['start'] = self._io.pos()
149
+ self._raw_bitmap = self._io.read_bytes_full()
150
+ _io__raw_bitmap = KaitaiStream(BytesIO(self._raw_bitmap))
151
+ self.bitmap = Bmp.Bitmap(_io__raw_bitmap, self, self._root)
152
+ self.bitmap._read()
153
+ self._debug['bitmap']['end'] = self._io.pos()
154
+
155
+ class CieXyz(KaitaiStruct):
156
+ """
157
+ .. seealso::
158
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-ciexyz
159
+ """
160
+ SEQ_FIELDS = ["x", "y", "z"]
161
+ def __init__(self, _io, _parent=None, _root=None):
162
+ self._io = _io
163
+ self._parent = _parent
164
+ self._root = _root if _root else self
165
+ self._debug = collections.defaultdict(dict)
166
+
167
+ def _read(self):
168
+ self._debug['x']['start'] = self._io.pos()
169
+ self.x = Bmp.FixedPoint2Dot30(self._io, self, self._root)
170
+ self.x._read()
171
+ self._debug['x']['end'] = self._io.pos()
172
+ self._debug['y']['start'] = self._io.pos()
173
+ self.y = Bmp.FixedPoint2Dot30(self._io, self, self._root)
174
+ self.y._read()
175
+ self._debug['y']['end'] = self._io.pos()
176
+ self._debug['z']['start'] = self._io.pos()
177
+ self.z = Bmp.FixedPoint2Dot30(self._io, self, self._root)
178
+ self.z._read()
179
+ self._debug['z']['end'] = self._io.pos()
180
+
181
+
182
+ class RgbRecord(KaitaiStruct):
183
+ SEQ_FIELDS = ["blue", "green", "red", "reserved"]
184
+ def __init__(self, has_reserved_field, _io, _parent=None, _root=None):
185
+ self._io = _io
186
+ self._parent = _parent
187
+ self._root = _root if _root else self
188
+ self.has_reserved_field = has_reserved_field
189
+ self._debug = collections.defaultdict(dict)
190
+
191
+ def _read(self):
192
+ self._debug['blue']['start'] = self._io.pos()
193
+ self.blue = self._io.read_u1()
194
+ self._debug['blue']['end'] = self._io.pos()
195
+ self._debug['green']['start'] = self._io.pos()
196
+ self.green = self._io.read_u1()
197
+ self._debug['green']['end'] = self._io.pos()
198
+ self._debug['red']['start'] = self._io.pos()
199
+ self.red = self._io.read_u1()
200
+ self._debug['red']['end'] = self._io.pos()
201
+ if self.has_reserved_field:
202
+ self._debug['reserved']['start'] = self._io.pos()
203
+ self.reserved = self._io.read_u1()
204
+ self._debug['reserved']['end'] = self._io.pos()
205
+
206
+
207
+
208
+ class BitmapV5Extension(KaitaiStruct):
209
+ """
210
+ .. seealso::
211
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv5header
212
+ """
213
+ SEQ_FIELDS = ["intent", "ofs_profile", "len_profile", "reserved"]
214
+ def __init__(self, _io, _parent=None, _root=None):
215
+ self._io = _io
216
+ self._parent = _parent
217
+ self._root = _root if _root else self
218
+ self._debug = collections.defaultdict(dict)
219
+
220
+ def _read(self):
221
+ self._debug['intent']['start'] = self._io.pos()
222
+ self.intent = KaitaiStream.resolve_enum(Bmp.Intent, self._io.read_u4le())
223
+ self._debug['intent']['end'] = self._io.pos()
224
+ self._debug['ofs_profile']['start'] = self._io.pos()
225
+ self.ofs_profile = self._io.read_u4le()
226
+ self._debug['ofs_profile']['end'] = self._io.pos()
227
+ self._debug['len_profile']['start'] = self._io.pos()
228
+ self.len_profile = self._io.read_u4le()
229
+ self._debug['len_profile']['end'] = self._io.pos()
230
+ self._debug['reserved']['start'] = self._io.pos()
231
+ self.reserved = self._io.read_u4le()
232
+ self._debug['reserved']['end'] = self._io.pos()
233
+
234
+ @property
235
+ def has_profile(self):
236
+ if hasattr(self, '_m_has_profile'):
237
+ return self._m_has_profile if hasattr(self, '_m_has_profile') else None
238
+
239
+ self._m_has_profile = ((self._parent.bitmap_v4_ext.color_space_type == Bmp.ColorSpace.profile_linked) or (self._parent.bitmap_v4_ext.color_space_type == Bmp.ColorSpace.profile_embedded))
240
+ return self._m_has_profile if hasattr(self, '_m_has_profile') else None
241
+
242
+ @property
243
+ def profile_data(self):
244
+ """
245
+ .. seealso::
246
+ "If the profile is embedded, profile data is the actual profile, and if it is linked, the profile data is the null-terminated file name of the profile. This cannot be a Unicode string. It must be composed exclusively of characters from the Windows character set (code page 1252)." - https://learn.microsoft.com/en-us/windows/win32/wcs/using-structures-in-wcs-1-0
247
+ """
248
+ if hasattr(self, '_m_profile_data'):
249
+ return self._m_profile_data if hasattr(self, '_m_profile_data') else None
250
+
251
+ if self.has_profile:
252
+ io = self._root._io
253
+ _pos = io.pos()
254
+ io.seek((14 + self.ofs_profile))
255
+ self._debug['_m_profile_data']['start'] = io.pos()
256
+ _on = self._parent.bitmap_v4_ext.color_space_type == Bmp.ColorSpace.profile_linked
257
+ if _on == True:
258
+ self._m_profile_data = (KaitaiStream.bytes_terminate(io.read_bytes(self.len_profile), 0, False)).decode(u"windows-1252")
259
+ else:
260
+ self._m_profile_data = io.read_bytes(self.len_profile)
261
+ self._debug['_m_profile_data']['end'] = io.pos()
262
+ io.seek(_pos)
263
+
264
+ return self._m_profile_data if hasattr(self, '_m_profile_data') else None
265
+
266
+
267
+ class ColorMask(KaitaiStruct):
268
+ SEQ_FIELDS = ["red_mask", "green_mask", "blue_mask", "alpha_mask"]
269
+ def __init__(self, has_alpha_mask, _io, _parent=None, _root=None):
270
+ self._io = _io
271
+ self._parent = _parent
272
+ self._root = _root if _root else self
273
+ self.has_alpha_mask = has_alpha_mask
274
+ self._debug = collections.defaultdict(dict)
275
+
276
+ def _read(self):
277
+ self._debug['red_mask']['start'] = self._io.pos()
278
+ self.red_mask = self._io.read_u4le()
279
+ self._debug['red_mask']['end'] = self._io.pos()
280
+ self._debug['green_mask']['start'] = self._io.pos()
281
+ self.green_mask = self._io.read_u4le()
282
+ self._debug['green_mask']['end'] = self._io.pos()
283
+ self._debug['blue_mask']['start'] = self._io.pos()
284
+ self.blue_mask = self._io.read_u4le()
285
+ self._debug['blue_mask']['end'] = self._io.pos()
286
+ if self.has_alpha_mask:
287
+ self._debug['alpha_mask']['start'] = self._io.pos()
288
+ self.alpha_mask = self._io.read_u4le()
289
+ self._debug['alpha_mask']['end'] = self._io.pos()
290
+
291
+
292
+
293
+ class BitmapV4Extension(KaitaiStruct):
294
+ """
295
+ .. seealso::
296
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv4header
297
+ """
298
+ SEQ_FIELDS = ["color_space_type", "endpoint_red", "endpoint_green", "endpoint_blue", "gamma_red", "gamma_blue", "gamma_green"]
299
+ def __init__(self, _io, _parent=None, _root=None):
300
+ self._io = _io
301
+ self._parent = _parent
302
+ self._root = _root if _root else self
303
+ self._debug = collections.defaultdict(dict)
304
+
305
+ def _read(self):
306
+ self._debug['color_space_type']['start'] = self._io.pos()
307
+ self.color_space_type = KaitaiStream.resolve_enum(Bmp.ColorSpace, self._io.read_u4le())
308
+ self._debug['color_space_type']['end'] = self._io.pos()
309
+ self._debug['endpoint_red']['start'] = self._io.pos()
310
+ self.endpoint_red = Bmp.CieXyz(self._io, self, self._root)
311
+ self.endpoint_red._read()
312
+ self._debug['endpoint_red']['end'] = self._io.pos()
313
+ self._debug['endpoint_green']['start'] = self._io.pos()
314
+ self.endpoint_green = Bmp.CieXyz(self._io, self, self._root)
315
+ self.endpoint_green._read()
316
+ self._debug['endpoint_green']['end'] = self._io.pos()
317
+ self._debug['endpoint_blue']['start'] = self._io.pos()
318
+ self.endpoint_blue = Bmp.CieXyz(self._io, self, self._root)
319
+ self.endpoint_blue._read()
320
+ self._debug['endpoint_blue']['end'] = self._io.pos()
321
+ self._debug['gamma_red']['start'] = self._io.pos()
322
+ self.gamma_red = Bmp.FixedPoint16Dot16(self._io, self, self._root)
323
+ self.gamma_red._read()
324
+ self._debug['gamma_red']['end'] = self._io.pos()
325
+ self._debug['gamma_blue']['start'] = self._io.pos()
326
+ self.gamma_blue = Bmp.FixedPoint16Dot16(self._io, self, self._root)
327
+ self.gamma_blue._read()
328
+ self._debug['gamma_blue']['end'] = self._io.pos()
329
+ self._debug['gamma_green']['start'] = self._io.pos()
330
+ self.gamma_green = Bmp.FixedPoint16Dot16(self._io, self, self._root)
331
+ self.gamma_green._read()
332
+ self._debug['gamma_green']['end'] = self._io.pos()
333
+
334
+
335
+ class BitmapInfoExtension(KaitaiStruct):
336
+ """
337
+ .. seealso::
338
+ Source - https://learn.microsoft.com/en-us/previous-versions/dd183376(v=vs.85)
339
+ """
340
+ SEQ_FIELDS = ["compression", "os2_compression", "len_image", "x_resolution", "y_resolution", "num_colors_used", "num_colors_important"]
341
+ def __init__(self, _io, _parent=None, _root=None):
342
+ self._io = _io
343
+ self._parent = _parent
344
+ self._root = _root if _root else self
345
+ self._debug = collections.defaultdict(dict)
346
+
347
+ def _read(self):
348
+ if not (self._parent.extends_os2_2x_bitmap):
349
+ self._debug['compression']['start'] = self._io.pos()
350
+ self.compression = KaitaiStream.resolve_enum(Bmp.Compressions, self._io.read_u4le())
351
+ self._debug['compression']['end'] = self._io.pos()
352
+
353
+ if self._parent.extends_os2_2x_bitmap:
354
+ self._debug['os2_compression']['start'] = self._io.pos()
355
+ self.os2_compression = KaitaiStream.resolve_enum(Bmp.Os2Compressions, self._io.read_u4le())
356
+ self._debug['os2_compression']['end'] = self._io.pos()
357
+
358
+ self._debug['len_image']['start'] = self._io.pos()
359
+ self.len_image = self._io.read_u4le()
360
+ self._debug['len_image']['end'] = self._io.pos()
361
+ self._debug['x_resolution']['start'] = self._io.pos()
362
+ self.x_resolution = self._io.read_u4le()
363
+ self._debug['x_resolution']['end'] = self._io.pos()
364
+ self._debug['y_resolution']['start'] = self._io.pos()
365
+ self.y_resolution = self._io.read_u4le()
366
+ self._debug['y_resolution']['end'] = self._io.pos()
367
+ self._debug['num_colors_used']['start'] = self._io.pos()
368
+ self.num_colors_used = self._io.read_u4le()
369
+ self._debug['num_colors_used']['end'] = self._io.pos()
370
+ self._debug['num_colors_important']['start'] = self._io.pos()
371
+ self.num_colors_important = self._io.read_u4le()
372
+ self._debug['num_colors_important']['end'] = self._io.pos()
373
+
374
+
375
+ class FixedPoint2Dot30(KaitaiStruct):
376
+ SEQ_FIELDS = ["raw"]
377
+ def __init__(self, _io, _parent=None, _root=None):
378
+ self._io = _io
379
+ self._parent = _parent
380
+ self._root = _root if _root else self
381
+ self._debug = collections.defaultdict(dict)
382
+
383
+ def _read(self):
384
+ self._debug['raw']['start'] = self._io.pos()
385
+ self.raw = self._io.read_u4le()
386
+ self._debug['raw']['end'] = self._io.pos()
387
+
388
+ @property
389
+ def value(self):
390
+ if hasattr(self, '_m_value'):
391
+ return self._m_value if hasattr(self, '_m_value') else None
392
+
393
+ self._m_value = ((self.raw + 0.0) / (1 << 30))
394
+ return self._m_value if hasattr(self, '_m_value') else None
395
+
396
+
397
+ class Bitmap(KaitaiStruct):
398
+ """Replace with an opaque type if you care about the pixels. You can look at
399
+ an example of a JavaScript implementation:
400
+ <https://github.com/generalmimon/bmptool/blob/master/src/Bitmap.js>
401
+
402
+ There is a proposal for adding bitmap data type to Kaitai Struct:
403
+ <https://github.com/kaitai-io/kaitai_struct/issues/188>
404
+ """
405
+ SEQ_FIELDS = []
406
+ def __init__(self, _io, _parent=None, _root=None):
407
+ self._io = _io
408
+ self._parent = _parent
409
+ self._root = _root if _root else self
410
+ self._debug = collections.defaultdict(dict)
411
+
412
+ def _read(self):
413
+ pass
414
+
415
+
416
+ class BitmapHeader(KaitaiStruct):
417
+ """
418
+ .. seealso::
419
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapcoreheader
420
+
421
+
422
+ .. seealso::
423
+ Source - https://www.fileformat.info/format/os2bmp/egff.htm#OS2BMP-DMYID.3.1
424
+ """
425
+ SEQ_FIELDS = ["image_width", "image_height_raw", "num_planes", "bits_per_pixel", "bitmap_info_ext", "color_mask", "os2_2x_bitmap_ext", "bitmap_v4_ext", "bitmap_v5_ext"]
426
+ def __init__(self, len_header, _io, _parent=None, _root=None):
427
+ self._io = _io
428
+ self._parent = _parent
429
+ self._root = _root if _root else self
430
+ self.len_header = len_header
431
+ self._debug = collections.defaultdict(dict)
432
+
433
+ def _read(self):
434
+ self._debug['image_width']['start'] = self._io.pos()
435
+ _on = self.is_core_header
436
+ if _on == True:
437
+ self.image_width = self._io.read_u2le()
438
+ elif _on == False:
439
+ self.image_width = self._io.read_u4le()
440
+ self._debug['image_width']['end'] = self._io.pos()
441
+ self._debug['image_height_raw']['start'] = self._io.pos()
442
+ _on = self.is_core_header
443
+ if _on == True:
444
+ self.image_height_raw = self._io.read_s2le()
445
+ elif _on == False:
446
+ self.image_height_raw = self._io.read_s4le()
447
+ self._debug['image_height_raw']['end'] = self._io.pos()
448
+ self._debug['num_planes']['start'] = self._io.pos()
449
+ self.num_planes = self._io.read_u2le()
450
+ self._debug['num_planes']['end'] = self._io.pos()
451
+ self._debug['bits_per_pixel']['start'] = self._io.pos()
452
+ self.bits_per_pixel = self._io.read_u2le()
453
+ self._debug['bits_per_pixel']['end'] = self._io.pos()
454
+ if self.extends_bitmap_info:
455
+ self._debug['bitmap_info_ext']['start'] = self._io.pos()
456
+ self.bitmap_info_ext = Bmp.BitmapInfoExtension(self._io, self, self._root)
457
+ self.bitmap_info_ext._read()
458
+ self._debug['bitmap_info_ext']['end'] = self._io.pos()
459
+
460
+ if self.is_color_mask_here:
461
+ self._debug['color_mask']['start'] = self._io.pos()
462
+ self.color_mask = Bmp.ColorMask(self.len_header != Bmp.HeaderType.bitmap_v2_info_header.value, self._io, self, self._root)
463
+ self.color_mask._read()
464
+ self._debug['color_mask']['end'] = self._io.pos()
465
+
466
+ if self.extends_os2_2x_bitmap:
467
+ self._debug['os2_2x_bitmap_ext']['start'] = self._io.pos()
468
+ self.os2_2x_bitmap_ext = Bmp.Os22xBitmapExtension(self._io, self, self._root)
469
+ self.os2_2x_bitmap_ext._read()
470
+ self._debug['os2_2x_bitmap_ext']['end'] = self._io.pos()
471
+
472
+ if self.extends_bitmap_v4:
473
+ self._debug['bitmap_v4_ext']['start'] = self._io.pos()
474
+ self.bitmap_v4_ext = Bmp.BitmapV4Extension(self._io, self, self._root)
475
+ self.bitmap_v4_ext._read()
476
+ self._debug['bitmap_v4_ext']['end'] = self._io.pos()
477
+
478
+ if self.extends_bitmap_v5:
479
+ self._debug['bitmap_v5_ext']['start'] = self._io.pos()
480
+ self.bitmap_v5_ext = Bmp.BitmapV5Extension(self._io, self, self._root)
481
+ self.bitmap_v5_ext._read()
482
+ self._debug['bitmap_v5_ext']['end'] = self._io.pos()
483
+
484
+
485
+ @property
486
+ def extends_bitmap_v4(self):
487
+ if hasattr(self, '_m_extends_bitmap_v4'):
488
+ return self._m_extends_bitmap_v4 if hasattr(self, '_m_extends_bitmap_v4') else None
489
+
490
+ self._m_extends_bitmap_v4 = self.len_header >= Bmp.HeaderType.bitmap_v4_header.value
491
+ return self._m_extends_bitmap_v4 if hasattr(self, '_m_extends_bitmap_v4') else None
492
+
493
+ @property
494
+ def extends_os2_2x_bitmap(self):
495
+ if hasattr(self, '_m_extends_os2_2x_bitmap'):
496
+ return self._m_extends_os2_2x_bitmap if hasattr(self, '_m_extends_os2_2x_bitmap') else None
497
+
498
+ self._m_extends_os2_2x_bitmap = self.len_header == Bmp.HeaderType.os2_2x_bitmap_header.value
499
+ return self._m_extends_os2_2x_bitmap if hasattr(self, '_m_extends_os2_2x_bitmap') else None
500
+
501
+ @property
502
+ def uses_fixed_palette(self):
503
+ if hasattr(self, '_m_uses_fixed_palette'):
504
+ return self._m_uses_fixed_palette if hasattr(self, '_m_uses_fixed_palette') else None
505
+
506
+ self._m_uses_fixed_palette = ((not ( ((self.bits_per_pixel == 16) or (self.bits_per_pixel == 24) or (self.bits_per_pixel == 32)) )) and (not ( ((self.extends_bitmap_info) and (not (self.extends_os2_2x_bitmap)) and ( ((self.bitmap_info_ext.compression == Bmp.Compressions.jpeg) or (self.bitmap_info_ext.compression == Bmp.Compressions.png)) )) )))
507
+ return self._m_uses_fixed_palette if hasattr(self, '_m_uses_fixed_palette') else None
508
+
509
+ @property
510
+ def extends_bitmap_info(self):
511
+ if hasattr(self, '_m_extends_bitmap_info'):
512
+ return self._m_extends_bitmap_info if hasattr(self, '_m_extends_bitmap_info') else None
513
+
514
+ self._m_extends_bitmap_info = self.len_header >= Bmp.HeaderType.bitmap_info_header.value
515
+ return self._m_extends_bitmap_info if hasattr(self, '_m_extends_bitmap_info') else None
516
+
517
+ @property
518
+ def image_height(self):
519
+ if hasattr(self, '_m_image_height'):
520
+ return self._m_image_height if hasattr(self, '_m_image_height') else None
521
+
522
+ self._m_image_height = (-(self.image_height_raw) if self.image_height_raw < 0 else self.image_height_raw)
523
+ return self._m_image_height if hasattr(self, '_m_image_height') else None
524
+
525
+ @property
526
+ def is_core_header(self):
527
+ if hasattr(self, '_m_is_core_header'):
528
+ return self._m_is_core_header if hasattr(self, '_m_is_core_header') else None
529
+
530
+ self._m_is_core_header = self.len_header == Bmp.HeaderType.bitmap_core_header.value
531
+ return self._m_is_core_header if hasattr(self, '_m_is_core_header') else None
532
+
533
+ @property
534
+ def extends_bitmap_v5(self):
535
+ if hasattr(self, '_m_extends_bitmap_v5'):
536
+ return self._m_extends_bitmap_v5 if hasattr(self, '_m_extends_bitmap_v5') else None
537
+
538
+ self._m_extends_bitmap_v5 = self.len_header >= Bmp.HeaderType.bitmap_v5_header.value
539
+ return self._m_extends_bitmap_v5 if hasattr(self, '_m_extends_bitmap_v5') else None
540
+
541
+ @property
542
+ def is_color_mask_here(self):
543
+ if hasattr(self, '_m_is_color_mask_here'):
544
+ return self._m_is_color_mask_here if hasattr(self, '_m_is_color_mask_here') else None
545
+
546
+ self._m_is_color_mask_here = ((self.len_header == Bmp.HeaderType.bitmap_v2_info_header.value) or (self.len_header == Bmp.HeaderType.bitmap_v3_info_header.value) or (self.extends_bitmap_v4))
547
+ return self._m_is_color_mask_here if hasattr(self, '_m_is_color_mask_here') else None
548
+
549
+ @property
550
+ def bottom_up(self):
551
+ if hasattr(self, '_m_bottom_up'):
552
+ return self._m_bottom_up if hasattr(self, '_m_bottom_up') else None
553
+
554
+ self._m_bottom_up = self.image_height_raw > 0
555
+ return self._m_bottom_up if hasattr(self, '_m_bottom_up') else None
556
+
557
+
558
+ class Os22xBitmapExtension(KaitaiStruct):
559
+ """
560
+ .. seealso::
561
+ Source - https://www.fileformat.info/format/os2bmp/egff.htm#OS2BMP-DMYID.3.2
562
+ """
563
+ SEQ_FIELDS = ["units", "reserved", "recording", "rendering", "size1", "size2", "color_encoding", "identifier"]
564
+ def __init__(self, _io, _parent=None, _root=None):
565
+ self._io = _io
566
+ self._parent = _parent
567
+ self._root = _root if _root else self
568
+ self._debug = collections.defaultdict(dict)
569
+
570
+ def _read(self):
571
+ self._debug['units']['start'] = self._io.pos()
572
+ self.units = self._io.read_u2le()
573
+ self._debug['units']['end'] = self._io.pos()
574
+ self._debug['reserved']['start'] = self._io.pos()
575
+ self.reserved = self._io.read_u2le()
576
+ self._debug['reserved']['end'] = self._io.pos()
577
+ self._debug['recording']['start'] = self._io.pos()
578
+ self.recording = self._io.read_u2le()
579
+ self._debug['recording']['end'] = self._io.pos()
580
+ self._debug['rendering']['start'] = self._io.pos()
581
+ self.rendering = KaitaiStream.resolve_enum(Bmp.Os2Rendering, self._io.read_u2le())
582
+ self._debug['rendering']['end'] = self._io.pos()
583
+ self._debug['size1']['start'] = self._io.pos()
584
+ self.size1 = self._io.read_u4le()
585
+ self._debug['size1']['end'] = self._io.pos()
586
+ self._debug['size2']['start'] = self._io.pos()
587
+ self.size2 = self._io.read_u4le()
588
+ self._debug['size2']['end'] = self._io.pos()
589
+ self._debug['color_encoding']['start'] = self._io.pos()
590
+ self.color_encoding = self._io.read_u4le()
591
+ self._debug['color_encoding']['end'] = self._io.pos()
592
+ self._debug['identifier']['start'] = self._io.pos()
593
+ self.identifier = self._io.read_u4le()
594
+ self._debug['identifier']['end'] = self._io.pos()
595
+
596
+
597
+ class FixedPoint16Dot16(KaitaiStruct):
598
+ SEQ_FIELDS = ["raw"]
599
+ def __init__(self, _io, _parent=None, _root=None):
600
+ self._io = _io
601
+ self._parent = _parent
602
+ self._root = _root if _root else self
603
+ self._debug = collections.defaultdict(dict)
604
+
605
+ def _read(self):
606
+ self._debug['raw']['start'] = self._io.pos()
607
+ self.raw = self._io.read_u4le()
608
+ self._debug['raw']['end'] = self._io.pos()
609
+
610
+ @property
611
+ def value(self):
612
+ if hasattr(self, '_m_value'):
613
+ return self._m_value if hasattr(self, '_m_value') else None
614
+
615
+ self._m_value = ((self.raw + 0.0) / (1 << 16))
616
+ return self._m_value if hasattr(self, '_m_value') else None
617
+
618
+
619
+ class ColorTable(KaitaiStruct):
620
+ SEQ_FIELDS = ["colors"]
621
+ def __init__(self, has_reserved_field, num_colors, _io, _parent=None, _root=None):
622
+ self._io = _io
623
+ self._parent = _parent
624
+ self._root = _root if _root else self
625
+ self.has_reserved_field = has_reserved_field
626
+ self.num_colors = num_colors
627
+ self._debug = collections.defaultdict(dict)
628
+
629
+ def _read(self):
630
+ self._debug['colors']['start'] = self._io.pos()
631
+ self.colors = [None] * ((self.num_colors if ((self.num_colors > 0) and (self.num_colors < self.num_colors_present)) else self.num_colors_present))
632
+ for i in range((self.num_colors if ((self.num_colors > 0) and (self.num_colors < self.num_colors_present)) else self.num_colors_present)):
633
+ if not 'arr' in self._debug['colors']:
634
+ self._debug['colors']['arr'] = []
635
+ self._debug['colors']['arr'].append({'start': self._io.pos()})
636
+ _t_colors = Bmp.RgbRecord(self.has_reserved_field, self._io, self, self._root)
637
+ _t_colors._read()
638
+ self.colors[i] = _t_colors
639
+ self._debug['colors']['arr'][i]['end'] = self._io.pos()
640
+
641
+ self._debug['colors']['end'] = self._io.pos()
642
+
643
+ @property
644
+ def num_colors_present(self):
645
+ if hasattr(self, '_m_num_colors_present'):
646
+ return self._m_num_colors_present if hasattr(self, '_m_num_colors_present') else None
647
+
648
+ self._m_num_colors_present = self._io.size() // (4 if self.has_reserved_field else 3)
649
+ return self._m_num_colors_present if hasattr(self, '_m_num_colors_present') else None
650
+
651
+
652
+ class FileHeader(KaitaiStruct):
653
+ """
654
+ .. seealso::
655
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapfileheader
656
+ """
657
+ SEQ_FIELDS = ["file_type", "len_file", "reserved1", "reserved2", "ofs_bitmap"]
658
+ def __init__(self, _io, _parent=None, _root=None):
659
+ self._io = _io
660
+ self._parent = _parent
661
+ self._root = _root if _root else self
662
+ self._debug = collections.defaultdict(dict)
663
+
664
+ def _read(self):
665
+ self._debug['file_type']['start'] = self._io.pos()
666
+ self.file_type = self._io.read_bytes(2)
667
+ self._debug['file_type']['end'] = self._io.pos()
668
+ if not self.file_type == b"\x42\x4D":
669
+ raise kaitaistruct.ValidationNotEqualError(b"\x42\x4D", self.file_type, self._io, u"/types/file_header/seq/0")
670
+ self._debug['len_file']['start'] = self._io.pos()
671
+ self.len_file = self._io.read_u4le()
672
+ self._debug['len_file']['end'] = self._io.pos()
673
+ self._debug['reserved1']['start'] = self._io.pos()
674
+ self.reserved1 = self._io.read_u2le()
675
+ self._debug['reserved1']['end'] = self._io.pos()
676
+ self._debug['reserved2']['start'] = self._io.pos()
677
+ self.reserved2 = self._io.read_u2le()
678
+ self._debug['reserved2']['end'] = self._io.pos()
679
+ self._debug['ofs_bitmap']['start'] = self._io.pos()
680
+ self.ofs_bitmap = self._io.read_s4le()
681
+ self._debug['ofs_bitmap']['end'] = self._io.pos()
682
+
683
+
684
+ class BitmapInfo(KaitaiStruct):
685
+ """
686
+ .. seealso::
687
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfo
688
+ """
689
+ SEQ_FIELDS = ["len_header", "header", "color_mask", "color_table"]
690
+ def __init__(self, _io, _parent=None, _root=None):
691
+ self._io = _io
692
+ self._parent = _parent
693
+ self._root = _root if _root else self
694
+ self._debug = collections.defaultdict(dict)
695
+
696
+ def _read(self):
697
+ self._debug['len_header']['start'] = self._io.pos()
698
+ self.len_header = self._io.read_u4le()
699
+ self._debug['len_header']['end'] = self._io.pos()
700
+ self._debug['header']['start'] = self._io.pos()
701
+ self._raw_header = self._io.read_bytes((self.len_header - 4))
702
+ _io__raw_header = KaitaiStream(BytesIO(self._raw_header))
703
+ self.header = Bmp.BitmapHeader(self.len_header, _io__raw_header, self, self._root)
704
+ self.header._read()
705
+ self._debug['header']['end'] = self._io.pos()
706
+ if self.is_color_mask_here:
707
+ self._debug['color_mask']['start'] = self._io.pos()
708
+ self.color_mask = Bmp.ColorMask(self.header.bitmap_info_ext.compression == Bmp.Compressions.alpha_bitfields, self._io, self, self._root)
709
+ self.color_mask._read()
710
+ self._debug['color_mask']['end'] = self._io.pos()
711
+
712
+ if not (self._io.is_eof()):
713
+ self._debug['color_table']['start'] = self._io.pos()
714
+ self._raw_color_table = self._io.read_bytes_full()
715
+ _io__raw_color_table = KaitaiStream(BytesIO(self._raw_color_table))
716
+ self.color_table = Bmp.ColorTable(not (self.header.is_core_header), (self.header.bitmap_info_ext.num_colors_used if self.header.extends_bitmap_info else 0), _io__raw_color_table, self, self._root)
717
+ self.color_table._read()
718
+ self._debug['color_table']['end'] = self._io.pos()
719
+
720
+
721
+ @property
722
+ def is_color_mask_given(self):
723
+ if hasattr(self, '_m_is_color_mask_given'):
724
+ return self._m_is_color_mask_given if hasattr(self, '_m_is_color_mask_given') else None
725
+
726
+ self._m_is_color_mask_given = ((self.header.extends_bitmap_info) and ( ((self.header.bitmap_info_ext.compression == Bmp.Compressions.bitfields) or (self.header.bitmap_info_ext.compression == Bmp.Compressions.alpha_bitfields)) ) and ( ((self.is_color_mask_here) or (self.header.is_color_mask_here)) ))
727
+ return self._m_is_color_mask_given if hasattr(self, '_m_is_color_mask_given') else None
728
+
729
+ @property
730
+ def color_mask_given(self):
731
+ if hasattr(self, '_m_color_mask_given'):
732
+ return self._m_color_mask_given if hasattr(self, '_m_color_mask_given') else None
733
+
734
+ if self.is_color_mask_given:
735
+ self._m_color_mask_given = (self.color_mask if self.is_color_mask_here else self.header.color_mask)
736
+
737
+ return self._m_color_mask_given if hasattr(self, '_m_color_mask_given') else None
738
+
739
+ @property
740
+ def color_mask_blue(self):
741
+ if hasattr(self, '_m_color_mask_blue'):
742
+ return self._m_color_mask_blue if hasattr(self, '_m_color_mask_blue') else None
743
+
744
+ self._m_color_mask_blue = (self.color_mask_given.blue_mask if self.is_color_mask_given else (31 if self.header.bits_per_pixel == 16 else (255 if ((self.header.bits_per_pixel == 24) or (self.header.bits_per_pixel == 32)) else 0)))
745
+ return self._m_color_mask_blue if hasattr(self, '_m_color_mask_blue') else None
746
+
747
+ @property
748
+ def color_mask_alpha(self):
749
+ if hasattr(self, '_m_color_mask_alpha'):
750
+ return self._m_color_mask_alpha if hasattr(self, '_m_color_mask_alpha') else None
751
+
752
+ self._m_color_mask_alpha = (self.color_mask_given.alpha_mask if ((self.is_color_mask_given) and (self.color_mask_given.has_alpha_mask)) else 0)
753
+ return self._m_color_mask_alpha if hasattr(self, '_m_color_mask_alpha') else None
754
+
755
+ @property
756
+ def color_mask_green(self):
757
+ if hasattr(self, '_m_color_mask_green'):
758
+ return self._m_color_mask_green if hasattr(self, '_m_color_mask_green') else None
759
+
760
+ self._m_color_mask_green = (self.color_mask_given.green_mask if self.is_color_mask_given else (992 if self.header.bits_per_pixel == 16 else (65280 if ((self.header.bits_per_pixel == 24) or (self.header.bits_per_pixel == 32)) else 0)))
761
+ return self._m_color_mask_green if hasattr(self, '_m_color_mask_green') else None
762
+
763
+ @property
764
+ def is_color_mask_here(self):
765
+ if hasattr(self, '_m_is_color_mask_here'):
766
+ return self._m_is_color_mask_here if hasattr(self, '_m_is_color_mask_here') else None
767
+
768
+ self._m_is_color_mask_here = ((not (self._io.is_eof())) and (self.header.len_header == Bmp.HeaderType.bitmap_info_header.value) and ( ((self.header.bitmap_info_ext.compression == Bmp.Compressions.bitfields) or (self.header.bitmap_info_ext.compression == Bmp.Compressions.alpha_bitfields)) ))
769
+ return self._m_is_color_mask_here if hasattr(self, '_m_is_color_mask_here') else None
770
+
771
+ @property
772
+ def color_mask_red(self):
773
+ if hasattr(self, '_m_color_mask_red'):
774
+ return self._m_color_mask_red if hasattr(self, '_m_color_mask_red') else None
775
+
776
+ self._m_color_mask_red = (self.color_mask_given.red_mask if self.is_color_mask_given else (31744 if self.header.bits_per_pixel == 16 else (16711680 if ((self.header.bits_per_pixel == 24) or (self.header.bits_per_pixel == 32)) else 0)))
777
+ return self._m_color_mask_red if hasattr(self, '_m_color_mask_red') else None
778
+
779
+
780
+