-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlanguage.cpp
42 lines (36 loc) · 1015 Bytes
/
language.cpp
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
#include "language.h"
#include <QFileInfo>
#include <QRegularExpression>
#include <Qsci/qscilexercpp.h>
#include <Qsci/qscilexermakefile.h>
const QStringList cSuf = { "c" };
const QStringList cxxSuf = { "cpp", "cxx", "cc", "C" };
const QStringList hSuf = { "h", "hpp" };
Language* Language::query(QString path) {
if (path[0] == '#') {
return new CxxLanguage;
}
QString base = QFileInfo(path).baseName();
QString suf = QFileInfo(path).suffix();
if (QRegularExpression(R"(^[Mm]akefile$)").match(base).hasMatch()) {
return new MakefileLanguage;
} else if (cSuf.contains(suf)) {
return new CLanguage;
} else if (cxxSuf.contains(suf) || hSuf.contains(suf)) {
return new CxxLanguage;
} else {
return new PlainLanguage;
}
}
QsciLexer* PlainLanguage::lexer() const {
return nullptr;
}
QsciLexer* MakefileLanguage::lexer() const {
return new QsciLexerMakefile;
}
QsciLexer* CLanguage::lexer() const {
return new QsciLexerCPP;
}
QsciLexer* CxxLanguage::lexer() const {
return new QsciLexerCPP;
}