1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (C) 2003-2014, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * File prscmnts.cpp 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Date Name Description 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 08/22/2003 ram Creation. 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Safer use of UnicodeString. 17fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef UNISTR_FROM_CHAR_EXPLICIT 18fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius# define UNISTR_FROM_CHAR_EXPLICIT explicit 19fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 20fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 21fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Less important, but still a good idea. 22fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef UNISTR_FROM_STRING_EXPLICIT 23fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius# define UNISTR_FROM_STRING_EXPLICIT explicit 24fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 25fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/regex.h" 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unistr.h" 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/parseerr.h" 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "prscmnts.h" 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <stdio.h> 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <stdlib.h> 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_USE 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if UCONFIG_NO_REGULAR_EXPRESSIONS==0 /* donot compile when RegularExpressions not available */ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_SPLIT_STRINGS 20 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char *patternStrings[UPC_LIMIT]={ 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "^translate\\s*(.*)", 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "^note\\s*(.*)" 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruremoveText(UChar *source, int32_t srcLen, 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString patString,uint32_t options, 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString replaceText, UErrorCode *status){ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status == NULL || U_FAILURE(*status)){ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString src(source, srcLen); 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RegexMatcher myMatcher(patString, src, options, *status); 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString dest; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest = myMatcher.replaceAll(replaceText,*status); 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return dest.extract(source, srcLen, *status); 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutrim(UChar *src, int32_t srcLen, UErrorCode *status){ 70fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius srcLen = removeText(src, srcLen, UnicodeString("^[ \\r\\n]+ "), 0, UnicodeString(), status); // remove leading new lines 71fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius srcLen = removeText(src, srcLen, UnicodeString("^\\s+"), 0, UnicodeString(), status); // remove leading spaces 72fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius srcLen = removeText(src, srcLen, UnicodeString("\\s+$"), 0, UnicodeString(), status); // remvoe trailing spcaes 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return srcLen; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruremoveCmtText(UChar* source, int32_t srcLen, UErrorCode* status){ 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srcLen = trim(source, srcLen, status); 79fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString patString("^\\s*?\\*\\s*?"); // remove pattern like " * " at the begining of the line 80fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius srcLen = removeText(source, srcLen, patString, UREGEX_MULTILINE, UnicodeString(), status); 81fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return removeText(source, srcLen, UnicodeString("[ \\r\\n]+"), 0, UnicodeString(" "), status);// remove new lines; 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetText(const UChar* source, int32_t srcLen, 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar** dest, int32_t destCapacity, 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString patternString, 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode* status){ 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status == NULL || U_FAILURE(*status)){ 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString stringArray[MAX_SPLIT_STRINGS]; 95fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), 0, *status); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString src (source,srcLen); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pattern->split(src, stringArray, MAX_SPLIT_STRINGS, *status); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i=0; i<MAX_SPLIT_STRINGS; i++){ 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru matcher.reset(stringArray[i]); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(matcher.lookingAt(*status)){ 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString out = matcher.group(1, *status); 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return out.extract(*dest, destCapacity,*status); 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define AT_SIGN 0x0040 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetDescription( const UChar* source, int32_t srcLen, 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar** dest, int32_t destCapacity, 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode* status){ 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status == NULL || U_FAILURE(*status)){ 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString stringArray[MAX_SPLIT_STRINGS]; 130fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), UREGEX_MULTILINE, *status); 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString src(source, srcLen); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pattern->split(src, stringArray,MAX_SPLIT_STRINGS , *status); 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(stringArray[0].indexOf((UChar)AT_SIGN)==-1){ 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t destLen = stringArray[0].extract(*dest, destCapacity, *status); 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return trim(*dest, destLen, status); 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetCount(const UChar* source, int32_t srcLen, 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseCommentsOption option, UErrorCode *status){ 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status == NULL || U_FAILURE(*status)){ 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString stringArray[MAX_SPLIT_STRINGS]; 154fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), UREGEX_MULTILINE, *status); 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString src (source, srcLen); 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t retLen = pattern->split(src, stringArray, MAX_SPLIT_STRINGS, *status); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 163fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString patternString(patternStrings[option]); 164fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = 0; 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i=0; i<retLen; i++){ 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru matcher.reset(stringArray[i]); 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(matcher.lookingAt(*status)){ 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count++; 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(option == UPC_TRANSLATE && count > 1){ 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Multiple @translate tags cannot be supported.\n"); 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru exit(U_UNSUPPORTED_ERROR); 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return count; 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetAt(const UChar* source, int32_t srcLen, 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar** dest, int32_t destCapacity, 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t index, 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseCommentsOption option, 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode* status){ 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status == NULL || U_FAILURE(*status)){ 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString stringArray[MAX_SPLIT_STRINGS]; 194fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexPattern *pattern = RegexPattern::compile(UnicodeString("@"), UREGEX_MULTILINE, *status); 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString src (source, srcLen); 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t retLen = pattern->split(src, stringArray, MAX_SPLIT_STRINGS, *status); 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 203fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString patternString(patternStrings[option]); 204fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius RegexMatcher matcher(patternString, UREGEX_DOTALL, *status); 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = 0; 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(int32_t i=0; i<retLen; i++){ 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru matcher.reset(stringArray[i]); 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(matcher.lookingAt(*status)){ 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(count == index){ 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString out = matcher.group(1, *status); 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return out.extract(*dest, destCapacity,*status); 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count++; 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetTranslate( const UChar* source, int32_t srcLen, 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar** dest, int32_t destCapacity, 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode* status){ 228fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString notePatternString("^translate\\s*?(.*)"); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t destLen = getText(source, srcLen, dest, destCapacity, notePatternString, status); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return trim(*dest, destLen, status); 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CFUNC int32_t 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerugetNote(const UChar* source, int32_t srcLen, 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar** dest, int32_t destCapacity, 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode* status){ 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 239fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString notePatternString("^note\\s*?(.*)"); 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t destLen = getText(source, srcLen, dest, destCapacity, notePatternString, status); 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return trim(*dest, destLen, status); 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */ 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 247