1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
//
// Author: Lorenzo Bettini <http://www.lorenzobettini.it>, (C) 2004-2008
//
// Copyright: See COPYING file that comes with this distribution
//
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "langdefmanager.h"
#include "fileutil.h"
#include "langdefparserfun.h"
#include "langelems.h"
#include "highlightstatebuilder.hpp"
#include "settings.h"
using namespace std;
namespace srchilite {
LangDefManager::LangDefManager(HighlightRuleFactory *_ruleFactory) :
ruleFactory(_ruleFactory) {
}
LangDefManager::~LangDefManager() {
}
HighlightStatePtr LangDefManager::buildHighlightState(const string &path,
const string &file) {
HighlightStatePtr highlightState(new HighlightState);
// parse the contents of the langdef file
LangElems *elems = getLangElems(path, file);
HighlightStateBuilder builder(ruleFactory);
// build the highlight state corresponding to the language definition file
builder.build(elems, highlightState);
delete elems;
return highlightState;
}
HighlightStatePtr LangDefManager::getHighlightState(const string &path,
const string &file) {
const string key = (path.size() ? path + "/" : "") + file;
HighlightStatePtr highlightState = highlightStateCache[key];
// check whether we had already built such an HighlightState
if (highlightState.get())
return highlightState;
// otherwise build it
highlightState = buildHighlightState(path, file);
// store in the cache
highlightStateCache[key] = highlightState;
return highlightState;
}
HighlightStatePtr LangDefManager::getHighlightState(const string &file) {
return getHighlightState(Settings::retrieveDataDir(), file);
}
LangElems *LangDefManager::getLangElems(const std::string &path,
const std::string &file) {
return parse_lang_def(path.c_str(), file.c_str());
}
}
|