2015-04-29 17:03:15 -04:00
|
|
|
#include "LangConfig.h"
|
|
|
|
#include <config/languages_json.h>
|
|
|
|
|
2015-06-03 17:06:55 -04:00
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*/
|
2015-04-29 17:03:15 -04:00
|
|
|
LangConfig::LangConfig()
|
|
|
|
{
|
|
|
|
this->LoadJson(languages_json);
|
2019-05-17 16:19:42 -04:00
|
|
|
this->language = "";
|
2015-05-12 16:30:22 -04:00
|
|
|
|
|
|
|
// "cache" reverse map of languages to their keys
|
|
|
|
JsonValue langList = this->GetRoot();
|
|
|
|
JsonValue::iterator it;
|
|
|
|
|
2015-05-13 16:55:44 -04:00
|
|
|
// Special case for non-recognized language
|
|
|
|
reverseMap["Plain Text"] = "";
|
|
|
|
|
2015-05-12 16:30:22 -04:00
|
|
|
for (it = langList.begin(); it != langList.end(); ++it)
|
|
|
|
{
|
|
|
|
JsonValue langObj = *it;
|
|
|
|
reverseMap[langObj.get("name", JsonValue()).asString()] = it.key().asString();
|
|
|
|
}
|
2015-04-29 17:03:15 -04:00
|
|
|
}
|
|
|
|
|
2015-06-03 17:06:55 -04:00
|
|
|
/**
|
|
|
|
* Destructor
|
|
|
|
*/
|
2015-06-18 13:34:54 -04:00
|
|
|
LangConfig::~LangConfig() {}
|
2015-04-29 17:03:15 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Determine the format of the current file by
|
|
|
|
* matching its extension against the patterns
|
|
|
|
* in the configuration files
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
string LangConfig::GetLangByFile(wxFileName &fileName)
|
|
|
|
{
|
|
|
|
JsonValue langList = this->GetRoot();
|
|
|
|
JsonValue::iterator it;
|
|
|
|
|
|
|
|
wxString curr_file = fileName.GetFullName();
|
|
|
|
|
|
|
|
// Loop through each language to find a matching file pattern
|
|
|
|
for (it = langList.begin(); it != langList.end(); ++it)
|
|
|
|
{
|
|
|
|
string lang = it.key().asString();
|
|
|
|
|
|
|
|
// Parse the file pattern
|
|
|
|
wxString file_pattern((*it)["file_pattern"].asString());
|
|
|
|
|
|
|
|
file_pattern.Lower();
|
|
|
|
|
|
|
|
while ( ! file_pattern.empty())
|
|
|
|
{
|
|
|
|
wxString cur = file_pattern.BeforeFirst(';');
|
|
|
|
if (
|
|
|
|
(cur == curr_file) ||
|
|
|
|
(cur == (curr_file.BeforeLast('.') + ".*")) ||
|
|
|
|
(cur == ("*." + curr_file.AfterLast('.')))
|
|
|
|
)
|
|
|
|
{
|
|
|
|
this->SetLang(lang);
|
2019-05-17 16:19:42 -04:00
|
|
|
return this->language;
|
2015-04-29 17:03:15 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// Go to the next pattern for this language
|
|
|
|
file_pattern = file_pattern.AfterFirst(';');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-07 17:05:27 -04:00
|
|
|
this->SetLang("");
|
2019-05-17 16:19:42 -04:00
|
|
|
return this->language;
|
2015-04-29 17:03:15 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the list of keywords for the selected language
|
|
|
|
*
|
|
|
|
* @param string lang
|
|
|
|
* @return JsonValue
|
|
|
|
*/
|
|
|
|
JsonValue LangConfig::GetKeywordList(string lang)
|
|
|
|
{
|
2019-05-17 16:19:42 -04:00
|
|
|
if (lang == "none") lang = this->language;
|
2015-04-29 17:03:15 -04:00
|
|
|
|
|
|
|
return this->GetRoot()
|
|
|
|
.get(lang, JsonValue())
|
|
|
|
.get("keywords", JsonValue());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the lexer theme map for the current language
|
|
|
|
*
|
|
|
|
* @param string lang
|
|
|
|
* @return JsonValue
|
|
|
|
*/
|
|
|
|
JsonValue LangConfig::GetLexerMap(string lang)
|
|
|
|
{
|
2019-05-17 16:19:42 -04:00
|
|
|
if (lang == "none") lang = this->language;
|
2015-04-29 17:03:15 -04:00
|
|
|
|
|
|
|
return this->GetRoot()
|
|
|
|
.get(lang, JsonValue())
|
|
|
|
.get("lexer_map", JsonValue());
|
|
|
|
}
|
|
|
|
|
2015-06-03 17:06:55 -04:00
|
|
|
/**
|
|
|
|
* Set the selected language key
|
|
|
|
*
|
|
|
|
* @param string lang
|
|
|
|
* @return void
|
|
|
|
*/
|
2015-04-29 17:03:15 -04:00
|
|
|
void LangConfig::SetLang(string lang)
|
|
|
|
{
|
2019-05-17 16:19:42 -04:00
|
|
|
this->language = lang;
|
2015-04-29 17:03:15 -04:00
|
|
|
}
|
|
|
|
|
2015-05-12 16:30:22 -04:00
|
|
|
/**
|
|
|
|
* Get the current language key
|
|
|
|
*/
|
2015-04-29 17:03:15 -04:00
|
|
|
string LangConfig::GetLang()
|
|
|
|
{
|
2019-05-17 16:19:42 -04:00
|
|
|
return this->language;
|
2015-05-08 16:01:36 -04:00
|
|
|
}
|
|
|
|
|
2015-05-12 16:30:22 -04:00
|
|
|
/**
|
|
|
|
* Get the name attribute of the currently selected language
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
string LangConfig::GetCurrentLangName()
|
|
|
|
{
|
|
|
|
return this->GetRoot()
|
2019-05-17 16:19:42 -04:00
|
|
|
.get(this->language, JsonValue())
|
2015-05-12 16:30:22 -04:00
|
|
|
.get("name", JsonValue())
|
|
|
|
.asString();
|
|
|
|
}
|
|
|
|
|
2015-05-13 16:55:44 -04:00
|
|
|
/**
|
|
|
|
* Get the "key" of the language based on its name attribute
|
|
|
|
*
|
|
|
|
* @param string name
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
string LangConfig::GetLangByName(string name)
|
|
|
|
{
|
2015-05-14 14:59:04 -04:00
|
|
|
int count = this->reverseMap.count(name);
|
|
|
|
return (count > 0) ? this->reverseMap[name] : "";
|
2015-05-13 16:55:44 -04:00
|
|
|
}
|
|
|
|
|
2015-05-12 16:30:22 -04:00
|
|
|
/**
|
|
|
|
* Gets the list of languages available
|
|
|
|
*
|
|
|
|
* @return StringMap
|
|
|
|
*/
|
2015-05-08 16:01:36 -04:00
|
|
|
StringMap LangConfig::GetLangList()
|
|
|
|
{
|
2015-05-12 16:30:22 -04:00
|
|
|
StringMap revList = this->reverseMap;
|
|
|
|
StringMap::iterator it;
|
2015-05-08 16:01:36 -04:00
|
|
|
|
|
|
|
StringMap outputList;
|
|
|
|
|
2015-05-12 16:30:22 -04:00
|
|
|
for (it = revList.begin(); it != revList.end(); ++it)
|
2015-05-08 16:01:36 -04:00
|
|
|
{
|
2015-05-12 16:30:22 -04:00
|
|
|
outputList[it->second] = it->first;
|
2015-05-08 16:01:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return outputList;
|
2015-06-03 17:06:55 -04:00
|
|
|
}
|