16#include <miktex/TeXAndFriends/config.h>
23#include <miktex/Core/BufferSizes>
24#include <miktex/Core/FileType>
25#include <miktex/Util/PathName>
27#include <miktex/Util/CharBuffer>
28#include <miktex/Util/inliners.h>
32MIKTEX_TEXMF_BEGIN_NAMESPACE;
37 virtual C4P::C4P_signed32& formatident() = 0;
40enum class SourceSpecial
52class MIKTEXMFTYPEAPI(TeXApp) :
58 MIKTEXMFEXPORT MIKTEXTHISCALL
TeXApp();
63 virtual MIKTEXMFEXPORT MIKTEXTHISCALL
~TeXApp()
noexcept;
65 enum class Write18Result
75 MIKTEXMFTHISAPI(Write18Result) Write18(
const std::string& command,
int& exitCode)
const;
76 MIKTEXMFTHISAPI(
bool) EncTeXP()
const;
77 MIKTEXMFTHISAPI(
bool) IsNewSource(
int sourceFileName,
int line)
const;
78 MIKTEXMFTHISAPI(
bool) IsSourceSpecialOn(SourceSpecial s)
const;
79 MIKTEXMFTHISAPI(
bool) MLTeXP()
const;
80 MIKTEXMFTHISAPI(
bool) SourceSpecialsP()
const;
81 MIKTEXMFTHISAPI(
bool) Write18P()
const;
82 MIKTEXMFTHISAPI(
int) GetSynchronizationOptions()
const;
83 MIKTEXMFTHISAPI(
int) MakeSrcSpecial(
int sourceFileName,
int line)
const;
85 MIKTEXMFTHISAPI(
void) OnTeXMFStartJob()
override;
86 MIKTEXMFTHISAPI(
void) RememberSourceInfo(
int sourceFileName,
int line)
const;
87 MIKTEXMFTHISAPI(
void) SetFormatHandler(
IFormatHandler* formatHandler);
94 int GetFormatIdent()
const override
96 return GetFormatHandler()->formatident();
99 std::string GetMemoryDumpFileExtension()
const override
109 static TeXApp* GetTeXApp()
111 MIKTEX_ASSERT(
dynamic_cast<TeXApp*
>(Application::GetApplication()) !=
nullptr);
112 return (TeXApp*)Application::GetApplication();
117 MIKTEXMFTHISAPI(
bool) ProcessOption(
int c,
const std::string& optArg)
override;
118 MIKTEXMFTHISAPI(
void) AddOptions()
override;
119 MIKTEXMFTHISAPI(
void)
Init(std::vector<char*>& args)
override;
124 std::unique_ptr<impl> pimpl;
127inline void miktexallocatememory()
129 TeXApp::GetTeXApp()->AllocateMemory();
132template<
class FileType>
void miktexclosedvifile(FileType& f)
134 TeXApp::GetTeXApp()->CloseFile(f);
137template<
class FileType>
void miktexclosepdffile(FileType& f)
139 TeXApp::GetTeXApp()->CloseFile(f);
142inline void miktexfreememory()
144 TeXApp::GetTeXApp()->FreeMemory();
147inline bool miktexinsertsrcspecialauto()
149 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::Auto);
152inline bool miktexinsertsrcspecialeverycr()
154 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::CarriageReturn);
157inline bool miktexinsertsrcspecialeverydisplay()
159 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::Display);
162inline bool miktexinsertsrcspecialeveryhbox()
164 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::HorizontalBox);
167inline bool miktexinsertsrcspecialeverymath()
169 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::Math);
172inline bool miktexinsertsrcspecialeverypar()
174 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::Paragraph);
177inline bool miktexinsertsrcspecialeveryparend()
179 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::ParagraphEnd);
182inline bool miktexinsertsrcspecialeveryvbox()
184 return TeXApp::GetTeXApp()->IsSourceSpecialOn(SourceSpecial::VerticalBox);
187inline bool miktexisnewsource(
int fileName,
int lineNo)
189 return TeXApp::GetTeXApp()->IsNewSource(fileName, lineNo);
192inline int miktexmakesrcspecial(
int fileName,
int lineNo)
194 return TeXApp::GetTeXApp()->MakeSrcSpecial(fileName, lineNo);
197template<
class FileType>
inline bool miktexopendvifile(FileType& f)
200 bool done = TeXApp::GetTeXApp()->OpenOutputFile(*
reinterpret_cast<C4P::FileRoot*
>(&f), TeXApp::GetTeXApp()->GetNameOfFile(),
false, outPath);
203 TeXApp::GetTeXApp()->SetNameOfFile(outPath);
208template<
class FileType>
inline bool miktexopenpdffile(FileType& f)
211 bool done = TeXApp::GetTeXApp()->OpenOutputFile(*
reinterpret_cast<C4P::FileRoot*
>(&f), TeXApp::GetTeXApp()->GetNameOfFile(),
false, outPath);
214 TeXApp::GetTeXApp()->SetNameOfFile(outPath);
219template<
class FileType>
inline bool miktexopenformatfile(FileType& f,
bool renew =
false)
221 return TeXApp::GetTeXApp()->OpenMemoryDumpFile(f, renew);
224inline void miktexremembersourceinfo(
int fileName,
int lineNo)
226 TeXApp::GetTeXApp()->RememberSourceInfo(fileName, lineNo);
229inline bool miktexwrite18p()
231 return TeXApp::GetTeXApp()->Write18P();
234inline bool miktexenctexp()
236 return TeXApp::GetTeXApp()->EncTeXP();
239inline bool miktexmltexp()
241 return TeXApp::GetTeXApp()->MLTeXP();
244inline int miktexgetsynchronizationoptions()
246 return TeXApp::GetTeXApp()->GetSynchronizationOptions();
249inline bool miktexsourcespecialsp()
251 return TeXApp::GetTeXApp()->SourceSpecialsP();
254inline bool miktexiscompatible()
256 return !TeXApp::GetTeXApp()->SourceSpecialsP() && !TeXApp::GetTeXApp()->CStyleErrorMessagesP() && !TeXApp::GetTeXApp()->ParseFirstLineP();
260inline bool restrictedshell()
266inline bool shellenabledp()
268 return miktexwrite18p();
272inline bool srcspecialsp()
274 return TeXApp::GetTeXApp()->SourceSpecialsP();
277MIKTEX_TEXMF_END_NAMESPACE;
MiKTeX TeXMF base implementation.
void Finalize() override
Frees application resources.
void Init(std::vector< char * > &args) override
Definition: TeXMFApp.h:75
Instances of this class can be used to store path names.
Definition: PathName.h:73
ShellCommandMode
Shell command mode.
Definition: Session.h:357
@ Restricted
Only some shell commands are allowed.
FileType
File type enum class.
Definition: FileType.h:33
@ FMT
TeX format files (*.fmt).
@ TEX
TeX input files (*.tex).