1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************** 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copyright (c) 2001-2007, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Date Name Description 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 11/20/2001 aliu Creation. 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************** 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef UNESCTRN_H 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UNESCTRN_H 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/translit.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A transliterator that converts Unicode escape forms to the 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * characters they represent. Escape forms have a prefix, a suffix, a 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * radix, and minimum and maximum digit counts. 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <p>This class is package private. It registers several standard 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * variants with the system which are then accessed via their IDs. 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Alan Liu 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass UnescapeTransliterator : public Transliterator { 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The encoded pattern specification. The pattern consists of 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * zero or more forms. Each form consists of a prefix, suffix, 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * radix, minimum digit count, and maximum digit count. These 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * values are stored as a five character header. That is, their 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * numeric values are cast to 16-bit characters and stored in the 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * string. Following these five characters, the prefix 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * characters, then suffix characters are stored. Each form thus 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * takes n+5 characters, where n is the total length of the prefix 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and suffix. The end is marked by a header of length one 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * consisting of the character END. 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* spec; // owned; may not be NULL 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Registers standard variants with the system. Called by 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Transliterator during initialization. 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static void registerIDs(); 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Constructor. Takes the encoded spec array (does not adopt it). 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param ID the string identifier for this transliterator 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param spec the encoded spec array 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnescapeTransliterator(const UnicodeString& ID, 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *spec); 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copy constructor. 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnescapeTransliterator(const UnescapeTransliterator&); 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Destructor. 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ~UnescapeTransliterator(); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Transliterator API. 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual Transliterator* clone() const; 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UClassID getDynamicClassID() const; 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_I18N_API static UClassID U_EXPORT2 getStaticClassID(); 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru protected: 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Implements {@link Transliterator#handleTransliterate}. 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param text the buffer holding transliterated and 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * untransliterated text 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param offset the start and limit of the text, the position 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of the cursor, and the start and limit of transliteration. 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param incremental if true, assume more text may be coming after 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * pos.contextLimit. Otherwise, assume the text is complete. 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual void handleTransliterate(Replaceable& text, UTransPosition& offset, 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool isIncremental) const; 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */ 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 111