// Expands a single message and inserts the arguments. Single_Message // contains no separators (newlines), but includes all the parameters // separated by tabs. GUTF8String DjVuMessageLite::LookUpSingle( const GUTF8String &Single_Message ) const { #if HAS_CTRL_C_IN_ERR_MSG if (Single_Message[0] != '\003') return Single_Message; #endif // Isolate the message ID and get the corresponding message text int ending_posn = Single_Message.contains("\t\v"); if( ending_posn < 0 ) ending_posn = Single_Message.length(); GUTF8String msg_text; GUTF8String msg_number; const GUTF8String message=Single_Message.substr(0,ending_posn); LookUpID( message, msg_text, msg_number ); // Check whether we found anything if( !msg_text.length()) { if(message == unrecognized) { msg_text = unrecognized_default; }else if(message == uparameter) { msg_text = uparameter_default; }else if(message == failed_to_parse_XML) { msg_text = failed_to_parse_XML_default; }else { return LookUpSingle(unrecognized + ("\t" + Single_Message)); } } // Insert the parameters (if any) unsigned int param_num = 0; while( (unsigned int)ending_posn < Single_Message.length() ) { GUTF8String arg; const int start_posn = ending_posn+1; if(Single_Message[ending_posn] == '\v') { ending_posn=Single_Message.length(); arg=LookUpSingle(Single_Message.substr(start_posn,ending_posn)); }else { ending_posn = Single_Message.contains("\v\t",start_posn); if( ending_posn < 0 ) ending_posn = Single_Message.length(); arg=Single_Message.substr(start_posn, ending_posn-start_posn); } InsertArg( msg_text, ++param_num, arg); } // Insert the message number InsertArg( msg_text, 0, msg_number ); return msg_text; }
void GIFFChunk::set_name(GUTF8String name) { DEBUG_MSG("GIFFChunk::set_name(): name='" << name << "'\n"); DEBUG_MAKE_INDENT(3); const int colon=name.search(':'); if(colon>=0) { type=name.substr(0,colon); name=name.substr(colon+1,(unsigned int)-1); if(name.search(':')>=0) G_THROW( ERR_MSG("GIFFManager.one_colon") ); } DEBUG_MSG("auto-setting type to '" << type << "'\n"); if (name.contains(".[]")>=0) G_THROW( ERR_MSG("GIFFManager.bad_char") ); strncpy(GIFFChunk::name, (const char *)name, 4); GIFFChunk::name[4]=0; for(int i=strlen(GIFFChunk::name);i<4;i++) GIFFChunk::name[i]=' '; }
int GIFFChunk::get_chunks_number(const GUTF8String &name) { DEBUG_MSG("GIFFChunk::get_chunks_number(): Returning number of chunks '" << name << "' in '" << get_name() << "'\n"); DEBUG_MAKE_INDENT(3); if (name.contains("[]")>=0) G_THROW( ERR_MSG("GIFFManager.no_brackets") ); int number; GUTF8String short_name=decode_name(name,number); int num=0; for(GPosition pos=chunks;pos;++pos) num+=(chunks[pos]->get_name()==short_name); return num; }