forked from sumatrapdfreader/sumatrapdf
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEngineManager.cpp
More file actions
94 lines (86 loc) · 4.65 KB
/
Copy pathEngineManager.cpp
File metadata and controls
94 lines (86 loc) · 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* Copyright 2015 the SumatraPDF project authors (see AUTHORS file).
License: GPLv3 */
// utils
#include "BaseUtil.h"
// rendering engines
#include "BaseEngine.h"
#include "DjVuEngine.h"
#include "EbookEngine.h"
#include "ImagesEngine.h"
#include "PdfEngine.h"
#include "PsEngine.h"
#include "EngineManager.h"
namespace EngineManager {
bool IsSupportedFile(const WCHAR* filePath, bool sniff, bool enableEbookEngines) {
return PdfEngine::IsSupportedFile(filePath, sniff) || XpsEngine::IsSupportedFile(filePath, sniff) ||
DjVuEngine::IsSupportedFile(filePath, sniff) || ImageEngine::IsSupportedFile(filePath, sniff) ||
ImageDirEngine::IsSupportedFile(filePath, sniff) || CbxEngine::IsSupportedFile(filePath, sniff) ||
PsEngine::IsSupportedFile(filePath, sniff) || ChmEngine::IsSupportedFile(filePath, sniff) ||
enableEbookEngines &&
(EpubEngine::IsSupportedFile(filePath, sniff) || Fb2Engine::IsSupportedFile(filePath, sniff) ||
MobiEngine::IsSupportedFile(filePath, sniff) || PdbEngine::IsSupportedFile(filePath, sniff) ||
HtmlEngine::IsSupportedFile(filePath, sniff) || TxtEngine::IsSupportedFile(filePath, sniff));
}
BaseEngine* CreateEngine(const WCHAR* filePath, PasswordUI* pwdUI, EngineType* typeOut, bool enableChmEngine,
bool enableEbookEngines) {
CrashIf(!filePath);
BaseEngine* engine = nullptr;
EngineType engineType = EngineType::None;
bool sniff = false;
RetrySniffing:
if (PdfEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::PDF) {
engine = PdfEngine::CreateFromFile(filePath, pwdUI);
engineType = EngineType::PDF;
} else if (XpsEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::XPS) {
engine = XpsEngine::CreateFromFile(filePath);
engineType = EngineType::XPS;
} else if (DjVuEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::DjVu) {
engine = DjVuEngine::CreateFromFile(filePath);
engineType = EngineType::DjVu;
} else if (ImageEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Image) {
engine = ImageEngine::CreateFromFile(filePath);
engineType = EngineType::Image;
} else if (ImageDirEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::ImageDir) {
engine = ImageDirEngine::CreateFromFile(filePath);
engineType = EngineType::ImageDir;
} else if (CbxEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::ComicBook) {
engine = CbxEngine::CreateFromFile(filePath);
engineType = EngineType::ComicBook;
} else if (PsEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::PostScript) {
engine = PsEngine::CreateFromFile(filePath);
engineType = EngineType::PostScript;
} else if (enableChmEngine && ChmEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Chm) {
engine = ChmEngine::CreateFromFile(filePath);
engineType = EngineType::Chm;
} else if (!enableEbookEngines) {
// don't try to create any of the below ebook engines
} else if (EpubEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Epub) {
engine = EpubEngine::CreateFromFile(filePath);
engineType = EngineType::Epub;
} else if (Fb2Engine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Fb2) {
engine = Fb2Engine::CreateFromFile(filePath);
engineType = EngineType::Fb2;
} else if (MobiEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Mobi) {
engine = MobiEngine::CreateFromFile(filePath);
engineType = EngineType::Mobi;
} else if (PdbEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Pdb) {
engine = PdbEngine::CreateFromFile(filePath);
engineType = EngineType::Pdb;
} else if (HtmlEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Html) {
engine = HtmlEngine::CreateFromFile(filePath);
engineType = EngineType::Html;
} else if (TxtEngine::IsSupportedFile(filePath, sniff) && engineType != EngineType::Txt) {
engine = TxtEngine::CreateFromFile(filePath);
engineType = EngineType::Txt;
}
if (!engine && !sniff) {
// try sniffing the file instead
sniff = true;
goto RetrySniffing;
}
CrashIf(engine && !IsSupportedFile(filePath, sniff, enableEbookEngines));
if (typeOut)
*typeOut = engine ? engineType : EngineType::None;
return engine;
}
} // namespace EngineManager