30 #ifndef AUTOCOMPLETE_H
31 #define AUTOCOMPLETE_H
38 #include <wx/arrstr.h>
40 #include <wx/filename.h>
42 #include "Configuration.h"
55 WX_DECLARE_STRING_HASH_MAP(
int, WorksheetWords);
58 using WordList = std::vector<wxString>;
103 void AddWorksheetWords(WordList::const_iterator begin, WordList::const_iterator end);
121 void LoadableFiles_BackgroundTask();
123 void BuiltinSymbols_BackgroundTask();
126 void UpdateLoadFiles_BackgroundTask(wxString partial, wxString maximaDir);
128 wxArrayString m_builtInLoadFiles;
130 wxArrayString m_builtInDemoFiles;
133 class GetGeneralFiles :
public wxDirTraverser
136 explicit GetGeneralFiles(wxArrayString& files, wxString prefix = wxEmptyString) :
137 m_files(files), m_prefix(prefix) { }
138 virtual wxDirTraverseResult OnFile(
const wxString& filename)
override
140 wxFileName newItemName(filename);
141 wxString newItem =
"\"" + m_prefix + newItemName.GetFullName() +
"\"";
142 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
143 if(m_files.Index(newItem) == wxNOT_FOUND)
144 m_files.Add(newItem);
145 return wxDIR_CONTINUE;
147 virtual wxDirTraverseResult OnDir(
const wxString& dirname)
override
149 wxFileName newItemName(dirname);
150 wxString newItem =
"\"" + m_prefix + newItemName.GetFullName() +
"/\"";
151 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
152 if(m_files.Index(newItem) == wxNOT_FOUND)
153 m_files.Add(newItem);
156 wxArrayString& GetResult(){
return m_files;}
158 wxArrayString& m_files;
163 class GetMacFiles_includingSubdirs :
public wxDirTraverser
166 explicit GetMacFiles_includingSubdirs(wxArrayString& files, wxString prefix = wxEmptyString) :
167 m_files(files), m_prefix(prefix) { }
168 virtual wxDirTraverseResult OnFile(
const wxString& filename)
override
171 (filename.EndsWith(
".mac"))||
172 (filename.EndsWith(
".lisp"))||
173 (filename.EndsWith(
".wxm"))
176 wxFileName newItemName(filename);
177 wxString newItem =
"\"" + m_prefix + newItemName.GetName() +
"\"";
178 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
179 if(m_files.Index(newItem) == wxNOT_FOUND)
180 m_files.Add(newItem);
182 return wxDIR_CONTINUE;
184 virtual wxDirTraverseResult OnDir(
const wxString& dirname)
override
186 if((dirname.EndsWith(
".git")) ||
187 (dirname.EndsWith(
"/share/share")) ||
188 (dirname.EndsWith(
"/src/src")) ||
189 (dirname.EndsWith(
"/doc/doc")) ||
190 (dirname.EndsWith(
"/interfaces/interfaces"))
194 return wxDIR_CONTINUE;
196 wxArrayString& GetResult(){
return m_files;}
198 wxArrayString& m_files;
203 class GetMacFiles :
public GetMacFiles_includingSubdirs
206 explicit GetMacFiles(wxArrayString& files, wxString prefix = wxEmptyString) :
207 GetMacFiles_includingSubdirs(files, prefix){ }
208 virtual wxDirTraverseResult OnDir(
const wxString& dirname)
override
210 wxFileName newItemName(dirname);
211 wxString newItem =
"\"" + m_prefix + newItemName.GetFullName() +
"/\"";
212 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
213 if(m_files.Index(newItem) == wxNOT_FOUND)
214 m_files.Add(newItem);
220 class GetDemoFiles_includingSubdirs :
public wxDirTraverser
223 explicit GetDemoFiles_includingSubdirs(wxArrayString& files, wxString prefix = wxEmptyString) :
224 m_files(files), m_prefix(prefix) { }
225 virtual wxDirTraverseResult OnFile(
const wxString& filename)
override
227 if(filename.EndsWith(
".dem"))
229 wxFileName newItemName(filename);
230 wxString newItem =
"\"" + m_prefix + newItemName.GetName() +
"\"";
231 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
232 if(m_files.Index(newItem) == wxNOT_FOUND)
233 m_files.Add(newItem);
235 return wxDIR_CONTINUE;
237 virtual wxDirTraverseResult OnDir(
const wxString& dirname)
override
239 if((dirname.EndsWith(
".git")) ||
240 (dirname.EndsWith(
"/share/share")) ||
241 (dirname.EndsWith(
"/src/src")) ||
242 (dirname.EndsWith(
"/doc/doc")) ||
243 (dirname.EndsWith(
"/interfaces/interfaces"))
247 return wxDIR_CONTINUE;
249 wxArrayString& GetResult(){
return m_files;}
251 wxArrayString& m_files;
256 class GetDemoFiles :
public GetDemoFiles_includingSubdirs
259 explicit GetDemoFiles(wxArrayString& files, wxString prefix = wxEmptyString) :
260 GetDemoFiles_includingSubdirs(files, prefix){ }
261 virtual wxDirTraverseResult OnDir(
const wxString& dirname)
override
263 wxFileName newItemName(dirname);
264 wxString newItem =
"\"" + m_prefix + newItemName.GetFullName() +
"/\"";
265 newItem.Replace(wxFileName::GetPathSeparator(),
"/");
266 if(m_files.Index(newItem) == wxNOT_FOUND)
267 m_files.Add(newItem);
272 void WaitForBackgroundThread_Symbols();
273 void WaitForBackgroundThread_Files();
274 void WaitForBackgroundThreads();
277 wxArrayString m_wordList[7];
278 static wxRegEx m_args;
279 WorksheetWords m_worksheetWords;
280 std::unique_ptr<std::thread> m_addSymbols_backgroundThread;
281 std::unique_ptr<std::thread> m_addFiles_backgroundThread;
284 #endif // AUTOCOMPLETE_H