1fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert#ifndef HOST_PSEUDOLOCALIZE_H
2fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert#define HOST_PSEUDOLOCALIZE_H
3fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert
4be5474da4bfc961419feaee5046162e8524f08c1Elliott Hughes#include <android-base/macros.h>
5a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin#include "StringPool.h"
6a2ef5c0d4fb863c0382e77ae00f986a019b11cbeAnton Krumin
7cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichykclass PseudoMethodImpl {
8cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk public:
9cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  virtual ~PseudoMethodImpl() {}
10cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  virtual String16 start() { return String16(); }
11cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  virtual String16 end() { return String16(); }
12cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  virtual String16 text(const String16& text) = 0;
13cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  virtual String16 placeholder(const String16& text) = 0;
14cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk};
15fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert
16cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichykclass PseudoMethodNone : public PseudoMethodImpl {
17cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk public:
18cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  PseudoMethodNone() {}
19cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 text(const String16& text) { return text; }
20cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 placeholder(const String16& text) { return text; }
21cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk private:
22cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  DISALLOW_COPY_AND_ASSIGN(PseudoMethodNone);
23cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk};
24cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk
25cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichykclass PseudoMethodBidi : public PseudoMethodImpl {
26cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk public:
27cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 text(const String16& text);
28cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 placeholder(const String16& text);
29cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk};
30cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk
31cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichykclass PseudoMethodAccent : public PseudoMethodImpl {
32cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk public:
33cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  PseudoMethodAccent() : mDepth(0), mWordCount(0), mLength(0) {}
34cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 start();
35cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 end();
36cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 text(const String16& text);
37cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 placeholder(const String16& text);
38cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk private:
39cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  size_t mDepth;
40cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  size_t mWordCount;
41cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  size_t mLength;
42cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk};
43cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk
44cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichykclass Pseudolocalizer {
45cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk public:
469b8528fee4eed35b8e887ded0851d08eb2b10db6Chih-Hung Hsieh  explicit Pseudolocalizer(PseudolocalizationMethod m);
47cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  ~Pseudolocalizer() { if (mImpl) delete mImpl; }
48cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  void setMethod(PseudolocalizationMethod m);
49cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 start() { return mImpl->start(); }
50cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 end() { return mImpl->end(); }
51cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  String16 text(const String16& text);
52cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk private:
53cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  PseudoMethodImpl *mImpl;
54cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk  size_t mLastDepth;
55cbb1e676b56677ae3585c067f29646dddffb4857Igor Viarheichyk};
56fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert
57fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert#endif // HOST_PSEUDOLOCALIZE_H
58fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4Bjorn Bringert
59