ResourceTypeExtensions.h revision 6f6ceb7e1456698b1f33e04536bfb3227f9fcfcb
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 {
336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * A chunk that holds the string pool
356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * for source entries (path/to/source:line).
366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    RES_TABLE_SOURCE_POOL_TYPE = 0x000e,
386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * A chunk holding names of externally
416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * defined symbols and offsets to where
426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * they are referenced in the table.
436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    RES_TABLE_SYMBOL_TABLE_TYPE = 0x000f,
456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * New resource types that are meant to only be used
496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * by AAPT and will not end up on the device.
506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ExtendedTypes {
526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    enum {
536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        /**
546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * A sentinel value used when a resource is defined as
556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * public but it has no defined value yet. If we don't
566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * flatten it with some value, we will lose its name.
576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         */
586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        TYPE_SENTINEL = 0xff,
596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        /**
616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * A raw string value that hasn't had its escape sequences
626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         * processed nor whitespace removed.
636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski         */
646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        TYPE_RAW_STRING = 0xfe
656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    };
666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
696f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A chunk with type RES_TABLE_SYMBOL_TABLE_TYPE.
706f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Following the header are count number of SymbolTable_entry
716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * structures, followed by an android::ResStringPool_header.
726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_header {
746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    android::ResChunk_header header;
756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Number of SymbolTable_entry structures following
786f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * this header.
796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t count;
816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
826f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
836f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_entry {
846f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
856f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Offset from the beginning of the resource table
866f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * where the symbol entry is referenced.
876f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
886f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t offset;
896f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
906f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
916f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * The index into the string pool where the name of this
926f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * symbol exists.
936f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
946f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t stringIndex;
956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
966f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
976f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/**
986f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A structure representing the source of a resourc entry.
996f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Appears after an android::ResTable_entry or android::ResTable_map_entry.
1006f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
1016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * TODO(adamlesinski): This causes some issues when runtime code checks
1026f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * the size of an android::ResTable_entry. It assumes it is an
1036f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * android::ResTable_map_entry if the size is bigger than an android::ResTable_entry
1046f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * which may not be true if this structure is present.
1056f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
1066f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ResTable_entry_source {
1076f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Index into the source string pool.
1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t pathIndex;
1116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    /**
1136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     * Line number this resource was defined on.
1146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski     */
1156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    uint32_t line;
1166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt
1196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
1206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_RESOURCE_TYPE_EXTENSIONS_H
121