The page cache is one directory per document; the shipped suites measure under a UTF-8 locale (from dev 3321e7c9e36e)

This commit is contained in:
ack committed 2026-10-19 00:44:35 +02:00
1 parent d09909a111
commit 73feb007c5
8 files changed
+51 -9

No files matched your search

+26
View File
@@ -1,4 +1,6 @@
#include "util.h"
#include <functional>
#include <sstream>
#include "machine.h"
#include "error.h"
#include "kutil.h"
@@ -133,6 +135,30 @@ Document_class::Document_class(Machine& machine) : Klammer_base(machine)
}
// The cache directory of ONE document: the target's cache directory
// (_latex_files, _html_pages) with a subdirectory per document, named by
// the document's stem and a hash of its absolute path. The cache used to
// be one directory per target with an entry per chapter BASENAME, shared by
// every document on the machine, and freshness is only "the source is
// older than the entry": document A's kt/alpha.kt was served document B's
// cached alpha whenever B had rendered later -- silently when the chapter
// assembled, with B's error message when it did not (TODO 79, 2026-10-19).
// The hash, not the path itself: a path can be long and hold any
// character; the stem is for the eye. A document given as a string
// (ktext -s) has no file and is keyed by the working directory, where its
// _text.kt is rewritten on every run.
std::string Document_class::document_cache_directory(const std::string& target_cache) const
{
const fs::path document = m_kt_root_filename.empty()
? fs::current_path() / "_string_input"
: fs::absolute(fs::path(m_kt_root_filename)).lexically_normal();
std::ostringstream key;
key << document.stem().string() << "-" << std::hex
<< std::hash<std::string>{}(document.generic_string());
return cache_directory(target_cache + "/" + key.str());
}
void Document_class::save_string_input_as_file()
{
if (!m_text.empty()) {