1393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski/* 2393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * Copyright (C) 2015 The Android Open Source Project 3393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * 4393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * you may not use this file except in compliance with the License. 6393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * You may obtain a copy of the License at 7393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * 8393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * 10393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * See the License for the specific language governing permissions and 14393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski * limitations under the License. 15393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski */ 16393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 17393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#ifndef AAPT_COMPILE_PSEUDOLOCALIZE_H 18393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#define AAPT_COMPILE_PSEUDOLOCALIZE_H 19393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 20393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#include "ResourceValues.h" 21393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#include "StringPool.h" 22393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#include "util/StringPiece.h" 23393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 24393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#include <android-base/macros.h> 25393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#include <memory> 26393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 27393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskinamespace aapt { 28393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 29393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskiclass PseudoMethodImpl { 30393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskipublic: 31393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski virtual ~PseudoMethodImpl() {} 32393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski virtual std::u16string start() { return {}; } 33393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski virtual std::u16string end() { return {}; } 34393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski virtual std::u16string text(const StringPiece16& text) = 0; 35393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski virtual std::u16string placeholder(const StringPiece16& text) = 0; 36393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski}; 37393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 38393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskiclass Pseudolocalizer { 39393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskipublic: 40393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski enum class Method { 41393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski kNone, 42393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski kAccent, 43393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski kBidi, 44393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski }; 45393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 46393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski Pseudolocalizer(Method method); 47393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski void setMethod(Method method); 48393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski std::u16string start() { return mImpl->start(); } 49393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski std::u16string end() { return mImpl->end(); } 50393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski std::u16string text(const StringPiece16& text); 51393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinskiprivate: 52393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski std::unique_ptr<PseudoMethodImpl> mImpl; 53393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski size_t mLastDepth; 54393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski}; 55393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 56393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski} // namespace aapt 57393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski 58393b5f0d6130d3848dd82075986a5cf40c09ce44Adam Lesinski#endif /* AAPT_COMPILE_PSEUDOLOCALIZE_H */ 59