static void table_write_java(struct SResource *res, UErrorCode *status) { uint32_t i = 0; UBool allStrings =TRUE; struct SResource *current = NULL; struct SResource *save = NULL; const char* obj = "new Object[][]{\n"; if (U_FAILURE(*status)) { return ; } if (res->u.fTable.fCount > 0) { if(start==FALSE){ write_tabs(out); T_FileStream_write(out, obj, (int32_t)uprv_strlen(obj)); tabCount++; } start = FALSE; save = current = res->u.fTable.fFirst; i = 0; while (current != NULL) { assert(i < res->u.fTable.fCount); write_tabs(out); T_FileStream_write(out, openBrace, 2); tabCount++; allStrings=FALSE; write_tabs(out); T_FileStream_write(out, "\"", 1); T_FileStream_write(out, srBundle->fKeys+current->fKey, (int32_t)uprv_strlen(srBundle->fKeys+current->fKey)); T_FileStream_write(out, "\",\n", 2); T_FileStream_write(out, "\n", 1); res_write_java(current, status); if(U_FAILURE(*status)){ return; } i++; current = current->fNext; tabCount--; write_tabs(out); T_FileStream_write(out, "},\n", 3); } if(tabCount>4){ tabCount--; write_tabs(out); T_FileStream_write(out, "},\n", 3); } } else { write_tabs(out); T_FileStream_write(out,obj,uprv_strlen(obj)); write_tabs(out); T_FileStream_write(out,"},\n",3); } }
static void str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *status){ uint32_t length = srcLen*8; uint32_t bufLen = 0; uint32_t columnCount; char* buf = (char*) malloc(sizeof(char)*length); if(buf == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return; } columnCount = getColumnCount(srcLen); memset(buf,0,length); bufLen = uCharsToChars(buf,length,src,srcLen,status); if(printEndLine) write_tabs(out); if(U_FAILURE(*status)){ uprv_free(buf); return; } if(bufLen+(tabCount*4) > columnCount ){ uint32_t len = 0; char* current = buf; uint32_t add; while(len < bufLen){ add = columnCount-(tabCount*4)-5/* for ", +\n */; current = buf +len; if (add < (bufLen-len)) { uint32_t idx = strrch(current,add,'\\'); if (idx > add) { idx = add; } else { int32_t num =idx-1; uint32_t seqLen; while(num>0){ if(current[num]=='\\'){ num--; }else{ break; } } if ((idx-num)%2==0) { idx--; } seqLen = (current[idx+1]=='u') ? 6 : 2; if ((add-idx) < seqLen) { add = idx + seqLen; } } } T_FileStream_write(out,"\"",1); if(len+add<bufLen){ T_FileStream_write(out,current,add); T_FileStream_write(out,"\" +\n",4); write_tabs(out); }else{ T_FileStream_write(out,current,bufLen-len); } len+=add; } }else{ T_FileStream_write(out,"\"",1); T_FileStream_write(out, buf,bufLen); } if(printEndLine){ T_FileStream_write(out,"\",\n",3); }else{ T_FileStream_write(out,"\"",1); } uprv_free(buf); }
static void bin_write_java( struct SResource *res, UErrorCode *status) { const char* type = "new ICUListResourceBundle.CompressedBinary("; const char* ext; int32_t srcLen=res->u.fBinaryValue.fLength; if(srcLen>0 ){ uint16_t* target=NULL; uint16_t* saveTarget = NULL; int32_t tgtLen = 0; if(uprv_strcmp(srBundle->fKeys+res->fKey,"%%CollationBin")==0 || uprv_strcmp(srBundle->fKeys+res->fKey,"BreakDictionaryData")==0){ char fileName[1024] ={0}; char fn[1024] = {0}; FileStream* datFile = NULL; if(uprv_strcmp(srBundle->fKeys+res->fKey,"BreakDictionaryData")==0){ uprv_strcat(fileName,"BreakDictionaryData"); ext = ".brk"; }else{ uprv_strcat(fileName,"CollationElements"); ext=".col"; } if(uprv_strcmp(srBundle->fLocale,"root")!=0){ uprv_strcat(fileName,"_"); uprv_strcat(fileName,srBundle->fLocale); } uprv_strcat(fileName,ext); if(outDir ){ uprv_strcat(fn,outDir); if(outDir[uprv_strlen(outDir)-1]!=U_FILE_SEP_CHAR){ uprv_strcat(fn,U_FILE_SEP_STRING); } } uprv_strcat(fn,fileName); type = "new ICUListResourceBundle.ResourceBinary("; write_tabs(out); T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); T_FileStream_write(out, "\"", 1); T_FileStream_write(out, fileName, (int32_t)uprv_strlen(fileName)); T_FileStream_write(out, "\"),\n", 4); datFile=T_FileStream_open(fn,"w"); T_FileStream_write(datFile, res->u.fBinaryValue.fData, res->u.fBinaryValue.fLength); T_FileStream_close(datFile); }else{ srcLen = res->u.fBinaryValue.fLength; tgtLen = srcLen * 2; target = (uint16_t*)malloc(sizeof(uint16_t) * tgtLen); saveTarget = target; if(target){ tgtLen = byteArrayToRLEString(res->u.fBinaryValue.fData, srcLen,target, tgtLen,status); if(U_FAILURE(*status)){ printf("Could not encode got error : %s \n", u_errorName(*status)); return; } #if DEBUG /***************** Test Roundtripping *********************/ { int32_t myTargetLen = rleStringToByteArray(target,tgtLen,NULL,0,status); uint8_t* myTarget = (uint8_t*) malloc(sizeof(uint8_t) * myTargetLen); /* test for NULL */ if(myTarget == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return; } int i=0; int32_t retVal=0; *status = U_ZERO_ERROR; retVal=rleStringToByteArray(target,tgtLen,myTarget,myTargetLen,status); if(U_SUCCESS(*status)){ for(i=0; i< srcLen;i++){ if(res->u.fBinaryValue.fData[i]!= myTarget[i]){ printf("the encoded string cannot be decoded Expected : 0x%02X Got : %: 0x%02X at %i\n",res->u.fBinaryValue.fData[i],myTarget[i], i); } } }else{ printf("Could not decode got error : %s \n", u_errorName(*status)); } free(myTarget); } #endif }else{ *status = U_MEMORY_ALLOCATION_ERROR; return; } write_tabs(out); T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); T_FileStream_write(out, "\n", 1); tabCount++; write_tabs(out); str_write_java(target, tgtLen,FALSE, status); tabCount--; T_FileStream_write(out, "),\n", 3); free(target); } }else{ write_tabs(out); T_FileStream_write(out,type,uprv_strlen(type)); T_FileStream_write(out,"null),\n",7); } }
static void array_write_java( struct SResource *res, UErrorCode *status) { uint32_t i = 0; const char* arr ="new String[] { \n"; struct SResource *current = NULL; struct SResource *first =NULL; UBool decrementTabs = FALSE; UBool allStrings = TRUE; if (U_FAILURE(*status)) { return; } if (res->u.fArray.fCount > 0) { current = res->u.fArray.fFirst; i = 0; while(current != NULL){ if(current->fType!=URES_STRING){ allStrings = FALSE; break; } current= current->fNext; } current = res->u.fArray.fFirst; if(allStrings==FALSE){ const char* object = "new Object[]{\n"; write_tabs(out); T_FileStream_write(out, object, (int32_t)uprv_strlen(object)); tabCount++; decrementTabs = TRUE; }else{ write_tabs(out); T_FileStream_write(out, arr, (int32_t)uprv_strlen(arr)); tabCount++; } first=current; while (current != NULL) { /*if(current->fType==URES_STRING){ write_tabs(out); }*/ res_write_java(current, status); if(U_FAILURE(*status)){ return; } i++; current = current->fNext; } T_FileStream_write(out,"\n",1); tabCount--; write_tabs(out); T_FileStream_write(out,"},\n",3); } else { write_tabs(out); T_FileStream_write(out,arr,uprv_strlen(arr)); write_tabs(out); T_FileStream_write(out,"},\n",3); } }
void StyleTask::markup( const Token &t ) { ComplexTask::markup(t); if (t.type() == START) { /* * Process Stylesheet start tags... */ switch(t.olaf()){ case OLAF::Stylesheet: if (f_base >= 0) { throw (Unexpected ("illegal nested STYLESHEET architectural form")); } f_base = t.level(); #ifdef FISH_DEBUG DBUG_PRINT("Style", ("Style level=`%d'\n", f_base)); #endif break; case OLAF::Path: if ( f_pathbuf != NULL ) { delete f_pathbuf; } f_pathbuf = new FlexBuffer(); f_buffer = f_pathbuf; f_dataMode = inPath; break; case OLAF::Select: f_buffer->writeStr( "[" ); f_select = t.level(); break; case OLAF::Online: f_buffer = onlineSS; // feature_depth->clear(); if ( f_pathbuf == NULL ) { throw(Unexpected("no path available for online feature.")); } report_position(f_buffer, t.file(), t.line()); f_buffer->writeStr( f_pathbuf->GetBuffer() ); f_buffer->writeStr( "\n" ); write_tabs( f_buffer, feature_depth, '\t'); f_buffer->writeStr( "{\n" ); feature_depth->push(t.level()); break; case OLAF::Print: f_buffer = printSS; // feature_depth->clear(); if ( f_pathbuf == NULL ) { throw(Unexpected("no path available for print feature.")); } report_position(f_buffer, t.file(), t.line()); f_buffer->writeStr( f_pathbuf->GetBuffer() ); f_buffer->writeStr( "\n" ); write_tabs( f_buffer, feature_depth, '\t'); f_buffer->writeStr( "{\n" ); feature_depth->push( t.level() ); break; case OLAF::AutoNumber: report_position(onlineSS, t.file(), t.line()); autonumber(onlineSS, t); report_position(printSS, t.file(), t.line()); autonumber(printSS, t); break; case OLAF::FeatureText: report_position(f_buffer, t.file(), t.line()); write_tabs( f_buffer, feature_depth, '\t'); f_buffer->writeStr( t.giName() ); f_buffer->writeStr( ": " ); f_dataMode = startContent; break; case OLAF::AutoRef: { const AttributeRec *arec; int id = SGMLName::intern("ID"); if((arec = t.LookupAttr(id))){ if(f_dataMode == inContent){ f_buffer->writeStr(" + "); } f_buffer->writeStr(arec->getAttrValueString()); f_dataMode = inContent; } /* else document is not conforming... sgmls will report error */ } break; case OLAF::Feature: report_position(f_buffer, t.file(), t.line()); write_tabs( f_buffer, feature_depth, '\t'); f_buffer->writeStr( t.giName() ); f_buffer->writeStr( ": " ); const AttributeRec *arec; /* * Is it an enumeration feature? */ if((arec = t.LookupAttr(OLAF::OL_Choice))){ /* OL_Choice can only be applied to NAME attributes, hence we don't neet to worryabout "'s in the attribute value. */ /* except TRUE and FALSE....*/ const char *val = arec->getAttrValueString(); int quotes = !isdigit(val[0]) && strcmp(val, "TRUE") != 0 && strcmp(val, "FALSE") != 0 && val[0] != '@'; if (quotes) f_buffer->writeStr("\""); f_buffer->writeStr(val); if (quotes) f_buffer->writeStr("\" "); }else{ f_buffer->writeStr( " {\n" ); for (arec = t.GetFirstAttr(); arec != NULL; arec = t.GetNextAttr( arec )) { if (( arec->getAttrValueString() != NULL ) && ( arec->getAttrName() != OLAF::OLIAS )) { write_tabs( f_buffer, feature_depth, '\t'); f_buffer->put('\t'); write_attr(f_buffer, arec); f_buffer->writeStr( ",\n" ); } } feature_depth->push(t.level()); } break; } /* * first time we see OL-ID="...", spawn an OL_Data to collect the id */ if ((f_base >= 0) && (f_locator == NULL) && (t.LookupAttr(OLAF::OL_id))) { #ifdef FISH_DEBUG DBUG_PRINT("Style", ("spawning locator collection subtask\n")); #endif f_locator = new OL_Data(t, OLAF::OL_id, REMOVE_SPACES); addSubTask( f_locator ); } } else if (t.type() == END) { if (f_base > 0) { int topelement; if ( !feature_depth->empty() ) { if ( (topelement = feature_depth->top()) ) { if ( topelement == t.level() ) { topelement = feature_depth->pop(); write_tabs( f_buffer, feature_depth, '\t'); if(feature_depth->empty()){ f_buffer->writeStr("}\n"); } else { f_buffer->writeStr("},\n"); } }else if ( topelement + 1 == t.level() ) { /* need a new-line at end of FeatureText data */ f_buffer->writeStr(",\n"); } } } if (t.level() == f_base) { /* found end of stylesheet... write out StyleSheet data */ #ifdef FISH_DEBUG DBUG_PRINT("Style", ("found end of stylesheet write out StyleSheet data\n")); #endif write_record(); } else if(t.level() == f_select){ f_buffer->writeStr( "]" ); f_select = -1; } } } }
static void table_write_java(const TableResource *res, UErrorCode *status) { uint32_t i = 0; struct SResource *current = NULL; const char* obj = "new Object[][]{\n"; if (U_FAILURE(*status)) { return ; } if (res->fCount > 0) { if(start==FALSE){ write_tabs(out); T_FileStream_write(out, obj, (int32_t)uprv_strlen(obj)); tabCount++; } start = FALSE; current = res->fFirst; i = 0; while (current != NULL) { const char *currentKeyString = current->getKeyString(srBundle); assert(i < res->fCount); write_tabs(out); T_FileStream_write(out, openBrace, 2); tabCount++; write_tabs(out); if(currentKeyString != NULL) { T_FileStream_write(out, "\"", 1); T_FileStream_write(out, currentKeyString, (int32_t)uprv_strlen(currentKeyString)); T_FileStream_write(out, "\",\n", 2); T_FileStream_write(out, "\n", 1); } res_write_java(current, status); if(U_FAILURE(*status)){ return; } i++; current = current->fNext; tabCount--; write_tabs(out); T_FileStream_write(out, "},\n", 3); } if(tabCount>4){ tabCount--; write_tabs(out); T_FileStream_write(out, "},\n", 3); } } else { write_tabs(out); T_FileStream_write(out,obj,(int32_t)uprv_strlen(obj)); write_tabs(out); T_FileStream_write(out,"},\n",3); } }
static void bytes_write_java(const BinaryResource *res, UErrorCode * /*status*/) { const char* type = "new byte[] {"; const char* byteDecl = "%i, "; char byteBuffer[100] = { 0 }; uint8_t* byteArray = NULL; int byteIterator = 0; int32_t srcLen=res->fLength; if(srcLen>0 ) { byteArray = res->fData; write_tabs(out); T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); T_FileStream_write(out, "\n", 1); tabCount++; for (;byteIterator<srcLen;byteIterator++) { if (byteIterator%16 == 0) { write_tabs(out); } if (byteArray[byteIterator] < 128) { sprintf(byteBuffer, byteDecl, byteArray[byteIterator]); } else { sprintf(byteBuffer, byteDecl, (byteArray[byteIterator]-256)); } T_FileStream_write(out, byteBuffer, (int32_t)uprv_strlen(byteBuffer)); if (byteIterator%16 == 15) { T_FileStream_write(out, "\n", 1); } } if (((byteIterator-1)%16) != 15) { T_FileStream_write(out, "\n", 1); } tabCount--; write_tabs(out); T_FileStream_write(out, "},\n", 3); } else { /* Empty array */ write_tabs(out); T_FileStream_write(out,type,(int32_t)uprv_strlen(type)); T_FileStream_write(out,"},\n",3); } }