+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
- * Copyright (C) 2003, International Business Machines
+ * Copyright (C) 2003-2014, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: nptrans.h
- * encoding: US-ASCII
+ * encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
#include "ustr_imp.h"
#include "intltest.h"
-#ifdef DEBUG
+#ifdef NPTRANS_DEBUG
#include <stdio.h>
#endif
// create the mapping transliterator
int32_t ruleLen = 0;
const UChar* ruleUChar = ures_getStringByKey(bundle, "MapNFKC",&ruleLen, &status);
- UnicodeString rule(ruleUChar, ruleLen);
-
+ int32_t mapRuleLen = 0;
+ const UChar *mapRuleUChar = ures_getStringByKey(bundle, "MapNoNormalization", &mapRuleLen, &status);
+ UnicodeString rule(mapRuleUChar, mapRuleLen);
+ rule.append(ruleUChar, ruleLen);
+
mapping = Transliterator::createFromRules(UnicodeString("NamePrepTransform", ""), rule,
UTRANS_FORWARD, parseError,status);
if(U_FAILURE(status)) {
pattern = ures_getStringByKey(bundle,"ProhibitedSet",&patternLen, &status);
UnicodeString test(pattern,patternLen);
prohibited.applyPattern(test,status);
-#ifdef DEBUG
+#ifdef NPTRANS_DEBUG
if(U_FAILURE(status)){
printf("Construction of Unicode set failed\n");
}
if(U_SUCCESS(status)){
if(prohibited.contains((UChar) 0x644)){
- printf("The string contains 0x644 ... damn !!\n");
+ printf("The string contains 0x644 ... !!\n");
}
UnicodeString temp;
prohibited.toPattern(temp,TRUE);
for(;bufIndex<bufLen;){
U16_NEXT(buffer, bufIndex, bufLen, ch);
if(unassigned.contains(ch)){
- status = U_IDNA_UNASSIGNED_CODEPOINT_FOUND_ERROR;
- rsource.releaseBuffer();
+ status = U_IDNA_UNASSIGNED_ERROR;
return 0;
}
}
}
// check if there is enough room in the output
if(bufLen < destCapacity){
- uprv_memcpy(dest,buffer,bufLen*U_SIZEOF_UCHAR);
+ u_memcpy(dest, buffer, bufLen);
}
return u_terminateUChars(dest, destCapacity, bufLen, &status);
return 0;
}
- UChar b1Stack[MAX_BUFFER_SIZE];
- UChar *b1 = b1Stack;
- int32_t b1Len,b1Capacity = MAX_BUFFER_SIZE;
+ UnicodeString b1String;
+ UChar *b1 = b1String.getBuffer(MAX_BUFFER_SIZE);
+ int32_t b1Len;
int32_t b1Index = 0;
UCharDirection direction=U_CHAR_DIRECTION_COUNT, firstCharDir=U_CHAR_DIRECTION_COUNT;
UBool leftToRight=FALSE, rightToLeft=FALSE;
- b1Len = map(src,srcLength, b1, b1Capacity,allowUnassigned,parseError, status);
+ b1Len = map(src, srcLength, b1, b1String.getCapacity(), allowUnassigned, parseError, status);
+ b1String.releaseBuffer(b1Len);
if(status == U_BUFFER_OVERFLOW_ERROR){
// redo processing of string
/* we do not have enough room so grow the buffer*/
- if(!u_growBufferFromStatic(b1Stack,&b1,&b1Capacity,b1Len,0)){
- status = U_MEMORY_ALLOCATION_ERROR;
- goto CLEANUP;
- }
-
+ b1 = b1String.getBuffer(b1Len);
status = U_ZERO_ERROR; // reset error
-
- b1Len = map(src,srcLength, b1, b1Len,allowUnassigned, parseError, status);
-
+ b1Len = map(src, srcLength, b1, b1String.getCapacity(), allowUnassigned, parseError, status);
+ b1String.releaseBuffer(b1Len);
}
if(U_FAILURE(status)){
+ b1Len = 0;
goto CLEANUP;
}
U16_NEXT(b1, b1Index, b1Len, ch);
if(prohibited.contains(ch) && ch!=0x0020){
- status = U_IDNA_PROHIBITED_CODEPOINT_FOUND_ERROR;
+ status = U_IDNA_PROHIBITED_ERROR;
+ b1Len = 0;
goto CLEANUP;
}
// satisfy 2
if( leftToRight == TRUE && rightToLeft == TRUE){
status = U_IDNA_CHECK_BIDI_ERROR;
+ b1Len = 0;
goto CLEANUP;
}
}
if(b1Len <= destCapacity){
- uprv_memmove(dest,b1, b1Len*U_SIZEOF_UCHAR);
+ u_memmove(dest, b1, b1Len);
}
CLEANUP:
- if(b1!=b1Stack){
- uprv_free(b1);
- }
-
return u_terminateUChars(dest, destCapacity, b1Len, &status);
}