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.
- polyfile/__init__.py +15 -0
- polyfile/__main__.py +394 -0
- polyfile/arithmetic.py +27 -0
- polyfile/ast.py +114 -0
- polyfile/debugger.py +1039 -0
- polyfile/expressions.py +346 -0
- polyfile/fileutils.py +343 -0
- polyfile/html.py +135 -0
- polyfile/http/__init__.py +1 -0
- polyfile/http/defacto.py +37 -0
- polyfile/http/deprecated.py +51 -0
- polyfile/http/experimental.py +67 -0
- polyfile/http/http_11.py +548 -0
- polyfile/http/matcher.py +37 -0
- polyfile/http/structured_headers.py +48 -0
- polyfile/iterators.py +72 -0
- polyfile/jpeg.py +24 -0
- polyfile/kaitai/__init__.py +0 -0
- polyfile/kaitai/compiler.py +156 -0
- polyfile/kaitai/parser.py +312 -0
- polyfile/kaitai/parsers/__init__.py +0 -0
- polyfile/kaitai/parsers/aix_utmp.py +116 -0
- polyfile/kaitai/parsers/allegro_dat.py +367 -0
- polyfile/kaitai/parsers/andes_firmware.py +64 -0
- polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
- polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
- polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
- polyfile/kaitai/parsers/android_dto.py +138 -0
- polyfile/kaitai/parsers/android_img.py +319 -0
- polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
- polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
- polyfile/kaitai/parsers/android_sparse.py +237 -0
- polyfile/kaitai/parsers/android_super.py +401 -0
- polyfile/kaitai/parsers/apm_partition_table.py +196 -0
- polyfile/kaitai/parsers/apple_single_double.py +180 -0
- polyfile/kaitai/parsers/asn1_der.py +235 -0
- polyfile/kaitai/parsers/au.py +138 -0
- polyfile/kaitai/parsers/avantes_roh60.py +112 -0
- polyfile/kaitai/parsers/avi.py +296 -0
- polyfile/kaitai/parsers/bcd.py +111 -0
- polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
- polyfile/kaitai/parsers/blender_blend.py +334 -0
- polyfile/kaitai/parsers/bmp.py +780 -0
- polyfile/kaitai/parsers/bson.py +411 -0
- polyfile/kaitai/parsers/btrfs_stream.py +318 -0
- polyfile/kaitai/parsers/bytes_with_io.py +27 -0
- polyfile/kaitai/parsers/chrome_pak.py +194 -0
- polyfile/kaitai/parsers/code_6502.py +456 -0
- polyfile/kaitai/parsers/compressed_resource.py +217 -0
- polyfile/kaitai/parsers/cpio_old_le.py +154 -0
- polyfile/kaitai/parsers/cramfs.py +344 -0
- polyfile/kaitai/parsers/creative_voice_file.py +342 -0
- polyfile/kaitai/parsers/dbf.py +274 -0
- polyfile/kaitai/parsers/dcmp_0.py +664 -0
- polyfile/kaitai/parsers/dcmp_1.py +422 -0
- polyfile/kaitai/parsers/dcmp_2.py +312 -0
- polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
- polyfile/kaitai/parsers/dex.py +1086 -0
- polyfile/kaitai/parsers/dicom.py +4370 -0
- polyfile/kaitai/parsers/dime_message.py +201 -0
- polyfile/kaitai/parsers/dns_packet.py +569 -0
- polyfile/kaitai/parsers/doom_wad.py +654 -0
- polyfile/kaitai/parsers/dos_datetime.py +191 -0
- polyfile/kaitai/parsers/dos_mz.py +172 -0
- polyfile/kaitai/parsers/ds_store.py +513 -0
- polyfile/kaitai/parsers/dtb.py +310 -0
- polyfile/kaitai/parsers/dune_2_pak.py +126 -0
- polyfile/kaitai/parsers/edid.py +472 -0
- polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
- polyfile/kaitai/parsers/elf.py +2482 -0
- polyfile/kaitai/parsers/ethernet_frame.py +114 -0
- polyfile/kaitai/parsers/exif.py +723 -0
- polyfile/kaitai/parsers/ext2.py +537 -0
- polyfile/kaitai/parsers/fallout2_dat.py +187 -0
- polyfile/kaitai/parsers/fallout_dat.py +156 -0
- polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
- polyfile/kaitai/parsers/ftl_dat.py +90 -0
- polyfile/kaitai/parsers/genmidi_op2.py +161 -0
- polyfile/kaitai/parsers/gettext_mo.py +541 -0
- polyfile/kaitai/parsers/gif.py +492 -0
- polyfile/kaitai/parsers/gimp_brush.py +244 -0
- polyfile/kaitai/parsers/glibc_utmp.py +114 -0
- polyfile/kaitai/parsers/gltf_binary.py +132 -0
- polyfile/kaitai/parsers/google_protobuf.py +151 -0
- polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
- polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
- polyfile/kaitai/parsers/grub2_font.py +337 -0
- polyfile/kaitai/parsers/gzip.py +232 -0
- polyfile/kaitai/parsers/hashcat_restore.py +60 -0
- polyfile/kaitai/parsers/hccap.py +111 -0
- polyfile/kaitai/parsers/hccapx.py +103 -0
- polyfile/kaitai/parsers/heaps_pak.py +177 -0
- polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
- polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
- polyfile/kaitai/parsers/icmp_packet.py +136 -0
- polyfile/kaitai/parsers/ico.py +129 -0
- polyfile/kaitai/parsers/id3v1_1.py +220 -0
- polyfile/kaitai/parsers/id3v2_3.py +324 -0
- polyfile/kaitai/parsers/id3v2_4.py +423 -0
- polyfile/kaitai/parsers/ines.py +282 -0
- polyfile/kaitai/parsers/ipv4_packet.py +158 -0
- polyfile/kaitai/parsers/ipv6_packet.py +55 -0
- polyfile/kaitai/parsers/iso9660.py +544 -0
- polyfile/kaitai/parsers/java_class.py +1113 -0
- polyfile/kaitai/parsers/jpeg.py +361 -0
- polyfile/kaitai/parsers/luks.py +149 -0
- polyfile/kaitai/parsers/lzh.py +165 -0
- polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
- polyfile/kaitai/parsers/mach_o.py +3033 -0
- polyfile/kaitai/parsers/mach_o_fat.py +92 -0
- polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
- polyfile/kaitai/parsers/manifest.json +1 -0
- polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
- polyfile/kaitai/parsers/mcap.py +1015 -0
- polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
- polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
- polyfile/kaitai/parsers/microsoft_pe.py +765 -0
- polyfile/kaitai/parsers/mifare_classic.py +706 -0
- polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
- polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
- polyfile/kaitai/parsers/mozilla_mar.py +239 -0
- polyfile/kaitai/parsers/mp4.py +333 -0
- polyfile/kaitai/parsers/msgpack.py +467 -0
- polyfile/kaitai/parsers/nitf.py +1189 -0
- polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
- polyfile/kaitai/parsers/ogg.py +118 -0
- polyfile/kaitai/parsers/openpgp_message.py +993 -0
- polyfile/kaitai/parsers/packet_ppi.py +515 -0
- polyfile/kaitai/parsers/pcap.py +344 -0
- polyfile/kaitai/parsers/pcf_font.py +506 -0
- polyfile/kaitai/parsers/pcx.py +195 -0
- polyfile/kaitai/parsers/pcx_dcx.py +79 -0
- polyfile/kaitai/parsers/phar_without_stub.py +399 -0
- polyfile/kaitai/parsers/php_serialized_value.py +505 -0
- polyfile/kaitai/parsers/png.py +721 -0
- polyfile/kaitai/parsers/protocol_body.py +260 -0
- polyfile/kaitai/parsers/psx_tim.py +104 -0
- polyfile/kaitai/parsers/python_pickle.py +718 -0
- polyfile/kaitai/parsers/python_pyc_27.py +510 -0
- polyfile/kaitai/parsers/quake_mdl.py +441 -0
- polyfile/kaitai/parsers/quake_pak.py +112 -0
- polyfile/kaitai/parsers/quicktime_mov.py +634 -0
- polyfile/kaitai/parsers/rar.py +265 -0
- polyfile/kaitai/parsers/regf.py +569 -0
- polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
- polyfile/kaitai/parsers/resource_fork.py +611 -0
- polyfile/kaitai/parsers/respack.py +57 -0
- polyfile/kaitai/parsers/riff.py +409 -0
- polyfile/kaitai/parsers/rpm.py +964 -0
- polyfile/kaitai/parsers/rtcp_payload.py +579 -0
- polyfile/kaitai/parsers/rtp_packet.py +150 -0
- polyfile/kaitai/parsers/rtpdump.py +115 -0
- polyfile/kaitai/parsers/ruby_marshal.py +423 -0
- polyfile/kaitai/parsers/s3m.py +493 -0
- polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
- polyfile/kaitai/parsers/shapefile_index.py +174 -0
- polyfile/kaitai/parsers/shapefile_main.py +893 -0
- polyfile/kaitai/parsers/some_ip.py +209 -0
- polyfile/kaitai/parsers/some_ip_container.py +37 -0
- polyfile/kaitai/parsers/some_ip_sd.py +86 -0
- polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
- polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
- polyfile/kaitai/parsers/specpr.py +404 -0
- polyfile/kaitai/parsers/sqlite3.py +472 -0
- polyfile/kaitai/parsers/ssh_public_key.py +252 -0
- polyfile/kaitai/parsers/standard_midi_file.py +390 -0
- polyfile/kaitai/parsers/stl.py +111 -0
- polyfile/kaitai/parsers/sudoers_ts.py +201 -0
- polyfile/kaitai/parsers/swf.py +406 -0
- polyfile/kaitai/parsers/systemd_journal.py +361 -0
- polyfile/kaitai/parsers/tcp_segment.py +57 -0
- polyfile/kaitai/parsers/tga.py +213 -0
- polyfile/kaitai/parsers/tls_client_hello.py +293 -0
- polyfile/kaitai/parsers/tr_dos_image.py +322 -0
- polyfile/kaitai/parsers/tsm.py +198 -0
- polyfile/kaitai/parsers/ttf.py +1847 -0
- polyfile/kaitai/parsers/udp_datagram.py +42 -0
- polyfile/kaitai/parsers/uefi_te.py +236 -0
- polyfile/kaitai/parsers/uimage.py +198 -0
- polyfile/kaitai/parsers/utf8_string.py +137 -0
- polyfile/kaitai/parsers/vfat.py +410 -0
- polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
- polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
- polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
- polyfile/kaitai/parsers/vp8_ivf.py +112 -0
- polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
- polyfile/kaitai/parsers/wav.py +1014 -0
- polyfile/kaitai/parsers/websocket.py +167 -0
- polyfile/kaitai/parsers/windows_evt_log.py +304 -0
- polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
- polyfile/kaitai/parsers/windows_minidump.py +575 -0
- polyfile/kaitai/parsers/windows_resource_file.py +243 -0
- polyfile/kaitai/parsers/windows_shell_items.py +190 -0
- polyfile/kaitai/parsers/windows_systemtime.py +52 -0
- polyfile/kaitai/parsers/wmf.py +502 -0
- polyfile/kaitai/parsers/xar.py +181 -0
- polyfile/kaitai/parsers/xwd.py +189 -0
- polyfile/kaitai/parsers/zip.py +685 -0
- polyfile/kaitai/parsers/zisofs.py +158 -0
- polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
- polyfile/kaitaimatcher.py +113 -0
- polyfile/languagematcher.py +217 -0
- polyfile/logger.py +135 -0
- polyfile/magic.py +2983 -0
- polyfile/magic_defs/COPYING +29 -0
- polyfile/magic_defs/__init__.py +0 -0
- polyfile/magic_defs/acorn +102 -0
- polyfile/magic_defs/adi +13 -0
- polyfile/magic_defs/adventure +122 -0
- polyfile/magic_defs/aes +29 -0
- polyfile/magic_defs/algol68 +35 -0
- polyfile/magic_defs/allegro +9 -0
- polyfile/magic_defs/alliant +18 -0
- polyfile/magic_defs/alpha +32 -0
- polyfile/magic_defs/amanda +12 -0
- polyfile/magic_defs/amigaos +218 -0
- polyfile/magic_defs/android +259 -0
- polyfile/magic_defs/animation +1197 -0
- polyfile/magic_defs/aout +46 -0
- polyfile/magic_defs/apache +28 -0
- polyfile/magic_defs/apl +7 -0
- polyfile/magic_defs/apple +773 -0
- polyfile/magic_defs/application +7 -0
- polyfile/magic_defs/applix +13 -0
- polyfile/magic_defs/apt +52 -0
- polyfile/magic_defs/archive +2586 -0
- polyfile/magic_defs/aria +38 -0
- polyfile/magic_defs/arm +50 -0
- polyfile/magic_defs/asf +132 -0
- polyfile/magic_defs/assembler +18 -0
- polyfile/magic_defs/asterix +18 -0
- polyfile/magic_defs/att3b +41 -0
- polyfile/magic_defs/audio +1291 -0
- polyfile/magic_defs/avm +33 -0
- polyfile/magic_defs/basis +18 -0
- polyfile/magic_defs/beetle +7 -0
- polyfile/magic_defs/ber +65 -0
- polyfile/magic_defs/bflt +14 -0
- polyfile/magic_defs/bhl +10 -0
- polyfile/magic_defs/bioinformatics +178 -0
- polyfile/magic_defs/biosig +154 -0
- polyfile/magic_defs/blackberry +8 -0
- polyfile/magic_defs/blcr +25 -0
- polyfile/magic_defs/blender +50 -0
- polyfile/magic_defs/blit +24 -0
- polyfile/magic_defs/bm +10 -0
- polyfile/magic_defs/bout +11 -0
- polyfile/magic_defs/bsdi +33 -0
- polyfile/magic_defs/bsi +10 -0
- polyfile/magic_defs/btsnoop +13 -0
- polyfile/magic_defs/burp +7 -0
- polyfile/magic_defs/bytecode +41 -0
- polyfile/magic_defs/c-lang +110 -0
- polyfile/magic_defs/c64 +531 -0
- polyfile/magic_defs/cad +437 -0
- polyfile/magic_defs/cafebabe +107 -0
- polyfile/magic_defs/cbor +21 -0
- polyfile/magic_defs/ccf +14 -0
- polyfile/magic_defs/cddb +12 -0
- polyfile/magic_defs/chord +15 -0
- polyfile/magic_defs/cisco +12 -0
- polyfile/magic_defs/citrus +12 -0
- polyfile/magic_defs/clarion +27 -0
- polyfile/magic_defs/claris +48 -0
- polyfile/magic_defs/clipper +65 -0
- polyfile/magic_defs/clojure +30 -0
- polyfile/magic_defs/coff +98 -0
- polyfile/magic_defs/commands +201 -0
- polyfile/magic_defs/communications +22 -0
- polyfile/magic_defs/compress +461 -0
- polyfile/magic_defs/console +1213 -0
- polyfile/magic_defs/convex +69 -0
- polyfile/magic_defs/coverage +91 -0
- polyfile/magic_defs/cracklib +14 -0
- polyfile/magic_defs/crypto +31 -0
- polyfile/magic_defs/csv +8 -0
- polyfile/magic_defs/ctags +6 -0
- polyfile/magic_defs/ctf +23 -0
- polyfile/magic_defs/cubemap +8 -0
- polyfile/magic_defs/cups +56 -0
- polyfile/magic_defs/dact +11 -0
- polyfile/magic_defs/database +886 -0
- polyfile/magic_defs/dataone +47 -0
- polyfile/magic_defs/dbpf +15 -0
- polyfile/magic_defs/der +146 -0
- polyfile/magic_defs/diamond +12 -0
- polyfile/magic_defs/dif +33 -0
- polyfile/magic_defs/diff +41 -0
- polyfile/magic_defs/digital +59 -0
- polyfile/magic_defs/dolby +69 -0
- polyfile/magic_defs/dsf +25 -0
- polyfile/magic_defs/dump +96 -0
- polyfile/magic_defs/dwarfs +45 -0
- polyfile/magic_defs/dyadic +61 -0
- polyfile/magic_defs/ebml +8 -0
- polyfile/magic_defs/edid +11 -0
- polyfile/magic_defs/editors +43 -0
- polyfile/magic_defs/efi +15 -0
- polyfile/magic_defs/elf +379 -0
- polyfile/magic_defs/encore +22 -0
- polyfile/magic_defs/epoc +62 -0
- polyfile/magic_defs/erlang +21 -0
- polyfile/magic_defs/espressif +57 -0
- polyfile/magic_defs/esri +28 -0
- polyfile/magic_defs/etf +33 -0
- polyfile/magic_defs/fcs +9 -0
- polyfile/magic_defs/filesystems +2694 -0
- polyfile/magic_defs/finger +16 -0
- polyfile/magic_defs/firmware +133 -0
- polyfile/magic_defs/flash +62 -0
- polyfile/magic_defs/flif +36 -0
- polyfile/magic_defs/fonts +449 -0
- polyfile/magic_defs/forth +82 -0
- polyfile/magic_defs/fortran +9 -0
- polyfile/magic_defs/frame +62 -0
- polyfile/magic_defs/freebsd +164 -0
- polyfile/magic_defs/fsav +128 -0
- polyfile/magic_defs/fusecompress +12 -0
- polyfile/magic_defs/games +696 -0
- polyfile/magic_defs/gcc +17 -0
- polyfile/magic_defs/gconv +10 -0
- polyfile/magic_defs/gentoo +85 -0
- polyfile/magic_defs/geo +166 -0
- polyfile/magic_defs/geos +20 -0
- polyfile/magic_defs/gimp +77 -0
- polyfile/magic_defs/git +13 -0
- polyfile/magic_defs/glibc +21 -0
- polyfile/magic_defs/gnome +59 -0
- polyfile/magic_defs/gnu +173 -0
- polyfile/magic_defs/gnumeric +8 -0
- polyfile/magic_defs/gpt +240 -0
- polyfile/magic_defs/gpu +28 -0
- polyfile/magic_defs/grace +21 -0
- polyfile/magic_defs/graphviz +12 -0
- polyfile/magic_defs/gringotts +48 -0
- polyfile/magic_defs/guile +13 -0
- polyfile/magic_defs/hardware +12 -0
- polyfile/magic_defs/hitachi-sh +30 -0
- polyfile/magic_defs/hp +433 -0
- polyfile/magic_defs/human68k +26 -0
- polyfile/magic_defs/ibm370 +52 -0
- polyfile/magic_defs/ibm6000 +35 -0
- polyfile/magic_defs/icc +214 -0
- polyfile/magic_defs/iff +80 -0
- polyfile/magic_defs/images +4210 -0
- polyfile/magic_defs/inform +9 -0
- polyfile/magic_defs/intel +310 -0
- polyfile/magic_defs/interleaf +9 -0
- polyfile/magic_defs/island +10 -0
- polyfile/magic_defs/ispell +63 -0
- polyfile/magic_defs/isz +15 -0
- polyfile/magic_defs/java +52 -0
- polyfile/magic_defs/javascript +171 -0
- polyfile/magic_defs/jpeg +252 -0
- polyfile/magic_defs/json +8 -0
- polyfile/magic_defs/karma +9 -0
- polyfile/magic_defs/kde +11 -0
- polyfile/magic_defs/keepass +20 -0
- polyfile/magic_defs/kerberos +45 -0
- polyfile/magic_defs/kicad +85 -0
- polyfile/magic_defs/kml +34 -0
- polyfile/magic_defs/lammps +64 -0
- polyfile/magic_defs/lecter +6 -0
- polyfile/magic_defs/lex +12 -0
- polyfile/magic_defs/lif +50 -0
- polyfile/magic_defs/linux +557 -0
- polyfile/magic_defs/lisp +78 -0
- polyfile/magic_defs/llvm +22 -0
- polyfile/magic_defs/locoscript +12 -0
- polyfile/magic_defs/lua +31 -0
- polyfile/magic_defs/luks +126 -0
- polyfile/magic_defs/m4 +11 -0
- polyfile/magic_defs/mach +303 -0
- polyfile/magic_defs/macintosh +505 -0
- polyfile/magic_defs/macos +7 -0
- polyfile/magic_defs/magic +10 -0
- polyfile/magic_defs/magic.mgc +0 -0
- polyfile/magic_defs/mail.news +132 -0
- polyfile/magic_defs/make +21 -0
- polyfile/magic_defs/map +413 -0
- polyfile/magic_defs/maple +109 -0
- polyfile/magic_defs/marc21 +30 -0
- polyfile/magic_defs/mathcad +8 -0
- polyfile/magic_defs/mathematica +188 -0
- polyfile/magic_defs/matroska +17 -0
- polyfile/magic_defs/mcrypt +52 -0
- polyfile/magic_defs/measure +44 -0
- polyfile/magic_defs/mercurial +13 -0
- polyfile/magic_defs/metastore +8 -0
- polyfile/magic_defs/meteorological +53 -0
- polyfile/magic_defs/microfocus +21 -0
- polyfile/magic_defs/mime +9 -0
- polyfile/magic_defs/mips +120 -0
- polyfile/magic_defs/mirage +8 -0
- polyfile/magic_defs/misctools +140 -0
- polyfile/magic_defs/mkid +11 -0
- polyfile/magic_defs/mlssa +8 -0
- polyfile/magic_defs/mmdf +6 -0
- polyfile/magic_defs/modem +92 -0
- polyfile/magic_defs/modulefile +9 -0
- polyfile/magic_defs/motorola +71 -0
- polyfile/magic_defs/mozilla +37 -0
- polyfile/magic_defs/msdos +2304 -0
- polyfile/magic_defs/msooxml +68 -0
- polyfile/magic_defs/msvc +222 -0
- polyfile/magic_defs/msx +309 -0
- polyfile/magic_defs/mup +24 -0
- polyfile/magic_defs/music +17 -0
- polyfile/magic_defs/nasa +7 -0
- polyfile/magic_defs/natinst +24 -0
- polyfile/magic_defs/ncr +49 -0
- polyfile/magic_defs/neko +12 -0
- polyfile/magic_defs/netbsd +251 -0
- polyfile/magic_defs/netscape +26 -0
- polyfile/magic_defs/netware +11 -0
- polyfile/magic_defs/news +13 -0
- polyfile/magic_defs/nifty +202 -0
- polyfile/magic_defs/nim-lang +29 -0
- polyfile/magic_defs/nitpicker +14 -0
- polyfile/magic_defs/numpy +9 -0
- polyfile/magic_defs/oasis +12 -0
- polyfile/magic_defs/ocaml +14 -0
- polyfile/magic_defs/octave +6 -0
- polyfile/magic_defs/ole2compounddocs +760 -0
- polyfile/magic_defs/olf +98 -0
- polyfile/magic_defs/openfst +17 -0
- polyfile/magic_defs/opentimestamps +16 -0
- polyfile/magic_defs/oric +16 -0
- polyfile/magic_defs/os2 +186 -0
- polyfile/magic_defs/os400 +39 -0
- polyfile/magic_defs/os9 +80 -0
- polyfile/magic_defs/osf1 +10 -0
- polyfile/magic_defs/palm +156 -0
- polyfile/magic_defs/parix +13 -0
- polyfile/magic_defs/parrot +22 -0
- polyfile/magic_defs/pascal +39 -0
- polyfile/magic_defs/pbf +11 -0
- polyfile/magic_defs/pbm +8 -0
- polyfile/magic_defs/pc88 +24 -0
- polyfile/magic_defs/pc98 +77 -0
- polyfile/magic_defs/pci_ids +116 -0
- polyfile/magic_defs/pcjr +8 -0
- polyfile/magic_defs/pdf +51 -0
- polyfile/magic_defs/pdp +42 -0
- polyfile/magic_defs/perl +100 -0
- polyfile/magic_defs/pgf +52 -0
- polyfile/magic_defs/pgp +581 -0
- polyfile/magic_defs/pgp-binary-keys +388 -0
- polyfile/magic_defs/pkgadd +7 -0
- polyfile/magic_defs/plan9 +25 -0
- polyfile/magic_defs/playdate +57 -0
- polyfile/magic_defs/plus5 +18 -0
- polyfile/magic_defs/pmem +46 -0
- polyfile/magic_defs/polyfile_zip +5 -0
- polyfile/magic_defs/polyml +23 -0
- polyfile/magic_defs/printer +269 -0
- polyfile/magic_defs/project +10 -0
- polyfile/magic_defs/psdbms +14 -0
- polyfile/magic_defs/psl +14 -0
- polyfile/magic_defs/pulsar +13 -0
- polyfile/magic_defs/puzzle +17 -0
- polyfile/magic_defs/pwsafe +14 -0
- polyfile/magic_defs/pyramid +12 -0
- polyfile/magic_defs/python +305 -0
- polyfile/magic_defs/qt +30 -0
- polyfile/magic_defs/revision +66 -0
- polyfile/magic_defs/riff +840 -0
- polyfile/magic_defs/rinex +44 -0
- polyfile/magic_defs/ringdove +45 -0
- polyfile/magic_defs/rpi +52 -0
- polyfile/magic_defs/rpm +45 -0
- polyfile/magic_defs/rpmsg +7 -0
- polyfile/magic_defs/rst +11 -0
- polyfile/magic_defs/rtf +94 -0
- polyfile/magic_defs/ruby +55 -0
- polyfile/magic_defs/rust +21 -0
- polyfile/magic_defs/sc +7 -0
- polyfile/magic_defs/sccs +24 -0
- polyfile/magic_defs/scientific +144 -0
- polyfile/magic_defs/securitycerts +6 -0
- polyfile/magic_defs/selinux +24 -0
- polyfile/magic_defs/sendmail +37 -0
- polyfile/magic_defs/sequent +42 -0
- polyfile/magic_defs/sereal +35 -0
- polyfile/magic_defs/sgi +144 -0
- polyfile/magic_defs/sgml +161 -0
- polyfile/magic_defs/sharc +23 -0
- polyfile/magic_defs/sinclair +40 -0
- polyfile/magic_defs/sisu +18 -0
- polyfile/magic_defs/sketch +6 -0
- polyfile/magic_defs/smalltalk +25 -0
- polyfile/magic_defs/smile +34 -0
- polyfile/magic_defs/sniffer +482 -0
- polyfile/magic_defs/softquad +40 -0
- polyfile/magic_defs/sosi +40 -0
- polyfile/magic_defs/spec +21 -0
- polyfile/magic_defs/spectrum +184 -0
- polyfile/magic_defs/sql +288 -0
- polyfile/magic_defs/ssh +39 -0
- polyfile/magic_defs/ssl +20 -0
- polyfile/magic_defs/statistics +45 -0
- polyfile/magic_defs/subtitle +38 -0
- polyfile/magic_defs/sun +141 -0
- polyfile/magic_defs/svf +5 -0
- polyfile/magic_defs/sylk +36 -0
- polyfile/magic_defs/symbos +42 -0
- polyfile/magic_defs/sysex +429 -0
- polyfile/magic_defs/tcl +29 -0
- polyfile/magic_defs/teapot +6 -0
- polyfile/magic_defs/terminfo +63 -0
- polyfile/magic_defs/tex +141 -0
- polyfile/magic_defs/tgif +7 -0
- polyfile/magic_defs/ti-8x +239 -0
- polyfile/magic_defs/timezone +42 -0
- polyfile/magic_defs/tplink +95 -0
- polyfile/magic_defs/troff +38 -0
- polyfile/magic_defs/tuxedo +8 -0
- polyfile/magic_defs/typeset +8 -0
- polyfile/magic_defs/uf2 +72 -0
- polyfile/magic_defs/unicode +15 -0
- polyfile/magic_defs/unisig +12 -0
- polyfile/magic_defs/unknown +34 -0
- polyfile/magic_defs/usd +21 -0
- polyfile/magic_defs/uterus +16 -0
- polyfile/magic_defs/uuencode +28 -0
- polyfile/magic_defs/vacuum-cleaner +54 -0
- polyfile/magic_defs/varied.out +46 -0
- polyfile/magic_defs/varied.script +21 -0
- polyfile/magic_defs/vax +32 -0
- polyfile/magic_defs/vicar +17 -0
- polyfile/magic_defs/virtual +307 -0
- polyfile/magic_defs/virtutech +12 -0
- polyfile/magic_defs/visx +32 -0
- polyfile/magic_defs/vms +30 -0
- polyfile/magic_defs/vmware +6 -0
- polyfile/magic_defs/vorbis +155 -0
- polyfile/magic_defs/vxl +14 -0
- polyfile/magic_defs/warc +16 -0
- polyfile/magic_defs/weak +16 -0
- polyfile/magic_defs/web +18 -0
- polyfile/magic_defs/webassembly +17 -0
- polyfile/magic_defs/windows +1811 -0
- polyfile/magic_defs/wireless +7 -0
- polyfile/magic_defs/wordprocessors +630 -0
- polyfile/magic_defs/wsdl +23 -0
- polyfile/magic_defs/x68000 +25 -0
- polyfile/magic_defs/xdelta +13 -0
- polyfile/magic_defs/xenix +106 -0
- polyfile/magic_defs/xilinx +58 -0
- polyfile/magic_defs/xo65 +37 -0
- polyfile/magic_defs/xwindows +43 -0
- polyfile/magic_defs/yara +17 -0
- polyfile/magic_defs/zfs +96 -0
- polyfile/magic_defs/zilog +12 -0
- polyfile/magic_defs/zip +126 -0
- polyfile/magic_defs/zyxel +17 -0
- polyfile/nes.py +144 -0
- polyfile/nitf.py +15 -0
- polyfile/pdf.py +1264 -0
- polyfile/pickles.py +45 -0
- polyfile/polyfile.py +409 -0
- polyfile/profiling.py +115 -0
- polyfile/repl.py +624 -0
- polyfile/search.py +310 -0
- polyfile/serialization.py +323 -0
- polyfile/structmatcher.py +46 -0
- polyfile/structs.py +281 -0
- polyfile/templates/download.js +162 -0
- polyfile/templates/hexdump.css +268 -0
- polyfile/templates/hexdump.js +756 -0
- polyfile/templates/jquery-3.4.1.min.js +2 -0
- polyfile/templates/template.html +119 -0
- polyfile/wildcards.py +62 -0
- polyfile/zipmatcher.py +183 -0
- polyfile_weave-0.5.5.dist-info/METADATA +173 -0
- polyfile_weave-0.5.5.dist-info/RECORD +585 -0
- polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
- polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
- polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
- polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
- polymerge/__init__.py +1 -0
- polymerge/__main__.py +296 -0
- polymerge/cfg.py +127 -0
- polymerge/polymerge.py +227 -0
- polymerge/polytracker.py +190 -0
|
@@ -0,0 +1,312 @@
|
|
|
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 Dcmp2(KaitaiStruct):
|
|
13
|
+
"""Compressed resource data in `'dcmp' (2)` format,
|
|
14
|
+
as stored in compressed resources with header type `9` and decompressor ID `2`.
|
|
15
|
+
|
|
16
|
+
The `'dcmp' (2)` decompressor resource is included in the System file of System 7.0 and later.
|
|
17
|
+
This compression format is used for a few compressed resources in System 7.0's files
|
|
18
|
+
(such as the System file).
|
|
19
|
+
This decompressor is also included with and used by some other Apple applications,
|
|
20
|
+
such as ResEdit.
|
|
21
|
+
(Note: ResEdit includes the `'dcmp' (2)` resource,
|
|
22
|
+
but none of its resources actually use this decompressor.)
|
|
23
|
+
|
|
24
|
+
This compression format is based on simple dictionary coding,
|
|
25
|
+
where each byte in the compressed data expands to two bytes,
|
|
26
|
+
based on a lookup table
|
|
27
|
+
(either included in the compressed data or provided by the decompressor).
|
|
28
|
+
An alternative "tagged" compression format is also supported,
|
|
29
|
+
which allows using two-byte literals in addition to single-byte table references,
|
|
30
|
+
at the cost of requiring an extra "tag" byte every 16 output bytes,
|
|
31
|
+
to differentiate literals and table references.
|
|
32
|
+
|
|
33
|
+
.. seealso::
|
|
34
|
+
Source - https://github.com/dgelessus/python-rsrcfork/blob/f891a6e/src/rsrcfork/compress/dcmp2.py
|
|
35
|
+
"""
|
|
36
|
+
SEQ_FIELDS = ["custom_lookup_table", "data", "last_byte"]
|
|
37
|
+
def __init__(self, len_decompressed, header_parameters_with_io, _io, _parent=None, _root=None):
|
|
38
|
+
self._io = _io
|
|
39
|
+
self._parent = _parent
|
|
40
|
+
self._root = _root if _root else self
|
|
41
|
+
self.len_decompressed = len_decompressed
|
|
42
|
+
self.header_parameters_with_io = header_parameters_with_io
|
|
43
|
+
self._debug = collections.defaultdict(dict)
|
|
44
|
+
|
|
45
|
+
def _read(self):
|
|
46
|
+
if self.header_parameters.flags.has_custom_lookup_table:
|
|
47
|
+
self._debug['custom_lookup_table']['start'] = self._io.pos()
|
|
48
|
+
self.custom_lookup_table = [None] * (self.header_parameters.num_custom_lookup_table_entries)
|
|
49
|
+
for i in range(self.header_parameters.num_custom_lookup_table_entries):
|
|
50
|
+
if not 'arr' in self._debug['custom_lookup_table']:
|
|
51
|
+
self._debug['custom_lookup_table']['arr'] = []
|
|
52
|
+
self._debug['custom_lookup_table']['arr'].append({'start': self._io.pos()})
|
|
53
|
+
self.custom_lookup_table[i] = self._io.read_bytes(2)
|
|
54
|
+
self._debug['custom_lookup_table']['arr'][i]['end'] = self._io.pos()
|
|
55
|
+
|
|
56
|
+
self._debug['custom_lookup_table']['end'] = self._io.pos()
|
|
57
|
+
|
|
58
|
+
self._debug['data']['start'] = self._io.pos()
|
|
59
|
+
_on = self.header_parameters.flags.tagged
|
|
60
|
+
if _on == True:
|
|
61
|
+
self._raw_data = self._io.read_bytes(((self._io.size() - self._io.pos()) - (1 if self.is_len_decompressed_odd else 0)))
|
|
62
|
+
_io__raw_data = KaitaiStream(BytesIO(self._raw_data))
|
|
63
|
+
self.data = Dcmp2.TaggedData(_io__raw_data, self, self._root)
|
|
64
|
+
self.data._read()
|
|
65
|
+
else:
|
|
66
|
+
self._raw_data = self._io.read_bytes(((self._io.size() - self._io.pos()) - (1 if self.is_len_decompressed_odd else 0)))
|
|
67
|
+
_io__raw_data = KaitaiStream(BytesIO(self._raw_data))
|
|
68
|
+
self.data = Dcmp2.UntaggedData(_io__raw_data, self, self._root)
|
|
69
|
+
self.data._read()
|
|
70
|
+
self._debug['data']['end'] = self._io.pos()
|
|
71
|
+
if self.is_len_decompressed_odd:
|
|
72
|
+
self._debug['last_byte']['start'] = self._io.pos()
|
|
73
|
+
self.last_byte = self._io.read_bytes(1)
|
|
74
|
+
self._debug['last_byte']['end'] = self._io.pos()
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class HeaderParameters(KaitaiStruct):
|
|
78
|
+
"""Decompressor-specific parameters for this compression format,
|
|
79
|
+
as stored in the compressed resource header.
|
|
80
|
+
"""
|
|
81
|
+
SEQ_FIELDS = ["unknown", "num_custom_lookup_table_entries_m1", "flags"]
|
|
82
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
83
|
+
self._io = _io
|
|
84
|
+
self._parent = _parent
|
|
85
|
+
self._root = _root if _root else self
|
|
86
|
+
self._debug = collections.defaultdict(dict)
|
|
87
|
+
|
|
88
|
+
def _read(self):
|
|
89
|
+
self._debug['unknown']['start'] = self._io.pos()
|
|
90
|
+
self.unknown = self._io.read_u2be()
|
|
91
|
+
self._debug['unknown']['end'] = self._io.pos()
|
|
92
|
+
self._debug['num_custom_lookup_table_entries_m1']['start'] = self._io.pos()
|
|
93
|
+
self.num_custom_lookup_table_entries_m1 = self._io.read_u1()
|
|
94
|
+
self._debug['num_custom_lookup_table_entries_m1']['end'] = self._io.pos()
|
|
95
|
+
self._debug['flags']['start'] = self._io.pos()
|
|
96
|
+
self.flags = Dcmp2.HeaderParameters.Flags(self._io, self, self._root)
|
|
97
|
+
self.flags._read()
|
|
98
|
+
self._debug['flags']['end'] = self._io.pos()
|
|
99
|
+
|
|
100
|
+
class Flags(KaitaiStruct):
|
|
101
|
+
"""Flags for the decompressor,
|
|
102
|
+
as stored in the decompressor-specific parameters.
|
|
103
|
+
"""
|
|
104
|
+
SEQ_FIELDS = ["reserved", "tagged", "has_custom_lookup_table"]
|
|
105
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
106
|
+
self._io = _io
|
|
107
|
+
self._parent = _parent
|
|
108
|
+
self._root = _root if _root else self
|
|
109
|
+
self._debug = collections.defaultdict(dict)
|
|
110
|
+
|
|
111
|
+
def _read(self):
|
|
112
|
+
self._debug['reserved']['start'] = self._io.pos()
|
|
113
|
+
self.reserved = self._io.read_bits_int_be(6)
|
|
114
|
+
self._debug['reserved']['end'] = self._io.pos()
|
|
115
|
+
self._debug['tagged']['start'] = self._io.pos()
|
|
116
|
+
self.tagged = self._io.read_bits_int_be(1) != 0
|
|
117
|
+
self._debug['tagged']['end'] = self._io.pos()
|
|
118
|
+
self._debug['has_custom_lookup_table']['start'] = self._io.pos()
|
|
119
|
+
self.has_custom_lookup_table = self._io.read_bits_int_be(1) != 0
|
|
120
|
+
self._debug['has_custom_lookup_table']['end'] = self._io.pos()
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def as_int(self):
|
|
124
|
+
"""The flags as a packed integer,
|
|
125
|
+
as they are stored in the data.
|
|
126
|
+
"""
|
|
127
|
+
if hasattr(self, '_m_as_int'):
|
|
128
|
+
return self._m_as_int if hasattr(self, '_m_as_int') else None
|
|
129
|
+
|
|
130
|
+
_pos = self._io.pos()
|
|
131
|
+
self._io.seek(0)
|
|
132
|
+
self._debug['_m_as_int']['start'] = self._io.pos()
|
|
133
|
+
self._m_as_int = self._io.read_u1()
|
|
134
|
+
self._debug['_m_as_int']['end'] = self._io.pos()
|
|
135
|
+
self._io.seek(_pos)
|
|
136
|
+
return self._m_as_int if hasattr(self, '_m_as_int') else None
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def num_custom_lookup_table_entries(self):
|
|
141
|
+
"""The number of entries in the custom lookup table.
|
|
142
|
+
Only used if a custom lookup table is present.
|
|
143
|
+
"""
|
|
144
|
+
if hasattr(self, '_m_num_custom_lookup_table_entries'):
|
|
145
|
+
return self._m_num_custom_lookup_table_entries if hasattr(self, '_m_num_custom_lookup_table_entries') else None
|
|
146
|
+
|
|
147
|
+
if self.flags.has_custom_lookup_table:
|
|
148
|
+
self._m_num_custom_lookup_table_entries = (self.num_custom_lookup_table_entries_m1 + 1)
|
|
149
|
+
|
|
150
|
+
return self._m_num_custom_lookup_table_entries if hasattr(self, '_m_num_custom_lookup_table_entries') else None
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class UntaggedData(KaitaiStruct):
|
|
154
|
+
"""Compressed data in the "untagged" variant of the format.
|
|
155
|
+
"""
|
|
156
|
+
SEQ_FIELDS = ["table_references"]
|
|
157
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
158
|
+
self._io = _io
|
|
159
|
+
self._parent = _parent
|
|
160
|
+
self._root = _root if _root else self
|
|
161
|
+
self._debug = collections.defaultdict(dict)
|
|
162
|
+
|
|
163
|
+
def _read(self):
|
|
164
|
+
self._debug['table_references']['start'] = self._io.pos()
|
|
165
|
+
self.table_references = []
|
|
166
|
+
i = 0
|
|
167
|
+
while not self._io.is_eof():
|
|
168
|
+
if not 'arr' in self._debug['table_references']:
|
|
169
|
+
self._debug['table_references']['arr'] = []
|
|
170
|
+
self._debug['table_references']['arr'].append({'start': self._io.pos()})
|
|
171
|
+
self.table_references.append(self._io.read_u1())
|
|
172
|
+
self._debug['table_references']['arr'][len(self.table_references) - 1]['end'] = self._io.pos()
|
|
173
|
+
i += 1
|
|
174
|
+
|
|
175
|
+
self._debug['table_references']['end'] = self._io.pos()
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class TaggedData(KaitaiStruct):
|
|
179
|
+
"""Compressed data in the "tagged" variant of the format.
|
|
180
|
+
"""
|
|
181
|
+
SEQ_FIELDS = ["chunks"]
|
|
182
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
183
|
+
self._io = _io
|
|
184
|
+
self._parent = _parent
|
|
185
|
+
self._root = _root if _root else self
|
|
186
|
+
self._debug = collections.defaultdict(dict)
|
|
187
|
+
|
|
188
|
+
def _read(self):
|
|
189
|
+
self._debug['chunks']['start'] = self._io.pos()
|
|
190
|
+
self.chunks = []
|
|
191
|
+
i = 0
|
|
192
|
+
while not self._io.is_eof():
|
|
193
|
+
if not 'arr' in self._debug['chunks']:
|
|
194
|
+
self._debug['chunks']['arr'] = []
|
|
195
|
+
self._debug['chunks']['arr'].append({'start': self._io.pos()})
|
|
196
|
+
_t_chunks = Dcmp2.TaggedData.Chunk(self._io, self, self._root)
|
|
197
|
+
_t_chunks._read()
|
|
198
|
+
self.chunks.append(_t_chunks)
|
|
199
|
+
self._debug['chunks']['arr'][len(self.chunks) - 1]['end'] = self._io.pos()
|
|
200
|
+
i += 1
|
|
201
|
+
|
|
202
|
+
self._debug['chunks']['end'] = self._io.pos()
|
|
203
|
+
|
|
204
|
+
class Chunk(KaitaiStruct):
|
|
205
|
+
"""A single tagged chunk of compressed data.
|
|
206
|
+
|
|
207
|
+
Each chunk expands to 16 bytes of decompressed data.
|
|
208
|
+
In compressed form,
|
|
209
|
+
the chunks have a variable length
|
|
210
|
+
(between 9 and 17 bytes)
|
|
211
|
+
depending on the value of the tag byte.
|
|
212
|
+
"""
|
|
213
|
+
SEQ_FIELDS = ["tag", "units"]
|
|
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['tag']['start'] = self._io.pos()
|
|
222
|
+
self.tag = [None] * (8)
|
|
223
|
+
for i in range(8):
|
|
224
|
+
if not 'arr' in self._debug['tag']:
|
|
225
|
+
self._debug['tag']['arr'] = []
|
|
226
|
+
self._debug['tag']['arr'].append({'start': self._io.pos()})
|
|
227
|
+
self.tag[i] = self._io.read_bits_int_be(1) != 0
|
|
228
|
+
self._debug['tag']['arr'][i]['end'] = self._io.pos()
|
|
229
|
+
|
|
230
|
+
self._debug['tag']['end'] = self._io.pos()
|
|
231
|
+
self._io.align_to_byte()
|
|
232
|
+
self._debug['units']['start'] = self._io.pos()
|
|
233
|
+
self._raw_units = []
|
|
234
|
+
self.units = []
|
|
235
|
+
i = 0
|
|
236
|
+
while True:
|
|
237
|
+
if not 'arr' in self._debug['units']:
|
|
238
|
+
self._debug['units']['arr'] = []
|
|
239
|
+
self._debug['units']['arr'].append({'start': self._io.pos()})
|
|
240
|
+
_on = self.tag[i]
|
|
241
|
+
if _on == True:
|
|
242
|
+
if not 'arr' in self._debug['units']:
|
|
243
|
+
self._debug['units']['arr'] = []
|
|
244
|
+
self._debug['units']['arr'].append({'start': self._io.pos()})
|
|
245
|
+
_ = self._io.read_u1()
|
|
246
|
+
self.units.append(_)
|
|
247
|
+
self._debug['units']['arr'][len(self.units) - 1]['end'] = self._io.pos()
|
|
248
|
+
else:
|
|
249
|
+
if not 'arr' in self._debug['units']:
|
|
250
|
+
self._debug['units']['arr'] = []
|
|
251
|
+
self._debug['units']['arr'].append({'start': self._io.pos()})
|
|
252
|
+
_ = self._io.read_bytes((1 if self.tag[i] else 2))
|
|
253
|
+
self.units.append(_)
|
|
254
|
+
self._debug['units']['arr'][len(self.units) - 1]['end'] = self._io.pos()
|
|
255
|
+
self._debug['units']['arr'][len(self.units) - 1]['end'] = self._io.pos()
|
|
256
|
+
if ((i >= 7) or (self._io.is_eof())) :
|
|
257
|
+
break
|
|
258
|
+
i += 1
|
|
259
|
+
self._debug['units']['end'] = self._io.pos()
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def header_parameters(self):
|
|
265
|
+
"""The parsed decompressor-specific parameters from the compressed resource header.
|
|
266
|
+
"""
|
|
267
|
+
if hasattr(self, '_m_header_parameters'):
|
|
268
|
+
return self._m_header_parameters if hasattr(self, '_m_header_parameters') else None
|
|
269
|
+
|
|
270
|
+
io = self.header_parameters_with_io._io
|
|
271
|
+
_pos = io.pos()
|
|
272
|
+
io.seek(0)
|
|
273
|
+
self._debug['_m_header_parameters']['start'] = io.pos()
|
|
274
|
+
self._m_header_parameters = Dcmp2.HeaderParameters(io, self, self._root)
|
|
275
|
+
self._m_header_parameters._read()
|
|
276
|
+
self._debug['_m_header_parameters']['end'] = io.pos()
|
|
277
|
+
io.seek(_pos)
|
|
278
|
+
return self._m_header_parameters if hasattr(self, '_m_header_parameters') else None
|
|
279
|
+
|
|
280
|
+
@property
|
|
281
|
+
def is_len_decompressed_odd(self):
|
|
282
|
+
"""Whether the length of the decompressed data is odd.
|
|
283
|
+
This affects the meaning of the last byte of the compressed data.
|
|
284
|
+
"""
|
|
285
|
+
if hasattr(self, '_m_is_len_decompressed_odd'):
|
|
286
|
+
return self._m_is_len_decompressed_odd if hasattr(self, '_m_is_len_decompressed_odd') else None
|
|
287
|
+
|
|
288
|
+
self._m_is_len_decompressed_odd = (self.len_decompressed % 2) != 0
|
|
289
|
+
return self._m_is_len_decompressed_odd if hasattr(self, '_m_is_len_decompressed_odd') else None
|
|
290
|
+
|
|
291
|
+
@property
|
|
292
|
+
def default_lookup_table(self):
|
|
293
|
+
"""The default lookup table,
|
|
294
|
+
which is used if no custom lookup table is included with the compressed data.
|
|
295
|
+
"""
|
|
296
|
+
if hasattr(self, '_m_default_lookup_table'):
|
|
297
|
+
return self._m_default_lookup_table if hasattr(self, '_m_default_lookup_table') else None
|
|
298
|
+
|
|
299
|
+
self._m_default_lookup_table = [b"\x00\x00", b"\x00\x08", b"\x4E\xBA", b"\x20\x6E", b"\x4E\x75", b"\x00\x0C", b"\x00\x04", b"\x70\x00", b"\x00\x10", b"\x00\x02", b"\x48\x6E", b"\xFF\xFC", b"\x60\x00", b"\x00\x01", b"\x48\xE7", b"\x2F\x2E", b"\x4E\x56", b"\x00\x06", b"\x4E\x5E", b"\x2F\x00", b"\x61\x00", b"\xFF\xF8", b"\x2F\x0B", b"\xFF\xFF", b"\x00\x14", b"\x00\x0A", b"\x00\x18", b"\x20\x5F", b"\x00\x0E", b"\x20\x50", b"\x3F\x3C", b"\xFF\xF4", b"\x4C\xEE", b"\x30\x2E", b"\x67\x00", b"\x4C\xDF", b"\x26\x6E", b"\x00\x12", b"\x00\x1C", b"\x42\x67", b"\xFF\xF0", b"\x30\x3C", b"\x2F\x0C", b"\x00\x03", b"\x4E\xD0", b"\x00\x20", b"\x70\x01", b"\x00\x16", b"\x2D\x40", b"\x48\xC0", b"\x20\x78", b"\x72\x00", b"\x58\x8F", b"\x66\x00", b"\x4F\xEF", b"\x42\xA7", b"\x67\x06", b"\xFF\xFA", b"\x55\x8F", b"\x28\x6E", b"\x3F\x00", b"\xFF\xFE", b"\x2F\x3C", b"\x67\x04", b"\x59\x8F", b"\x20\x6B", b"\x00\x24", b"\x20\x1F", b"\x41\xFA", b"\x81\xE1", b"\x66\x04", b"\x67\x08", b"\x00\x1A", b"\x4E\xB9", b"\x50\x8F", b"\x20\x2E", b"\x00\x07", b"\x4E\xB0", b"\xFF\xF2", b"\x3D\x40", b"\x00\x1E", b"\x20\x68", b"\x66\x06", b"\xFF\xF6", b"\x4E\xF9", b"\x08\x00", b"\x0C\x40", b"\x3D\x7C", b"\xFF\xEC", b"\x00\x05", b"\x20\x3C", b"\xFF\xE8", b"\xDE\xFC", b"\x4A\x2E", b"\x00\x30", b"\x00\x28", b"\x2F\x08", b"\x20\x0B", b"\x60\x02", b"\x42\x6E", b"\x2D\x48", b"\x20\x53", b"\x20\x40", b"\x18\x00", b"\x60\x04", b"\x41\xEE", b"\x2F\x28", b"\x2F\x01", b"\x67\x0A", b"\x48\x40", b"\x20\x07", b"\x66\x08", b"\x01\x18", b"\x2F\x07", b"\x30\x28", b"\x3F\x2E", b"\x30\x2B", b"\x22\x6E", b"\x2F\x2B", b"\x00\x2C", b"\x67\x0C", b"\x22\x5F", b"\x60\x06", b"\x00\xFF", b"\x30\x07", b"\xFF\xEE", b"\x53\x40", b"\x00\x40", b"\xFF\xE4", b"\x4A\x40", b"\x66\x0A", b"\x00\x0F", b"\x4E\xAD", b"\x70\xFF", b"\x22\xD8", b"\x48\x6B", b"\x00\x22", b"\x20\x4B", b"\x67\x0E", b"\x4A\xAE", b"\x4E\x90", b"\xFF\xE0", b"\xFF\xC0", b"\x00\x2A", b"\x27\x40", b"\x67\x02", b"\x51\xC8", b"\x02\xB6", b"\x48\x7A", b"\x22\x78", b"\xB0\x6E", b"\xFF\xE6", b"\x00\x09", b"\x32\x2E", b"\x3E\x00", b"\x48\x41", b"\xFF\xEA", b"\x43\xEE", b"\x4E\x71", b"\x74\x00", b"\x2F\x2C", b"\x20\x6C", b"\x00\x3C", b"\x00\x26", b"\x00\x50", b"\x18\x80", b"\x30\x1F", b"\x22\x00", b"\x66\x0C", b"\xFF\xDA", b"\x00\x38", b"\x66\x02", b"\x30\x2C", b"\x20\x0C", b"\x2D\x6E", b"\x42\x40", b"\xFF\xE2", b"\xA9\xF0", b"\xFF\x00", b"\x37\x7C", b"\xE5\x80", b"\xFF\xDC", b"\x48\x68", b"\x59\x4F", b"\x00\x34", b"\x3E\x1F", b"\x60\x08", b"\x2F\x06", b"\xFF\xDE", b"\x60\x0A", b"\x70\x02", b"\x00\x32", b"\xFF\xCC", b"\x00\x80", b"\x22\x51", b"\x10\x1F", b"\x31\x7C", b"\xA0\x29", b"\xFF\xD8", b"\x52\x40", b"\x01\x00", b"\x67\x10", b"\xA0\x23", b"\xFF\xCE", b"\xFF\xD4", b"\x20\x06", b"\x48\x78", b"\x00\x2E", b"\x50\x4F", b"\x43\xFA", b"\x67\x12", b"\x76\x00", b"\x41\xE8", b"\x4A\x6E", b"\x20\xD9", b"\x00\x5A", b"\x7F\xFF", b"\x51\xCA", b"\x00\x5C", b"\x2E\x00", b"\x02\x40", b"\x48\xC7", b"\x67\x14", b"\x0C\x80", b"\x2E\x9F", b"\xFF\xD6", b"\x80\x00", b"\x10\x00", b"\x48\x42", b"\x4A\x6B", b"\xFF\xD2", b"\x00\x48", b"\x4A\x47", b"\x4E\xD1", b"\x20\x6F", b"\x00\x41", b"\x60\x0C", b"\x2A\x78", b"\x42\x2E", b"\x32\x00", b"\x65\x74", b"\x67\x16", b"\x00\x44", b"\x48\x6D", b"\x20\x08", b"\x48\x6C", b"\x0B\x7C", b"\x26\x40", b"\x04\x00", b"\x00\x68", b"\x20\x6D", b"\x00\x0D", b"\x2A\x40", b"\x00\x0B", b"\x00\x3E", b"\x02\x20"]
|
|
300
|
+
return self._m_default_lookup_table if hasattr(self, '_m_default_lookup_table') else None
|
|
301
|
+
|
|
302
|
+
@property
|
|
303
|
+
def lookup_table(self):
|
|
304
|
+
"""The lookup table to be used for this compressed data.
|
|
305
|
+
"""
|
|
306
|
+
if hasattr(self, '_m_lookup_table'):
|
|
307
|
+
return self._m_lookup_table if hasattr(self, '_m_lookup_table') else None
|
|
308
|
+
|
|
309
|
+
self._m_lookup_table = (self.custom_lookup_table if self.header_parameters.flags.has_custom_lookup_table else self.default_lookup_table)
|
|
310
|
+
return self._m_lookup_table if hasattr(self, '_m_lookup_table') else None
|
|
311
|
+
|
|
312
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
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 DcmpVariableLengthInteger(KaitaiStruct):
|
|
13
|
+
"""A variable-length integer,
|
|
14
|
+
in the format used by the 0xfe chunks in the `'dcmp' (0)` and `'dcmp' (1)` resource compression formats.
|
|
15
|
+
See the dcmp_0 and dcmp_1 specs for more information about these compression formats.
|
|
16
|
+
|
|
17
|
+
This variable-length integer format can store an integer `x` in any of the following ways:
|
|
18
|
+
|
|
19
|
+
* In a single byte,
|
|
20
|
+
if `0 <= x <= 0x7f`
|
|
21
|
+
(7-bit unsigned integer)
|
|
22
|
+
* In 2 bytes,
|
|
23
|
+
if `-0x4000 <= x <= 0x3eff`
|
|
24
|
+
(15-bit signed integer with the highest `0x100` values unavailable)
|
|
25
|
+
* In 5 bytes, if `-0x80000000 <= x <= 0x7fffffff`
|
|
26
|
+
(32-bit signed integer)
|
|
27
|
+
|
|
28
|
+
In practice,
|
|
29
|
+
values are always stored in the smallest possible format,
|
|
30
|
+
but technically any of the larger formats could be used as well.
|
|
31
|
+
|
|
32
|
+
.. seealso::
|
|
33
|
+
Source - https://github.com/dgelessus/python-rsrcfork/blob/f891a6e/src/rsrcfork/compress/common.py
|
|
34
|
+
"""
|
|
35
|
+
SEQ_FIELDS = ["first", "more"]
|
|
36
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
37
|
+
self._io = _io
|
|
38
|
+
self._parent = _parent
|
|
39
|
+
self._root = _root if _root else self
|
|
40
|
+
self._debug = collections.defaultdict(dict)
|
|
41
|
+
|
|
42
|
+
def _read(self):
|
|
43
|
+
self._debug['first']['start'] = self._io.pos()
|
|
44
|
+
self.first = self._io.read_u1()
|
|
45
|
+
self._debug['first']['end'] = self._io.pos()
|
|
46
|
+
if self.first >= 128:
|
|
47
|
+
self._debug['more']['start'] = self._io.pos()
|
|
48
|
+
_on = self.first
|
|
49
|
+
if _on == 255:
|
|
50
|
+
self.more = self._io.read_s4be()
|
|
51
|
+
else:
|
|
52
|
+
self.more = self._io.read_u1()
|
|
53
|
+
self._debug['more']['end'] = self._io.pos()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def value(self):
|
|
58
|
+
"""The decoded value of the variable-length integer.
|
|
59
|
+
"""
|
|
60
|
+
if hasattr(self, '_m_value'):
|
|
61
|
+
return self._m_value if hasattr(self, '_m_value') else None
|
|
62
|
+
|
|
63
|
+
self._m_value = (self.more if self.first == 255 else ((((self.first << 8) | self.more) - 49152) if self.first >= 128 else self.first))
|
|
64
|
+
return self._m_value if hasattr(self, '_m_value') else None
|
|
65
|
+
|
|
66
|
+
|