16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/*
26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project
36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License.
66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at
76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software
116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and
146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License.
156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef AAPT_RESOURCE_TYPE_EXTENSIONS_H
186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_RESOURCE_TYPE_EXTENSIONS_H
196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <androidfw/ResourceTypes.h>
216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt {
236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * New android::ResChunk_header types defined
266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * for AAPT to use.
276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * TODO(adamlesinski): Consider reserving these
296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * enums in androidfw/ResourceTypes.h to avoid
306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * future collisions.
316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskienum {
336ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    RES_TABLE_PUBLIC_TYPE = 0x000d,
346ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * A chunk that holds the string pool
376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * for source entries (path/to/source:line).
386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    RES_TABLE_SOURCE_POOL_TYPE = 0x000e,
406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * A chunk holding names of externally
436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * defined symbols and offsets to where
446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * they are referenced in the table.
456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    RES_TABLE_SYMBOL_TABLE_TYPE = 0x000f,
476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * New resource types that are meant to only be used
516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * by AAPT and will not end up on the device.
526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ExtendedTypes {
546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    enum {
556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        /**
566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * A raw string value that hasn't had its escape sequences
576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * processed nor whitespace removed.
586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         */
596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        TYPE_RAW_STRING = 0xfe
606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    };
616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
636ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinskistruct Public_header {
646ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    android::ResChunk_header header;
656ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
666ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    /**
676ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     * The ID of the type this structure refers to.
686ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     */
696ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint8_t typeId;
706ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
716ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    /**
726ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     * Reserved. Must be 0.
736ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     */
746ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint8_t res0;
756ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
766ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    /**
776ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     * Reserved. Must be 0.
786ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     */
796ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint16_t res1;
806ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
816ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    /**
826ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     * Number of public entries.
836ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski     */
846ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint32_t count;
856ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski};
866ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
876ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinskistruct Public_entry {
886ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint16_t entryId;
896ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint16_t res0;
906ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    android::ResStringPool_ref key;
916ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    android::ResStringPool_ref source;
926ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski    uint32_t sourceLine;
936ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski};
946ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski
956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
966f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A chunk with type RES_TABLE_SYMBOL_TABLE_TYPE.
976f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Following the header are count number of SymbolTable_entry
986f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * structures, followed by an android::ResStringPool_header.
996f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
1006f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_header {
1016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    android::ResChunk_header header;
1026f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1036f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1046f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Number of SymbolTable_entry structures following
1056f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * this header.
1066f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1076f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t count;
1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_entry {
1116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Offset from the beginning of the resource table
1136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * where the symbol entry is referenced.
1146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t offset;
1166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * The index into the string pool where the name of this
1196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * symbol exists.
1206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t stringIndex;
1226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
1256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A structure representing the source of a resourc entry.
1266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Appears after an android::ResTable_entry or android::ResTable_map_entry.
1276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
1286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * TODO(adamlesinski): This causes some issues when runtime code checks
1296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * the size of an android::ResTable_entry. It assumes it is an
1306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * android::ResTable_map_entry if the size is bigger than an android::ResTable_entry
1316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * which may not be true if this structure is present.
1326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
1336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ResTable_entry_source {
1346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Index into the source string pool.
1366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t pathIndex;
1386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Line number this resource was defined on.
1416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t line;
1436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt
1466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_RESOURCE_TYPE_EXTENSIONS_H
148