Pseudolocalizer.h revision 393b5f0d6130d3848dd82075986a5cf40c09ce44
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