Use a lel:: namespace.
This commit is contained in:
parent
cebf61a794
commit
1620a5420f
6 changed files with 155 additions and 148 deletions
154
lel.cpp
154
lel.cpp
|
@ -1,92 +1,96 @@
|
|||
#include "lel.hpp"
|
||||
#include <fmt/core.h>
|
||||
#include "dbc.hpp"
|
||||
|
||||
#include "lel_parser.cpp"
|
||||
|
||||
LELParser::LELParser(int x, int y, int width, int height) :
|
||||
grid_x(x),
|
||||
grid_y(y),
|
||||
grid_w(width),
|
||||
grid_h(height),
|
||||
cur(0, 0)
|
||||
{
|
||||
}
|
||||
namespace lel {
|
||||
|
||||
void LELParser::ltab() {
|
||||
cur.row = rows;
|
||||
}
|
||||
|
||||
void LELParser::col() {
|
||||
}
|
||||
|
||||
void LELParser::valign(char dir) {
|
||||
cur.bottom = dir == '.';
|
||||
}
|
||||
|
||||
void LELParser::align(char dir) {
|
||||
cur.right = dir == '>';
|
||||
}
|
||||
|
||||
void LELParser::id(std::string name) {
|
||||
if(name != "_") {
|
||||
dbc::check(!cells.contains(name),
|
||||
fmt::format("duplicate cell name {}", name));
|
||||
cells.insert_or_assign(name, cur);
|
||||
Parser::Parser(int x, int y, int width, int height) :
|
||||
grid_x(x),
|
||||
grid_y(y),
|
||||
grid_w(width),
|
||||
grid_h(height),
|
||||
cur(0, 0)
|
||||
{
|
||||
}
|
||||
|
||||
cur = {cur.col + 1, cur.row};
|
||||
}
|
||||
void Parser::ltab() {
|
||||
cur.row = rows;
|
||||
}
|
||||
|
||||
void LELParser::row() {
|
||||
rows++;
|
||||
columns = std::max(columns, cur.col);
|
||||
cur.col = 0;
|
||||
}
|
||||
void Parser::col() {
|
||||
}
|
||||
|
||||
void LELParser::setwidth(int width) {
|
||||
cur.max_w = width;
|
||||
}
|
||||
void Parser::valign(char dir) {
|
||||
cur.bottom = dir == '.';
|
||||
}
|
||||
|
||||
void LELParser::setheight(int height) {
|
||||
cur.max_h = height;
|
||||
}
|
||||
void Parser::align(char dir) {
|
||||
cur.right = dir == '>';
|
||||
}
|
||||
|
||||
void LELParser::expand() {
|
||||
cur.expand = true;
|
||||
}
|
||||
|
||||
void LELParser::finalize() {
|
||||
dbc::check(columns > 0, "columns are 0");
|
||||
dbc::check(rows > 0, "rows are 0");
|
||||
int cell_width = grid_w / columns;
|
||||
int cell_height = grid_h / rows;
|
||||
dbc::check(cell_width > 0, "invalid cell width calc");
|
||||
dbc::check(cell_height > 0, "invalid cell height calc");
|
||||
|
||||
for(auto& [name, cell] : cells) {
|
||||
cell.x = grid_x + (cell.col * cell_width);
|
||||
cell.y = grid_y + (cell.row * cell_height);
|
||||
cell.max_w = cell.max_w == 0 ? cell_width : cell.max_w;
|
||||
cell.max_h = cell.max_h == 0 ? cell_height : cell.max_h;
|
||||
|
||||
cell.w = cell.expand ? std::min(cell.max_w, grid_w) : std::min(cell_width, cell.max_w);
|
||||
cell.h = cell.expand ? std::min(cell.max_h, grid_h) : std::min(cell_height, cell.max_h);
|
||||
|
||||
if(cell.right) {
|
||||
cell.x += cell_width - cell.w;
|
||||
void Parser::id(std::string name) {
|
||||
if(name != "_") {
|
||||
dbc::check(!cells.contains(name),
|
||||
fmt::format("duplicate cell name {}", name));
|
||||
cells.insert_or_assign(name, cur);
|
||||
}
|
||||
|
||||
if(cell.bottom) {
|
||||
cell.y += cell_height - cell.h;
|
||||
}
|
||||
cur = {cur.col + 1, cur.row};
|
||||
}
|
||||
|
||||
dbc::check(cell.h > 0, fmt::format("invalid height cell {}", name));
|
||||
dbc::check(cell.w > 0, fmt::format("invalid width cell {}", name));
|
||||
void Parser::row() {
|
||||
rows++;
|
||||
columns = std::max(columns, cur.col);
|
||||
cur.col = 0;
|
||||
}
|
||||
|
||||
void Parser::setwidth(int width) {
|
||||
cur.max_w = width;
|
||||
}
|
||||
|
||||
void Parser::setheight(int height) {
|
||||
cur.max_h = height;
|
||||
}
|
||||
|
||||
void Parser::expand() {
|
||||
cur.expand = true;
|
||||
}
|
||||
|
||||
void Parser::finalize() {
|
||||
dbc::check(columns > 0, "columns are 0");
|
||||
dbc::check(rows > 0, "rows are 0");
|
||||
int cell_width = grid_w / columns;
|
||||
int cell_height = grid_h / rows;
|
||||
dbc::check(cell_width > 0, "invalid cell width calc");
|
||||
dbc::check(cell_height > 0, "invalid cell height calc");
|
||||
|
||||
for(auto& [name, cell] : cells) {
|
||||
cell.x = grid_x + (cell.col * cell_width);
|
||||
cell.y = grid_y + (cell.row * cell_height);
|
||||
cell.max_w = cell.max_w == 0 ? cell_width : cell.max_w;
|
||||
cell.max_h = cell.max_h == 0 ? cell_height : cell.max_h;
|
||||
|
||||
cell.w = cell.expand ? std::min(cell.max_w, grid_w) : std::min(cell_width, cell.max_w);
|
||||
cell.h = cell.expand ? std::min(cell.max_h, grid_h) : std::min(cell_height, cell.max_h);
|
||||
|
||||
if(cell.right) {
|
||||
cell.x += cell_width - cell.w;
|
||||
}
|
||||
|
||||
if(cell.bottom) {
|
||||
cell.y += cell_height - cell.h;
|
||||
}
|
||||
|
||||
dbc::check(cell.h > 0, fmt::format("invalid height cell {}", name));
|
||||
dbc::check(cell.w > 0, fmt::format("invalid width cell {}", name));
|
||||
}
|
||||
}
|
||||
|
||||
void Parser::reset() {
|
||||
rows = 0;
|
||||
columns = 0;
|
||||
cur = {0, 0};
|
||||
}
|
||||
}
|
||||
|
||||
void LELParser::reset() {
|
||||
rows = 0;
|
||||
columns = 0;
|
||||
cur = {0, 0};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue