NoTeX 1.0.0
A modern noteworthy LaTeX template
Loading...
Searching...
No Matches
document.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
9#include <filesystem>
10#include <functional>
11#include <optional>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace notex {
17
31class Document {
32public:
35 using LinePredicate = std::function<bool(const std::string&)>;
36
41 static Document load(const std::filesystem::path& path);
42
45 const std::vector<std::string>& lines() const noexcept { return lines_; }
46
48 std::vector<std::size_t> find_all(const LinePredicate& predicate) const;
49
60 std::size_t find_unique(const LinePredicate& predicate,
61 std::string_view description) const;
62
66 std::optional<std::size_t> find_last(const LinePredicate& predicate) const;
67
69 void insert_line(std::size_t index, std::string text);
70
72 void insert_lines(std::size_t index, std::vector<std::string> new_lines);
73
75 void remove_line(std::size_t index);
76
92 std::string_view option,
93 const std::vector<std::string>& mutually_exclusive_group);
94
100 void save() const;
101
102private:
103 Document(std::filesystem::path path, std::vector<std::string> lines);
104
105 std::filesystem::path path_;
106 std::vector<std::string> lines_;
107};
108
109} // namespace notex
Loads a .tex file as a sequence of lines and offers editing primitives anchored on recognisable landm...
Definition document.hpp:31
void set_documentclass_option(std::string_view option, const std::vector< std::string > &mutually_exclusive_group)
Rewrites the document's unique \documentclass line so that its bracketed options contain option inste...
Definition document.cpp:103
static Document load(const std::filesystem::path &path)
Loads path as a sequence of lines.
Definition document.cpp:35
std::optional< std::size_t > find_last(const LinePredicate &predicate) const
Definition document.cpp:80
std::function< bool(const std::string &)> LinePredicate
Definition document.hpp:35
std::size_t find_unique(const LinePredicate &predicate, std::string_view description) const
Locates the single line matching predicate.
Definition document.cpp:57
std::vector< std::size_t > find_all(const LinePredicate &predicate) const
Definition document.cpp:48
void insert_lines(std::size_t index, std::vector< std::string > new_lines)
Inserts new_lines, in order, before the current line index.
Definition document.cpp:92
void insert_line(std::size_t index, std::string text)
Inserts text as a new line before the current line index.
Definition document.cpp:87
void remove_line(std::size_t index)
Removes the line at index.
Definition document.cpp:99
const std::vector< std::string > & lines() const noexcept
Definition document.hpp:45
void save() const
Writes the current lines back to disk atomically.
Definition document.cpp:169