summaryrefslogtreecommitdiff
path: root/external/construct/formats/graphics/wmf.py
diff options
context:
space:
mode:
Diffstat (limited to 'external/construct/formats/graphics/wmf.py')
-rw-r--r--external/construct/formats/graphics/wmf.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/external/construct/formats/graphics/wmf.py b/external/construct/formats/graphics/wmf.py
new file mode 100644
index 0000000..55e79dd
--- /dev/null
+++ b/external/construct/formats/graphics/wmf.py
@@ -0,0 +1,129 @@
+"""
+Windows Meta File
+"""
+from construct import *
+
+
+wmf_record = Struct("records",
+ ULInt32("size"), # size in words, including the size, function and params
+ Enum(ULInt16("function"),
+ AbortDoc = 0x0052,
+ Aldus_Header = 0x0001,
+ AnimatePalette = 0x0436,
+ Arc = 0x0817,
+ BitBlt = 0x0922,
+ Chord = 0x0830,
+ CLP_Header16 = 0x0002,
+ CLP_Header32 = 0x0003,
+ CreateBitmap = 0x06FE,
+ CreateBitmapIndirect = 0x02FD,
+ CreateBrush = 0x00F8,
+ CreateBrushIndirect = 0x02FC,
+ CreateFontIndirect = 0x02FB,
+ CreatePalette = 0x00F7,
+ CreatePatternBrush = 0x01F9,
+ CreatePenIndirect = 0x02FA,
+ CreateRegion = 0x06FF,
+ DeleteObject = 0x01F0,
+ DibBitblt = 0x0940,
+ DibCreatePatternBrush = 0x0142,
+ DibStretchBlt = 0x0B41,
+ DrawText = 0x062F,
+ Ellipse = 0x0418,
+ EndDoc = 0x005E,
+ EndPage = 0x0050,
+ EOF = 0x0000,
+ Escape = 0x0626,
+ ExcludeClipRect = 0x0415,
+ ExtFloodFill = 0x0548,
+ ExtTextOut = 0x0A32,
+ FillRegion = 0x0228,
+ FloodFill = 0x0419,
+ FrameRegion = 0x0429,
+ Header = 0x0004,
+ IntersectClipRect = 0x0416,
+ InvertRegion = 0x012A,
+ LineTo = 0x0213,
+ MoveTo = 0x0214,
+ OffsetClipRgn = 0x0220,
+ OffsetViewportOrg = 0x0211,
+ OffsetWindowOrg = 0x020F,
+ PaintRegion = 0x012B,
+ PatBlt = 0x061D,
+ Pie = 0x081A,
+ Polygon = 0x0324,
+ Polyline = 0x0325,
+ PolyPolygon = 0x0538,
+ RealizePalette = 0x0035,
+ Rectangle = 0x041B,
+ ResetDC = 0x014C,
+ ResizePalette = 0x0139,
+ RestoreDC = 0x0127,
+ RoundRect = 0x061C,
+ SaveDC = 0x001E,
+ ScaleViewportExt = 0x0412,
+ ScaleWindowExt = 0x0410,
+ SelectClipRegion = 0x012C,
+ SelectObject = 0x012D,
+ SelectPalette = 0x0234,
+ SetBKColor = 0x0201,
+ SetBKMode = 0x0102,
+ SetDibToDev = 0x0D33,
+ SelLayout = 0x0149,
+ SetMapMode = 0x0103,
+ SetMapperFlags = 0x0231,
+ SetPalEntries = 0x0037,
+ SetPixel = 0x041F,
+ SetPolyFillMode = 0x0106,
+ SetReLabs = 0x0105,
+ SetROP2 = 0x0104,
+ SetStretchBltMode = 0x0107,
+ SetTextAlign = 0x012E,
+ SetTextCharExtra = 0x0108,
+ SetTextColor = 0x0209,
+ SetTextJustification = 0x020A,
+ SetViewportExt = 0x020E,
+ SetViewportOrg = 0x020D,
+ SetWindowExt = 0x020C,
+ SetWindowOrg = 0x020B,
+ StartDoc = 0x014D,
+ StartPage = 0x004F,
+ StretchBlt = 0x0B23,
+ StretchDIB = 0x0F43,
+ TextOut = 0x0521,
+ _default_ = Pass,
+ ),
+ Array(lambda ctx: ctx.size - 3, ULInt16("params")),
+)
+
+wmf_placeable_header = Struct("placeable_header",
+ Const(ULInt32("key"), 0x9AC6CDD7),
+ ULInt16("handle"),
+ SLInt16("left"),
+ SLInt16("top"),
+ SLInt16("right"),
+ SLInt16("bottom"),
+ ULInt16("units_per_inch"),
+ Padding(4),
+ ULInt16("checksum")
+)
+
+wmf_file = Struct("wmf_file",
+ # --- optional placeable header ---
+ Optional(wmf_placeable_header),
+
+ # --- header ---
+ Enum(ULInt16("type"),
+ InMemory = 0,
+ File = 1,
+ ),
+ Const(ULInt16("header_size"), 9),
+ ULInt16("version"),
+ ULInt32("size"), # file size is in words
+ ULInt16("number_of_objects"),
+ ULInt32("size_of_largest_record"),
+ ULInt16("number_of_params"),
+
+ # --- records ---
+ GreedyRange(wmf_record)
+)