42#include <wx/xml/xml.h>
43#include <wx/filename.h>
45#include "Configuration.h"
47#include <unordered_map>
62 using HelpFileAnchors = std::unordered_map<wxString, wxString, wxStringHash>;
63 HelpFileAnchors GetHelpfileAnchors();
64 void FindMaximaHtmlDir(
const wxString &docDir);
65 wxString GetHelpfileAnchorName(
const wxString& keyword);
66 wxString GetHelpfileUrl_Singlepage(
const wxString &keyword);
67 wxString GetHelpfileUrl_FilePerChapter(
const wxString &keyword);
68 wxString GetHelpfileURL(
const wxString &keyword);
77 const wxString &maximaHtmlDir,
78 const wxString &maximaShareDir,
79 const wxString &maximaVersion,
80 const wxString &saveName);
89 const wxString &maximaVersion,
90 const wxString &saveName);
94 static void AnchorAliasses(HelpFileAnchors &anchors);
96 class GetHTMLFiles :
public wxDirTraverser
99 explicit GetHTMLFiles(std::vector<wxString>& files,
101 const wxString &prefix = wxEmptyString) :
102 m_files(files), m_stopToken(std::move(stopToken)), m_prefix(prefix) { }
103 wxDirTraverseResult OnFile(
const wxString& filename)
override;
104 wxDirTraverseResult OnDir(
const wxString& dirname)
override;
105 std::vector<wxString>& GetResult()
const {
return m_files;}
107 std::vector<wxString>& m_files;
111 class GetHTMLFiles_Recursive :
public wxDirTraverser
114 explicit GetHTMLFiles_Recursive(std::vector<wxString>& files,
116 const wxString &prefix = wxEmptyString) :
117 m_files(files), m_stopToken(std::move(stopToken)), m_prefix(prefix) { }
118 wxDirTraverseResult OnFile(
const wxString& filename)
override;
119 wxDirTraverseResult OnDir(
const wxString& dirname)
override;
120 std::vector<wxString>& GetResult()
const {
return m_files;}
122 std::vector<wxString>& m_files;
130 jthread m_helpfileanchorsThread;
135 std::atomic<bool> m_anchorsCompileInFlight{
false};
136 std::mutex m_helpFileAnchorsLock;
141 HelpFileAnchors m_helpFileURLs_singlePage;
143 HelpFileAnchors m_helpFileURLs_filePerChapter;
145 HelpFileAnchors m_helpFileAnchors;
146 wxString m_maximaHtmlDir;
147 wxString m_maximaVersion;
Small compatibility shims for older toolchains and older wxWidgets.
The configuration storage for the current worksheet.
Definition: Configuration.h:102
Definition: MaximaManual.h:59
bool LoadManualAnchorsFromCache()
Load the result from the last CompileHelpFileAnchors from the disk cache.
Definition: MaximaManual.cpp:105
void LoadHelpFileAnchors(const wxString &docdir, const wxString &maximaVersion)
Search maxima's help file for command and variable names.
Definition: MaximaManual.cpp:548
void SaveManualAnchorsToCache(const wxString &maximaHtmlDir, const wxString &maximaVersion, const wxString &saveName)
Save the list of help file anchors to the cache.
Definition: MaximaManual.cpp:327
bool LoadManualAnchorsFromXML(const wxXmlDocument &xmlDocument, bool checkManualVersion=true)
Load the help file anchors from an wxXmlDocument.
Definition: MaximaManual.cpp:398
bool LoadBuiltInManualAnchors()
Load the help file anchors from the built-in list.
Definition: MaximaManual.cpp:93
void CompileHelpFileAnchors(const stop_token &stopToken, const wxString &maximaHtmlDir, const wxString &maximaShareDir, const wxString &maximaVersion, const wxString &saveName)
Collect all keyword anchors in the help file.
Definition: MaximaManual.cpp:154