FarString FarXMLScanner::NextName() { if (!IsNameStart (*fBufPos)) { if (fErrorSink) fErrorSink->ReportError (fCurLine, GetCurColumn(), "name"); return FarString(); } int nameLength = 1; while (IsNameChar (fBufPos [nameLength])) nameLength++; FarString result (fBufPos, nameLength); fBufPos += nameLength; return result; }
// // AddWadDir // static void AddWadDir(Wad *wadRoot, Core::String wadName, Core::DirStream *dir) { SubWadTemp wad{wadRoot, wadName}; while(dir->next()) { Core::String name = GetNameFromFile(dir->getStrPart()); char const *path = dir->getStrFull(); if(Core::IsDir(path)) { if(IsNameStart(name)) AddStartDir(wad, name, Core::DirOpenStream(path).get(), name, GetNameEnd(name)); else AddMapDir(wad, name, Core::DirOpenStream(path).get(), name); } else wad->addLump(new Lump_File{name, Core::StrDup(path)}); } wad.finish(); }
// // AddStartDir // static void AddStartDir(Wad *wadRoot, Core::String wadName, Core::DirStream *dir, Core::String nameHead, std::pair<Core::String, Core::String> nameTail) { SubWadTemp wad{wadRoot, wadName}; while(dir->next()) { Core::String name = GetNameFromFile(dir->getStrPart()); char const *path = dir->getStrFull(); if(Core::IsDir(path)) { if(IsNameStart(name)) AddStartDir(wad, name, Core::DirOpenStream(path).get(), name, GetNameEnd(name)); else AddDir(wad, name, Core::DirOpenStream(path).get()); } else { Lump *lump = new Lump_File{name, Core::StrDup(path)}; if(name == nameTail.first || name == nameTail.second) wad.wadLump->tail.reset(lump); else if(name == nameHead) wad.wadLump->head.reset(lump); else wad->addLump(lump); } } if(!wad.wadLump->head) wad.wadLump->head.reset(new Lump_Empty{nameHead}); if(!wad.wadLump->tail) wad.wadLump->tail.reset(new Lump_Empty{nameTail.first}); wad.finish(); }