90class MIKTEXMFTYPEAPI(WebApp) :
96 MIKTEXMFEXPORT MIKTEXTHISCALL WebApp();
97 WebApp(
const WebApp & other) =
delete;
98 WebApp& operator=(
const WebApp & other) =
delete;
99 WebApp(WebApp && other) =
delete;
100 WebApp& operator=(WebApp && other) =
delete;
101 virtual MIKTEXMFEXPORT MIKTEXTHISCALL ~WebApp()
noexcept;
103 MIKTEXMFTHISAPI(C4P::ProgramBase*) GetProgram()
const;
105 MIKTEXMFTHISAPI(
bool) AmI(
const std::string& name)
const;
106 MIKTEXMFTHISAPI(
bool) GetVerboseFlag()
const;
107 MIKTEXMFTHISAPI(
void) IAm(
const std::string& name);
108 MIKTEXMFTHISAPI(std::string) GetProgramName()
const;
110 MIKTEXMFTHISAPI(
void)
Init(std::vector<char*>&args)
override;
111 MIKTEXMFTHISAPI(
void) SetInitFinalize(
IInitFinalize* initFinalize);
112 MIKTEXMFTHISAPI(
void) SetProgram(C4P::ProgramBase* program,
const std::string& programName,
const std::string& version,
const std::string& copyright,
const std::string& trademarks);
113 virtual MIKTEXMFTHISAPI(std::string) TheNameOfTheGame()
const;
114 virtual MIKTEXMFTHISAPI(
void) ProcessCommandLineOptions();
116 virtual unsigned long GetHelpId()
const
127 static WebApp* GetWebApp()
129 MIKTEX_ASSERT(
dynamic_cast<WebApp*
>(Application::GetApplication()) !=
nullptr);
137 OPT_UNSUPPORTED = INT_MAX - 100,
141 MIKTEXMFTHISAPI(std::string) Translate(
const char* msgId);
142 MIKTEXMFTHISAPI(std::vector<poptOption>) GetOptions()
const;
143 MIKTEXMFTHISAPI(
void) AddOption(
const std::string& aliasName,
const std::string& name);
144 MIKTEXMFTHISAPI(
void) AddOption(
const std::string& name,
const std::string& help,
int opt,
int argInfo = POPT_ARG_NONE,
const std::string& argDescription =
"",
void* arg =
nullptr,
char shortName = 0);
145 MIKTEXMFTHISAPI(
void) AddOptionShortcut(
const std::string& longName,
const std::vector<std::string>& args);
146 MIKTEXMFTHISAPI(
void) BadUsage();
147 MIKTEXMFTHISAPI(
void) ShowHelp(
bool usageOnly =
false)
const;
148 MIKTEXMFTHISAPI(
void) ShowProgramVersion()
const;
149 virtual MIKTEXMFTHISAPI(
bool) ProcessOption(
int opt,
const std::string& optArg);
150 virtual MIKTEXMFTHISAPI(
void) AddOptions();
152 void AddOption(
const std::string& name,
int opt,
int argInfo = POPT_ARG_NONE,
const std::string& argDescription =
"",
void* arg =
nullptr,
char shortName = 0)
154 AddOption(name,
"", opt, argInfo, argDescription, arg, shortName);
157 virtual std::string GetUsage()
const
166 std::unique_ptr<impl> pimpl;
189 int Run(PROGRAM_CLASS& prog, WEBAPP_CLASS& app,
const std::string& progName,
int argc,
char* argv[])
191 std::string componentVersion;
192#if defined(MIKTEX_COMPONENT_VERSION_STR)
193 componentVersion = MIKTEX_COMPONENT_VERSION_STR;
195 std::string componentCopyright;
196#if defined(MIKTEX_COMP_COPYRIGHT_STR)
197 componentCopyright = MIKTEX_COMP_COPYRIGHT_STR;
199 std::string componentTrademark;
200#if defined(MIKTEX_COMP_TM_STR)
201 componentTrademark = MIKTEX_COMP_TM_STR;
203 app.SetProgram(&prog, progName, componentVersion, componentCopyright, componentTrademark);
204 prog.SetParent(&app);
207 MIKTEX_ASSERT(argv !=
nullptr && argv[argc] ==
nullptr);
208 std::vector<char*> newargv(argv, argv + argc + 1);
210 MIKTEX_ASSERT(!newargv.empty() && newargv.back() ==
nullptr);
211 int exitCode = prog.Run(newargv.size() - 1, &newargv[0]);
212 app.Finalize2(exitCode);
215 catch (
const MiKTeX::Core::MiKTeXException& ex)
217 app.Sorry(argv[0], ex);
222 catch (
const std::exception& ex)
224 app.Sorry(argv[0], ex);
230 app.Finalize2(exitCode);