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
103 lines (95 loc) · 4.58 KB
/
Copy pathEngineManager.cpp
File metadata and controls
103 lines (95 loc) · 4.58 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
95
96
97
98
99
100
101
102
103
/* 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 = Engine_None;
bool sniff = false;
RetrySniffing:
if (PdfEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_PDF) {
engine = PdfEngine::CreateFromFile(filePath, pwdUI);
engineType = Engine_PDF;
} else if (XpsEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_XPS) {
engine = XpsEngine::CreateFromFile(filePath);
engineType = Engine_XPS;
} else if (DjVuEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_DjVu) {
engine = DjVuEngine::CreateFromFile(filePath);
engineType = Engine_DjVu;
} else if (ImageEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Image) {
engine = ImageEngine::CreateFromFile(filePath);
engineType = Engine_Image;
} else if (ImageDirEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_ImageDir) {
engine = ImageDirEngine::CreateFromFile(filePath);
engineType = Engine_ImageDir;
} else if (CbxEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_ComicBook) {
engine = CbxEngine::CreateFromFile(filePath);
engineType = Engine_ComicBook;
} else if (PsEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_PS) {
engine = PsEngine::CreateFromFile(filePath);
engineType = Engine_PS;
} else if (enableChmEngine && ChmEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Chm) {
engine = ChmEngine::CreateFromFile(filePath);
engineType = Engine_Chm;
} else if (!enableEbookEngines) {
// don't try to create any of the below ebook engines
} else if (EpubEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Epub) {
engine = EpubEngine::CreateFromFile(filePath);
engineType = Engine_Epub;
} else if (Fb2Engine::IsSupportedFile(filePath, sniff) && engineType != Engine_Fb2) {
engine = Fb2Engine::CreateFromFile(filePath);
engineType = Engine_Fb2;
} else if (MobiEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Mobi) {
engine = MobiEngine::CreateFromFile(filePath);
engineType = Engine_Mobi;
} else if (PdbEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Pdb) {
engine = PdbEngine::CreateFromFile(filePath);
engineType = Engine_Pdb;
} else if (HtmlEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Html) {
engine = HtmlEngine::CreateFromFile(filePath);
engineType = Engine_Html;
} else if (TxtEngine::IsSupportedFile(filePath, sniff) && engineType != Engine_Txt) {
engine = TxtEngine::CreateFromFile(filePath);
engineType = Engine_Txt;
}
if (!engine && !sniff) {
// try sniffing the file instead
sniff = true;
goto RetrySniffing;
}
CrashIf(engine && !IsSupportedFile(filePath, sniff, enableEbookEngines));
if (typeOut)
*typeOut = engine ? engineType : Engine_None;
return engine;
}
} // namespace EngineManager