GUTF8String DjVuANT::read_raw(ByteStream & str) { GUTF8String raw; char buffer[1024]; int length; while((length=str.read(buffer, 1024))) raw+=GUTF8String(buffer, length); return raw; }
void DjVmDir0::decode(ByteStream & bs) // WARNING! make sure, that get_size(), encode() and decode() are in sync { name2file.empty(); num2file.empty(); for(int i=bs.read16();i>0;i--) { GUTF8String name; char ch; while(bs.read(&ch, 1) && ch) name+=ch; bool iff_file=bs.read8()?true:false; int offset=bs.read32(); int size=bs.read32(); add_file(name, iff_file, offset, size); }; }
void DjVuNavDir::decode(ByteStream & str) { GCriticalSectionLock lk(&lock); GList<GUTF8String> tmp_page2name; int eof=0; while(!eof) { char buffer[1024]; char * ptr; for(ptr=buffer;ptr-buffer<1024;ptr++) if ((eof=!str.read(ptr, 1)) || *ptr=='\n') break; if (ptr-buffer==1024) G_THROW( ERR_MSG("DjVuNavDir.long_line") ); *ptr=0; if (!strlen(buffer)) continue; if (!tmp_page2name.contains(buffer)) tmp_page2name.append(buffer); }; // Now copying lists to arrays for faster access later int pages=tmp_page2name.size(); page2name.resize(pages-1); int cnt; GPosition pos; for(pos=tmp_page2name, cnt=0;pos;++pos, cnt++) page2name[cnt]=tmp_page2name[pos]; // Now creating reverse mapping (strings => numbers) for(cnt=0;cnt<pages;cnt++) { name2page[page2name[cnt]]=cnt; url2page[GURL::UTF8(page2name[cnt],baseURL)]=cnt; } }