| Index: icu46/source/i18n/uspoof_conf.h
|
| ===================================================================
|
| --- icu46/source/i18n/uspoof_conf.h (revision 0)
|
| +++ icu46/source/i18n/uspoof_conf.h (revision 0)
|
| @@ -0,0 +1,132 @@
|
| +/*
|
| +******************************************************************************
|
| +*
|
| +* Copyright (C) 2008-2009, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +*
|
| +******************************************************************************
|
| +* file name: uspoof_conf.h
|
| +* encoding: US-ASCII
|
| +* tab size: 8 (not used)
|
| +* indentation:4
|
| +*
|
| +* created on: 2009Jan05
|
| +* created by: Andy Heninger
|
| +*
|
| +* Internal classes for compiling confusable data into its binary (runtime) form.
|
| +*/
|
| +
|
| +#ifndef __USPOOF_BUILDCONF_H__
|
| +#define __USPOOF_BUILDCONF_H__
|
| +
|
| +#if !UCONFIG_NO_NORMALIZATION
|
| +
|
| +#if !UCONFIG_NO_REGULAR_EXPRESSIONS
|
| +
|
| +#include "uspoof_impl.h"
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +// SPUString
|
| +// Holds a string that is the result of one of the mappings defined
|
| +// by the confusable mapping data (confusables.txt from Unicode.org)
|
| +// Instances of SPUString exist during the compilation process only.
|
| +
|
| +struct SPUString : public UMemory {
|
| + UnicodeString *fStr; // The actual string.
|
| + int32_t fStrTableIndex; // Index into the final runtime data for this string.
|
| + // (or, for length 1, the single string char itself,
|
| + // there being no string table entry for it.)
|
| + SPUString(UnicodeString *s);
|
| + ~SPUString();
|
| +};
|
| +
|
| +
|
| +// String Pool A utility class for holding the strings that are the result of
|
| +// the spoof mappings. These strings will utimately end up in the
|
| +// run-time String Table.
|
| +// This is sort of like a sorted set of strings, except that ICU's anemic
|
| +// built-in collections don't support those, so it is implemented with a
|
| +// combination of a uhash and a UVector.
|
| +
|
| +
|
| +class SPUStringPool : public UMemory {
|
| + public:
|
| + SPUStringPool(UErrorCode &status);
|
| + ~SPUStringPool();
|
| +
|
| + // Add a string. Return the string from the table.
|
| + // If the input parameter string is already in the table, delete the
|
| + // input parameter and return the existing string.
|
| + SPUString *addString(UnicodeString *src, UErrorCode &status);
|
| +
|
| +
|
| + // Get the n-th string in the collection.
|
| + SPUString *getByIndex(int32_t i);
|
| +
|
| + // Sort the contents; affects the ordering of getByIndex().
|
| + void sort(UErrorCode &status);
|
| +
|
| + int32_t size();
|
| +
|
| + private:
|
| + UVector *fVec; // Elements are SPUString *
|
| + UHashtable *fHash; // Key: UnicodeString Value: SPUString
|
| +};
|
| +
|
| +
|
| +// class ConfusabledataBuilder
|
| +// An instance of this class exists while the confusable data is being built from source.
|
| +// It encapsulates the intermediate data structures that are used for building.
|
| +// It exports one static function, to do a confusable data build.
|
| +
|
| +class ConfusabledataBuilder : public UMemory {
|
| + private:
|
| + SpoofImpl *fSpoofImpl;
|
| + UChar *fInput;
|
| + UHashtable *fSLTable;
|
| + UHashtable *fSATable;
|
| + UHashtable *fMLTable;
|
| + UHashtable *fMATable;
|
| + UnicodeSet *fKeySet; // A set of all keys (UChar32s) that go into the four mapping tables.
|
| +
|
| + // The binary data is first assembled into the following four collections, then
|
| + // copied to its final raw-memory destination.
|
| + UVector *fKeyVec;
|
| + UVector *fValueVec;
|
| + UnicodeString *fStringTable;
|
| + UVector *fStringLengthsTable;
|
| +
|
| + SPUStringPool *stringPool;
|
| + URegularExpression *fParseLine;
|
| + URegularExpression *fParseHexNum;
|
| + int32_t fLineNum;
|
| +
|
| + ConfusabledataBuilder(SpoofImpl *spImpl, UErrorCode &status);
|
| + ~ConfusabledataBuilder();
|
| + void build(const char * confusables, int32_t confusablesLen, UErrorCode &status);
|
| +
|
| + // Add an entry to the key and value tables being built
|
| + // input: data from SLTable, MATable, etc.
|
| + // outut: entry added to fKeyVec and fValueVec
|
| + void addKeyEntry(UChar32 keyChar, // The key character
|
| + UHashtable *table, // The table, one of SATable, MATable, etc.
|
| + int32_t tableFlag, // One of USPOOF_SA_TABLE_FLAG, etc.
|
| + UErrorCode &status);
|
| +
|
| + // From an index into fKeyVec & fValueVec
|
| + // get a UnicodeString with the corresponding mapping.
|
| + UnicodeString getMapping(int32_t key);
|
| +
|
| + // Populate the final binary output data array with the compiled data.
|
| + void outputData(UErrorCode &status);
|
| +
|
| + public:
|
| + static void buildConfusableData(SpoofImpl *spImpl, const char * confusables,
|
| + int32_t confusablesLen, int32_t *errorType, UParseError *pe, UErrorCode &status);
|
| +};
|
| +U_NAMESPACE_END
|
| +
|
| +#endif
|
| +#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS
|
| +#endif // __USPOOF_BUILDCONF_H__
|
|
|
| Property changes on: icu46/source/i18n/uspoof_conf.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|