Add support for kEmbeddedBitmapText_Flag to DirectWrite.

R=reed@google.com

Review URL: https://codereview.chromium.org/263503004

git-svn-id: http://skia.googlecode.com/svn/trunk@14518 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/sfnt/SkOTTable_EBDT.h b/src/sfnt/SkOTTable_EBDT.h
new file mode 100644
index 0000000..89d7a3a
--- /dev/null
+++ b/src/sfnt/SkOTTable_EBDT.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkOTTable_EBDT_DEFINED
+#define SkOTTable_EBDT_DEFINED
+
+#include "SkEndian.h"
+#include "SkOTTableTypes.h"
+#include "SkOTTable_head.h"
+#include "SkOTTable_loca.h"
+#include "SkTypedEnum.h"
+
+#pragma pack(push, 1)
+
+struct SkOTTableEmbeddedBitmapData {
+    static const SK_OT_CHAR TAG0 = 'E';
+    static const SK_OT_CHAR TAG1 = 'B';
+    static const SK_OT_CHAR TAG2 = 'D';
+    static const SK_OT_CHAR TAG3 = 'T';
+    static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableEmbeddedBitmapData>::value;
+
+    SK_OT_Fixed version;
+    static const SK_OT_Fixed version_initial = SkTEndian_SwapBE32(0x00020000);
+
+    struct BigGlyphMetrics {
+        SK_OT_BYTE height;
+        SK_OT_BYTE width;
+        SK_OT_CHAR horiBearingX;
+        SK_OT_CHAR horiBearingY;
+        SK_OT_BYTE horiAdvance;
+        SK_OT_CHAR vertBearingX;
+        SK_OT_CHAR vertBearingY;
+        SK_OT_BYTE vertAdvance;
+    };
+
+    struct SmallGlyphMetrics {
+        SK_OT_BYTE height;
+        SK_OT_BYTE width;
+        SK_OT_CHAR bearingX;
+        SK_OT_CHAR bearingY;
+        SK_OT_BYTE advance;
+    };
+
+    // Small metrics, byte-aligned data.
+    struct Format1 {
+        SmallGlyphMetrics smallGlyphMetrics;
+        //SK_OT_BYTE[] byteAlignedBitmap;
+    };
+
+    // Small metrics, bit-aligned data.
+    struct Format2 {
+        SmallGlyphMetrics smallGlyphMetrics;
+        //SK_OT_BYTE[] bitAlignedBitmap;
+    };
+
+    // Format 3 is not used.
+
+    // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), compressed data.
+    // Only used on Mac.
+    struct Format4 {
+        SK_OT_ULONG whiteTreeOffset;
+        SK_OT_ULONG blackTreeOffset;
+        SK_OT_ULONG glyphDataOffset;
+    };
+
+    // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), bit-aligned data.
+    struct Format5 {
+        //SK_OT_BYTE[] bitAlignedBitmap;
+    };
+
+    // Big metrics, byte-aligned data.
+    struct Format6 {
+        BigGlyphMetrics bigGlyphMetrics;
+        //SK_OT_BYTE[] byteAlignedBitmap;
+    };
+
+    // Big metrics, bit-aligned data.
+    struct Format7 {
+        BigGlyphMetrics bigGlyphMetrics;
+        //SK_OT_BYTE[] bitAlignedBitmap;
+    };
+
+    struct EBDTComponent {
+        SK_OT_USHORT glyphCode; // Component glyph code
+        SK_OT_CHAR xOffset; // Position of component left
+        SK_OT_CHAR yOffset; // Position of component top
+    };
+
+    struct Format8 {
+        SmallGlyphMetrics smallMetrics; // Metrics information for the glyph
+        SK_OT_BYTE pad; // Pad to short boundary
+        SK_OT_USHORT numComponents; // Number of components
+        //EBDTComponent componentArray[numComponents]; // Glyph code, offset array
+    };
+
+    struct Format9 {
+        BigGlyphMetrics bigMetrics; // Metrics information for the glyph
+        SK_OT_USHORT numComponents; // Number of components
+        //EBDTComponent componentArray[numComponents]; // Glyph code, offset array
+    };
+};
+
+#pragma pack(pop)
+
+#endif