コード例 #1
0
ファイル: Vec_ut.cpp プロジェクト: kepazon/my_sumatrapdf
static void StrListTest()
{
    WStrList l;
    utassert(l.Count() == 0);
    l.Append(str::Dup(L"one"));
    l.Append(str::Dup(L"two"));
    l.Append(str::Dup(L"One"));
    utassert(l.Count() == 3);
    utassert(str::Eq(l.At(0), L"one"));
    utassert(str::EqI(l.At(2), L"one"));
    utassert(l.Find(L"One") == 2);
    utassert(l.FindI(L"One") == 0);
    utassert(l.Find(L"Two") == -1);
}
コード例 #2
0
ファイル: ChmEngine.cpp プロジェクト: Livit/moonpdf
    int CreatePageNoForURL(const WCHAR *url) {
        if (!url || IsExternalUrl(url))
            return 0;

        ScopedMem<WCHAR> plainUrl(str::ToPlainUrl(url));
        int pageNo = pages->Count() + 1;
        bool inserted = urlsSet.Insert(plainUrl, pageNo, &pageNo);
        if (inserted) {
            pages->Append(plainUrl.StealData());
            CrashIf(pageNo != pages->Count());
        } else {
            CrashIf(pageNo == pages->Count() + 1);
        }
        return pageNo;
    }
コード例 #3
0
ファイル: ChmEngine.cpp プロジェクト: Livit/moonpdf
bool ChmEngineImpl::Load(const WCHAR *fileName)
{
    this->fileName = str::Dup(fileName);
    Timer t(true);
    doc = ChmDoc::CreateFromFile(fileName);
    dbglog::LogF("ChmDoc::CreateFromFile(): %.2f ms", t.GetTimeInMs());
    if (!doc)
        return false;

    // always make the document's homepage page 1
    pages.Append(str::conv::FromAnsi(doc->GetHomePath()));
    // parse the ToC here, since page numbering depends on it
    t.Start();
    doc->ParseToc(&ChmTocBuilder(doc, &pages, &tocRoot));
    dbglog::LogF("doc->ParseToc(): %.2f ms", t.GetTimeInMs());
    CrashIf(pages.Count() == 0);
    return pages.Count() > 0;
}
コード例 #4
0
ファイル: ChmModel.cpp プロジェクト: UIKit0/sumatrapdf
 ChmTocBuilder(ChmDoc *doc, WStrList *pages, Vec<ChmTocTraceItem> *tocTrace, Allocator *allocator) :
     doc(doc), pages(pages), tocTrace(tocTrace), allocator(allocator)
     {
         for (int i = 0; i < (int)pages->Count(); i++) {
             const WCHAR *url = pages->At(i);
             bool inserted = urlsSet.Insert(url, i + 1, NULL);
             CrashIf(!inserted);
         }
     }
コード例 #5
0
ファイル: ChmEngine.cpp プロジェクト: Livit/moonpdf
    ChmTocBuilder(ChmDoc *doc, WStrList *pages, ChmTocItem **root) :
        doc(doc), pages(pages), root(root), idCounter(0)
        {
#ifdef USE_STR_INT_MAP
            for (size_t i = 0; i < pages->Count(); i++) {
                const WCHAR *url = pages->At(i);
                bool inserted = urlsSet.Insert(url, i + 1, NULL);
                CrashIf(!inserted);
            }
#endif
        }
コード例 #6
0
ファイル: ChmEngine.cpp プロジェクト: Livit/moonpdf
    // We fake page numbers by doing a depth-first traversal of
    // toc tree and considering each unique html page in toc tree
    // as a page
    int CreatePageNoForURL(const WCHAR *url) {
        if (!url || IsExternalUrl(url))
            return 0;

        ScopedMem<WCHAR> plainUrl(str::ToPlainUrl(url));
        int pageNo = pages->Find(plainUrl) + 1;
        if (pageNo > 0)
            return pageNo;
        pages->Append(plainUrl.StealData());
        return pages->Count();
    }