1 // © 2017 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ******************************************************************************* 5 * 6 * Copyright (C) 2003, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ******************************************************************************* 10 * 11 * File line.h 12 * 13 * Modification History: 14 * 15 * Date Name Description 16 * 03/18/2003 weiv Creation. 17 ******************************************************************************* 18 */ 19 20 // 21 // class Line 22 // 23 // Each line from the source file (containing a name, presumably) gets 24 // one of these structs. 25 // 26 27 #ifndef COLPROBE_LINE_H 28 #define COLPROBE_LINE_H 29 #include "unicode/utypes.h" 30 #include "unicode/ucol.h" 31 #include "unicode/ustring.h" 32 #include "unicode/unistr.h" 33 #include "unicode/uchar.h" 34 #include "unicode/uniset.h" 35 #include "colprobe.h" 36 37 #include <stdlib.h> 38 #include <string.h> 39 40 static const int MAX_EXPANSION_PREFIXES = 10; 41 42 class Line { 43 public: 44 static void copyArray(Line *dest, const Line *src, int32_t size); 45 Line(); 46 Line(const Line &other); 47 Line(const UChar* name, int32_t len); 48 Line(const UnicodeString &string); 49 Line(const UChar name); 50 Line(const char *buff, int32_t buffLen, UErrorCode &status); 51 ~Line(); 52 Line & operator=(const Line &other); 53 UBool operator==(const Line &other) const; 54 UBool operator!=(const Line &other) const; 55 void setToConcat(const Line *first, const Line *second); 56 void setName(const UChar* name, int32_t len); 57 UnicodeString toString(UBool pretty = false); 58 UnicodeString toBundleString(); 59 UnicodeString toHTMLString(); 60 int32_t write(char *buff, int32_t buffLen, UErrorCode &status); 61 void initFromString(const char *buff, int32_t buffLen, UErrorCode &status); 62 63 64 UnicodeString strengthIndent(UColAttributeValue strength, int indentSize, UnicodeString &result); 65 UnicodeString strengthToString(UColAttributeValue strength, UBool pretty, UBool html = false); 66 UnicodeString stringToName(UChar *string, int32_t len); 67 void setTo(const UnicodeString &string); 68 void setTo(const UChar32 n); 69 UBool equals(const Line &other) const; 70 Line *nextInteresting(); 71 void append(const UChar n); 72 void append(const UChar* n, int32_t length); 73 void append(const Line &l); 74 void clear(); 75 void swapCase(); 76 void swapCase(UChar *string, int32_t &sLen); 77 UnicodeString dumpSortkey(); 78 void init(); 79 80 81 public: 82 UChar name[25]; 83 int32_t len; 84 UChar expansionString[25]; 85 int32_t expLen; 86 87 UColAttributeValue strength; 88 UColAttributeValue strengthFromEmpty; 89 UColAttributeValue cumulativeStrength; 90 UColAttributeValue expStrength; 91 92 Line *previous; 93 Line *next; 94 95 // In case this element is a contraction 96 // we keep a pointer at which lines were components 97 Line *left; 98 Line *right; 99 100 UBool isContraction; 101 UBool isExpansion; 102 UBool isRemoved; 103 UBool isReset; 104 105 int32_t expIndex; 106 uint8_t firstCC; 107 uint8_t lastCC; 108 109 uint8_t *sortKey; 110 public: 111 static UnicodeSet *needsQuoting; 112 }; 113 114 115 #endif //COLPROBE_LINE_H 116