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