virtual void Visit(const WCHAR *name, const WCHAR *url, int level) { PageDestination *dest; if (!url) dest = NULL; else if (IsExternalUrl(url)) dest = new SimpleDest2(0, RectD(), str::Dup(url)); else if (str::FindChar(url, '%')) { ScopedMem<WCHAR> decodedUrl(str::Dup(url)); str::UrlDecodeInPlace(decodedUrl); dest = engine->GetNamedDest(decodedUrl); } else dest = engine->GetNamedDest(url); EbookTocItem *item = new EbookTocItem(str::Dup(name), dest); item->id = ++idCounter; item->open = level <= 2; if (isIndex) { item->pageNo = 0; item->open = level != 1; level++; } AppendTocItem(root, item, level); }