16#include <miktex/TeXAndFriends/config.h>
22#include <miktex/Core/BufferSizes>
23#include <miktex/Core/File>
24#include <miktex/Core/FileType>
25#include <miktex/Util/PathName>
27#include <miktex/Util/StringUtil>
31#define MIKTEX_TEXMF_BEGIN_NAMESPACE \
33 namespace TeXAndFriends {
35#define MIKTEX_TEXMF_END_NAMESPACE \
39MIKTEX_TEXMF_BEGIN_NAMESPACE;
44 virtual char* xchr() = 0;
45 virtual char16_t* xchr16() = 0;
46 virtual char* xord() = 0;
47 virtual char* xprn() = 0;
53 virtual C4P::C4P_signed32& loc() = 0;
54 virtual C4P::C4P_signed32& limit() = 0;
55 virtual C4P::C4P_signed32 first() = 0;
56 virtual C4P::C4P_signed32& last() = 0;
57 virtual C4P::C4P_signed32 bufsize() = 0;
58 virtual char*& nameoffile() = 0;
59 virtual C4P::C4P_signed32& namelength() = 0;
60 virtual char* buffer() = 0;
61 virtual char* buffer2() = 0;
62 virtual char32_t* buffer32() = 0;
63 virtual C4P::C4P_signed32& maxbufstack() = 0;
64 virtual void overflow(C4P::C4P_signed32 s, C4P::C4P_integer n) = 0;
67class MIKTEXMFTYPEAPI(WebAppInputLine) :
87 MIKTEXMFTHISAPI(
bool) InputLine(
C4P::C4P_text & f, C4P::C4P_boolean bypassEndOfLine)
const;
89 MIKTEXMFTHISAPI(
bool) OpenInputFile(FILE * *ppFile,
const MiKTeX::Util::PathName & fileNameInternalEncoding);
93 MIKTEXMFTHISAPI(
void)
Init(std::vector<char*>&args)
override;
96 MIKTEXMFTHISAPI(
void) SetInputOutput(
IInputOutput * inputOutput);
101 virtual MIKTEXMFTHISAPI(
size_t) InputLineInternal(FILE * f,
char* buffer,
char* buffer2,
size_t bufferSize,
size_t bufferPosition,
int& lastChar)
const;
102 virtual MIKTEXMFTHISAPI(
void) CloseFileInternal(FILE * f);
104 virtual int GetFormatIdent()
const
117 IInputOutput* inputOutput = GetInputOutput();
119 inputOutput->namelength() =
static_cast<C4P::C4P_signed16
>(fileName.GetLength());
122 static WebAppInputLine* GetWebAppInputLine()
124 return dynamic_cast<WebAppInputLine*
>(Application::GetApplication());
131 MIKTEXMFTHISAPI(
bool) ProcessOption(
int opt,
const std::string& optArg)
override;
132 MIKTEXMFTHISAPI(
void) AddOptions()
override;
134 virtual MIKTEXMFTHISAPI(
void) TouchJobOutputFile(FILE*)
const;
138 virtual MIKTEXMFTHISAPI(
void) BufferSizeExceeded()
const;
141 std::unique_ptr<impl> pimpl;
144template<
class FileType>
inline bool inputln(FileType& f, C4P::C4P_boolean bypassEndOfLine =
true)
146 return WebAppInputLine::GetWebAppInputLine()->InputLine(f, bypassEndOfLine);
149template<
class FileType>
inline void miktexclosefile(FileType& f)
151 WebAppInputLine::GetWebAppInputLine()->CloseFile(f);
154template<
class FileType>
inline bool miktexopeninputfile(FileType& f)
156 bool done = WebAppInputLine::GetWebAppInputLine()->OpenInputFile(*
static_cast<C4P::FileRoot*
>(&f), WebAppInputLine::GetWebAppInputLine()->GetNameOfFile());
159 WebAppInputLine::GetWebAppInputLine()->SetNameOfFile(WebAppInputLine::GetWebAppInputLine()->GetFoundFileFq());
164inline bool miktexallownameoffile(C4P::C4P_boolean forInput)
166 return WebAppInputLine::GetWebAppInputLine()->AllowFileName(WebAppInputLine::GetWebAppInputLine()->GetNameOfFile(), forInput);
169template<
class FileType>
inline bool miktexopenoutputfile(FileType& f, C4P::C4P_boolean isTextFile_deprecated)
174 bool done = WebAppInputLine::GetWebAppInputLine()->OpenOutputFile(*
static_cast<C4P::FileRoot*
>(&f), WebAppInputLine::GetWebAppInputLine()->GetNameOfFile(), isTextFile_deprecated, outPath);
177 WebAppInputLine::GetWebAppInputLine()->SetNameOfFile(outPath);
182MIKTEX_TEXMF_END_NAMESPACE;
MiKTeX WebApp base implementation.
Definition: WebAppInputLine.h:42
Instances of this class can be used to store path names.
Definition: PathName.h:73
FileAccess
File access options.
Definition: File.h:72
ShellCommandMode
Shell command mode.
Definition: Session.h:357
FileMode
How to open a file.
Definition: File.h:54
static const std::size_t MaxPath
Initial capacity of a path name (including the terminating null-byte).
Definition: BufferSizes.h:38