Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions src/App.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.UI;

public class Spreadsheet.App : Gtk.Application {
public static Settings settings { get; private set; }

Expand Down Expand Up @@ -74,8 +72,8 @@ public class Spreadsheet.App : Gtk.Application {
active_window.destroy ();
}

private MainWindow new_window () {
var window = new MainWindow (this);
private UI.MainWindow new_window () {
var window = new UI.MainWindow (this);

/*
* Don't bind Settings to windows because state change in one window
Expand Down
9 changes: 4 additions & 5 deletions src/Models/Cell.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Services.Formula;
using Spreadsheet.Services.Parsing;

public class Spreadsheet.Models.Cell : Object {

public weak Page page { get; set; }
Expand All @@ -25,7 +22,9 @@ public class Spreadsheet.Models.Cell : Object {
}

try {
var parser = new FormulaParser (new Lexer (new FormulaGrammar ()).tokenize (value));
var grammar = new Services.Formula.FormulaGrammar ();
var lexer = new Services.Parsing.Lexer (grammar);
var parser = new Services.Formula.FormulaParser (lexer.tokenize (value));
var expression = parser.parse ();

var eval = expression.eval (page);
Expand All @@ -34,7 +33,7 @@ public class Spreadsheet.Models.Cell : Object {
} else if (eval.type () == typeof (string)) {
display_content = (string)eval;
}
} catch (ParserError err) {
} catch (Services.Parsing.ParserError err) {
debug ("Error: " + err.message);
display_content = "Error";
}
Expand Down
26 changes: 12 additions & 14 deletions src/Services/CSV/CSVGrammar.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,26 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Services.Parsing;

public class Spreadsheet.Services.CSV.CSVGrammar : Grammar {
public class Spreadsheet.Services.CSV.CSVGrammar : Parsing.Grammar {
public CSVGrammar () {
rules["root"] = root_rules ();
rules["text"] = text_rules ();
}

private Gee.ArrayList<Evaluator> root_rules () {
return new Gee.ArrayList<Evaluator>.wrap ({
new Evaluator (/,/, token ("comma")),
new Evaluator (/\n/, token ("new-line")),
new Evaluator (re ("\""), token ("quote"), false, { "text" }),
new Evaluator (/./, token ("char"))
private Gee.ArrayList<Parsing.Evaluator> root_rules () {
return new Gee.ArrayList<Parsing.Evaluator>.wrap ({
new Parsing.Evaluator (/,/, token ("comma")),
new Parsing.Evaluator (/\n/, token ("new-line")),
new Parsing.Evaluator (re ("\""), token ("quote"), false, { "text" }),
new Parsing.Evaluator (/./, token ("char"))
});
}

private Gee.ArrayList<Evaluator> text_rules () {
return new Gee.ArrayList<Evaluator>.wrap ({
new Evaluator (/""/, (m) => { return new Token ("char", "\""); }),
new Evaluator (re ("\""), token ("quote"), true),
new Evaluator (/./, token ("char")),
private Gee.ArrayList<Parsing.Evaluator> text_rules () {
return new Gee.ArrayList<Parsing.Evaluator>.wrap ({
new Parsing.Evaluator (/""/, (m) => { return new Parsing.Token ("char", "\""); }),
new Parsing.Evaluator (re ("\""), token ("quote"), true),
new Parsing.Evaluator (/./, token ("char")),
});
}
}
21 changes: 9 additions & 12 deletions src/Services/CSV/CSVParser.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Services.Parsing;
using Spreadsheet.Models;

public class Spreadsheet.Services.CSV.CSVParser : Parsing.Parser {

private string path { get; set; }
Expand All @@ -14,46 +11,46 @@ public class Spreadsheet.Services.CSV.CSVParser : Parsing.Parser {
try {
string content;
FileUtils.get_contents (path, out content);
this (new Lexer (new CSVGrammar ()).tokenize (content));
this (new Parsing.Lexer (new CSVGrammar ()).tokenize (content));
this.path = path;
} catch (Error err) {
critical (err.message);
}
}

public CSVParser (Gee.ArrayList<Token> tokens) {
public CSVParser (Gee.ArrayList<Parsing.Token> tokens) {
base (tokens);
}

public Models.SpreadSheet parse (string page_name = "Sheet 1") throws ParserError {
public Models.SpreadSheet parse (string page_name = "Sheet 1") throws Parsing.ParserError {
string basepath = Path.get_basename (path);
var sheet = new Models.SpreadSheet () {
title = basepath,
file_path = path
};
var page = new Page () {
var page = new Models.Page () {
title = page_name
};
parse_sheet (page);
sheet.add_page (page);
return sheet;
}

public Gee.ArrayList<Cell> parse_sheet (Page page) throws ParserError {
var cells = new Gee.ArrayList<Cell> ();
public Gee.ArrayList<Models.Cell> parse_sheet (Models.Page page) throws Parsing.ParserError {
var cells = new Gee.ArrayList<Models.Cell> ();
int fields_count = 0;
int line = 0;
int col = 0;
while (true) {
var cell = new Cell ();
var cell = new Models.Cell ();
cell.line = line;
cell.column = col;
page.add_cell (cell);
cell.formula = parse_text ();

if (accept ("new-line")) {
if (col != fields_count) {
throw new ParserError.UNEXPECTED (@"Unexpected number of fields on line $line");
throw new Parsing.ParserError.UNEXPECTED (@"Unexpected number of fields on line $line");
}
line++;
col = 0;
Expand All @@ -70,7 +67,7 @@ public class Spreadsheet.Services.CSV.CSVParser : Parsing.Parser {
return cells;
}

private string parse_text () throws ParserError {
private string parse_text () throws Parsing.ParserError {
bool quoted = accept ("quote");
string res = "";
while (current.kind == "char") {
Expand Down
6 changes: 2 additions & 4 deletions src/Services/CSV/CSVWriter.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public class Spreadsheet.Services.CSV.CSVWriter : Object {
public Page page { get; construct set; }
public Models.Page page { get; construct set; }

public CSVWriter (Page page) {
public CSVWriter (Models.Page page) {
Object (page: page);
}

Expand Down
4 changes: 1 addition & 3 deletions src/Services/Formula/AST/CallExpression.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public class Spreadsheet.Services.Formula.AST.CallExpression : Expression {
public string function { get; construct; }
public Gee.ArrayList<Expression> parameters { get; construct; }
Expand All @@ -16,7 +14,7 @@ public class Spreadsheet.Services.Formula.AST.CallExpression : Expression {
);
}

public override Value eval (Page sheet) {
public override Value eval (Models.Page sheet) {
var params = new Value[] {};
foreach (var param in parameters) {
params += param.eval (sheet);
Expand Down
4 changes: 1 addition & 3 deletions src/Services/Formula/AST/CellReference.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public class Spreadsheet.Services.Formula.AST.CellReference : Expression {
public string cell_name { get; set; }

public CellReference () {
}

public override Value eval (Page sheet) {
public override Value eval (Models.Page sheet) {
string letters = cell_name;
letters.canon ("ABCDEFGHIJKLMNOPQRSTUVWXYZ", '?');
string _num = cell_name;
Expand Down
4 changes: 1 addition & 3 deletions src/Services/Formula/AST/Expression.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public abstract class Spreadsheet.Services.Formula.AST.Expression : Object {
public abstract Value eval (Page sheet);
public abstract Value eval (Models.Page sheet);
}
4 changes: 1 addition & 3 deletions src/Services/Formula/AST/NumberExpression.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public class Spreadsheet.Services.Formula.AST.NumberExpression : Expression {
public double number { get; construct; }

Expand All @@ -14,7 +12,7 @@ public class Spreadsheet.Services.Formula.AST.NumberExpression : Expression {
);
}

public override Value eval (Page sheet) {
public override Value eval (Models.Page sheet) {
return number;
}
}
4 changes: 1 addition & 3 deletions src/Services/Formula/AST/TextExpression.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Models;

public class Spreadsheet.Services.Formula.AST.TextExpression : Expression {
public string text { get; construct; }

Expand All @@ -14,7 +12,7 @@ public class Spreadsheet.Services.Formula.AST.TextExpression : Expression {
);
}

public override Value eval (Page sheet) {
public override Value eval (Models.Page sheet) {
return text;
}
}
40 changes: 19 additions & 21 deletions src/Services/Formula/FormulaGrammar.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
* SPDX-FileCopyrightText: 2017-2026 Spreadsheet Developers
*/

using Spreadsheet.Services.Parsing;

public class Spreadsheet.Services.Formula.FormulaGrammar : Grammar {
public class Spreadsheet.Services.Formula.FormulaGrammar : Parsing.Grammar {
private string func_name_regex = "";

public FormulaGrammar () {
Expand All @@ -26,24 +24,24 @@ public class Spreadsheet.Services.Formula.FormulaGrammar : Grammar {
return func_name_regex;
}

private Gee.ArrayList<Evaluator> root_rules () {
return new Gee.ArrayList<Evaluator>.wrap ({
new Evaluator (/[ \t]/, token ("[[ignore]]")),
new Evaluator (/[A-Z]+[0-9]+/, token ("cell-name")),
new Evaluator (/=/, token ("equal")),
new Evaluator (get_func_name_regex (), token ("identifier")),
new Evaluator (/\(/, token ("left-parenthese")), // vala-lint=space-before-paren
new Evaluator (/\)/, token ("right-parenthese")),
new Evaluator (/,/, token ("comma")),
new Evaluator (/:/, token ("colon")),
new Evaluator (/\d+(\.\d+)?/, token ("number")), // vala-lint=space-before-paren
new Evaluator (/\+/, token ("plus")),
new Evaluator (/\*/, token ("star")),
new Evaluator (/-/, token ("dash")),
new Evaluator (/\//, token ("slash")),
new Evaluator (/%/, token ("percent")),
new Evaluator (/\^/, token ("carat")),
new Evaluator (/\D+/, token ("text"))
private Gee.ArrayList<Parsing.Evaluator> root_rules () {
return new Gee.ArrayList<Parsing.Evaluator>.wrap ({
new Parsing.Evaluator (/[ \t]/, token ("[[ignore]]")),
new Parsing.Evaluator (/[A-Z]+[0-9]+/, token ("cell-name")),
new Parsing.Evaluator (/=/, token ("equal")),
new Parsing.Evaluator (get_func_name_regex (), token ("identifier")),
new Parsing.Evaluator (/\(/, token ("left-parenthese")), // vala-lint=space-before-paren
new Parsing.Evaluator (/\)/, token ("right-parenthese")),
new Parsing.Evaluator (/,/, token ("comma")),
new Parsing.Evaluator (/:/, token ("colon")),
new Parsing.Evaluator (/\d+(\.\d+)?/, token ("number")), // vala-lint=space-before-paren
new Parsing.Evaluator (/\+/, token ("plus")),
new Parsing.Evaluator (/\*/, token ("star")),
new Parsing.Evaluator (/-/, token ("dash")),
new Parsing.Evaluator (/\//, token ("slash")),
new Parsing.Evaluator (/%/, token ("percent")),
new Parsing.Evaluator (/\^/, token ("carat")),
new Parsing.Evaluator (/\D+/, token ("text"))
});
}
}
Loading