You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
3.8 KiB

#ifndef JUCI_SOURCE_H_
#define JUCI_SOURCE_H_
#include <iostream>
11 years ago
#include <unordered_map>
#include <vector>
#include <string>
#include "gtkmm.h"
#include "clangmm.h"
11 years ago
using std::string;
namespace Source {
11 years ago
class Config {
11 years ago
public:
Config(const Config &original);
Config();
11 years ago
const std::unordered_map<string, string>& tagtable() const;
11 years ago
const std::unordered_map<string, string>& typetable() const;
11 years ago
void SetTagTable(const std::unordered_map<string, string> &tagtable);
void InsertTag(const string &key, const string &value);
11 years ago
void SetTypeTable(const std::unordered_map<string, string> &tagtable);
void InsertType(const string &key, const string &value);
11 years ago
private:
std::unordered_map<string, string> tagtable_;
11 years ago
std::unordered_map<string, string> typetable_;
11 years ago
string background_;
}; // class Config
class Location {
public:
Location(const Location &location);
Location(int line_number, int column_offset);
int line_number() const { return line_number_; }
int column_offset() const { return column_offset_; }
11 years ago
private:
int line_number_;
int column_offset_;
};
class Range {
public:
Range(const Location &start, const Location &end, int kind);
Range(const Range &org);
const Location& start() const { return start_; }
const Location& end() const { return end_; }
int kind() const { return kind_; }
11 years ago
private:
Location start_;
Location end_;
int kind_;
};
11 years ago
class View : public Gtk::TextView {
public:
View();
void ApplyConfig(const Config &config);
void OnLineEdit(const std::vector<Range> &locations,
const Config &config);
void OnUpdateSyntax(const std::vector<Range> &locations,
const Config &config);
private:
11 years ago
string GetLine(const Gtk::TextIter &begin);
}; // class View
class Model{
public:
// constructor for Source::Model
explicit Model(const Source::Config &config);
// inits the syntax highligthing on file open
void initSyntaxHighlighting(const std::string &filepath,
const std::string &project_path,
const std::string &text,
int start_offset,
int end_offset);
// sets the filepath for this mvc
void set_file_path(const string &file_path);
// sets the project path for this mvc
void set_project_path(const string &project_path);
// sets the ranges for keywords in this mvc
void set_ranges(const std::vector<Range> &ranges);
// gets the file_path member
const string& file_path() const;
// gets the project_path member
const string& project_path() const;
// gets the ranges member
const std::vector<Range>& source_ranges() const;
// gets the config member
const Config& config() const;
~Model() { }
void OnLineEdit(const std::string &buffer);
11 years ago
private:
Config config_;
string file_path_;
string project_path_;
std::vector<Range> source_ranges_;
clang::TranslationUnit tu_;
void extractTokens(int, int);
void LiteralToken(clang::Token *token);
void CommentToken(clang::Token *token);
void IdentifierToken(clang::Token *token);
void KeywordToken(clang::Token *token);
void PunctuationToken(clang::Token *token);
void HighlightToken(clang::Token *token, int token_kind);
std::vector<const char*> get_compilation_commands();
};
class Controller {
public:
explicit Controller(const Source::Config &config);
Controller();
View& view();
Model& model();
void OnNewEmptyFile();
void OnOpenFile(const string &filename);
Glib::RefPtr<Gtk::TextBuffer> buffer();
private:
11 years ago
void OnLineEdit();
void OnSaveFile();
protected:
View view_;
Model model_;
}; // class Controller
} // namespace Source
#endif // JUCI_SOURCE_H_