And now totally on the new parser and ready to push the features furthers.

master
Zed A. Shaw 2 days ago
parent a9fa98b644
commit 69e8e5c43b
  1. 62
      backup_parser.cpp
  2. 5
      main.cpp
  3. 1
      meson.build
  4. 10
      parser.cpp
  5. 2
      parser.hpp
  6. 9
      tests/parsing.cpp

@ -1,62 +0,0 @@
#include "parser.hpp"
#include "dbc.hpp"
#include <filesystem>
#include <fstream>
#include <iostream>
#include <nlohmann/json.hpp>
#include <memory>
#include <string_view>
#include <ranges>
using std::shared_ptr, std::string, nlohmann::json, std::string_view;
namespace fs = std::filesystem;
shared_ptr<SlideDeck> parse_slides(const string& md_file) {
shared_ptr<SlideDeck> deck = std::make_shared<SlideDeck>();
dbc::check(fs::exists(md_file), "md file missing");
auto size = fs::file_size(md_file);
string line(size, '\0');
bool started = false;
json config;
if(std::ifstream in_file{md_file, std::ios::binary}) {
while(std::getline(in_file, line)) {
if(line == "{") {
string json_data;
do {
json_data += line;
} while (std::getline(in_file, line) && line != "}");
json_data += "}";
config = json::parse(json_data);
std::cout << "JSON: " << config << '\n';
} else if(line == "===") {
deck->config = config;
fmt::println("START");
started = true;
} else if(line == "---") {
fmt::println("START SLIDE");
} else {
if(started) {
string title = line;
string content;
while(std::getline(in_file, line) && line != "---") {
content += line + "\n";
}
deck->slides.emplace_back(title, content, config);
config = json::parse("{}");
} else {
fmt::println("JUNK: {}", line);
}
}
}
}
return deck;
}

@ -26,10 +26,7 @@ int main(int argc, char *argv[]) {
presenter.setFramerateLimit(FRAME_LIMIT);
presenter.setVerticalSyncEnabled(VSYNC);
auto contents = load_file(argv[1]);
Parser rp;
rp.parse(contents);
auto data = rp.results();
auto data = parse_slides(argv[1]);
SlidesUI slides(data);
slides.init();

@ -85,7 +85,6 @@ sources = [
'control_ui.cpp',
'slides_ui.cpp',
'parser.cpp',
'backup_parser.cpp',
]
tests = [

@ -11,7 +11,6 @@
using std::string, nlohmann::json, std::shared_ptr, std::make_shared;
string load_file(const string& md_file) {
std::ifstream in_file{md_file, std::ios::binary};
dbc::check(bool(in_file), fmt::format("failed to load {}", md_file));
@ -19,7 +18,12 @@ string load_file(const string& md_file) {
return string(std::istreambuf_iterator<char>(in_file), std::istreambuf_iterator<char>());
}
#include "./md_parser.cpp"
std::shared_ptr<SlideDeck> parse_slides(const std::string& md_file) {
auto contents = load_file(md_file);
Parser rp;
rp.parse(contents);
return rp.results();
}
Parser::Parser()
{
@ -28,3 +32,5 @@ Parser::Parser()
void Parser::finalize() {
}
#include "./md_parser.cpp"

@ -5,8 +5,6 @@
std::shared_ptr<SlideDeck> parse_slides(const std::string& md_file);
std::string load_file(const std::string& md_file);
struct Parser {
int last = 0;
bool error = false;

@ -10,13 +10,4 @@ TEST_CASE("parse a simple example", "[parsing]") {
auto data = parse_slides("./sample/01-a-good-first-program.md");
REQUIRE(data->slides.size() > 0);
auto contents = load_file("./sample/01-a-good-first-program.md");
Parser rp;
rp.parse(contents);
REQUIRE(!rp.error);
auto deck = rp.results();
REQUIRE(deck->slides.size() > 0);
}

Loading…
Cancel
Save