489 Commits
Author SHA1 Message Date
Oliver Hamlet 55bdf56227 Update version and changelog for v0.28.0 2025-08-02 16:36:20 +01:00
Oliver Hamlet b75eced9ea Rename and tidy up the parameterized-test crate
It needed to be renamed to allow it to be published on crates.io, as there's already a parameterized_test crate there.
2025-08-02 16:05:36 +01:00
Oliver Hamlet bca7af2af8 Update the changelog 2025-08-01 18:20:33 +01:00
Oliver Hamlet 724f6eaa15 Add versions to dependency copyright notices 2025-07-30 19:15:09 +01:00
Oliver Hamlet f14e47e0e8 Switch to the regress crate for regex
It uses about 56 MB less memory when LOOT launches into my Skyrim SE
large test load order with the latest masterlist and prelude, and
explicitly targets ECMAScript-like syntax like C++ std::regex does,
though supports newer functionality.

Compared to fancy-regex's syntax support, regress adds support for the
\0 nul character escape and removes support for:

- modifiers (e.g. `(?i)`)
- some Unicode character classes (e.g. used with `\p{}` and `\P{}`)
- the ASCII/POSIX character classes (e.g. `[:alpha:]`)
- various character escapes, including \A \a \z \b{start} \<
  \b{end} \> \b{start-half} \b{end-half}
- (?P<name>exp) named capture groups

However, since regress's v flag requires more characters to be escaped
inside character classes than fancy-regex's Unicode support requires,
it's not used, so that further restricts the supported Unicode character
classes, and means that character class intersection, union and
subtraction syntaxes aren't supported.

The nul character escape is irrelevant for filename matching as it's not
allowed in Windows or Linux filenames.

Compared to C++ std::regex, the new restrictions are:

- the lack of support for ASCII/POSIX character classes
- the lack of support for control character escapes (e.g. `\cX`)

The lack of support for control character escapes is irrelevant as
control characters aren't allowed in Windows filenames.

A search of the masterlists doesn't find any use of the ASCII character
classes, and it's very unlikely that any user metadata would use them.
If such syntax is in use, it'll cause an error.
2025-07-29 18:25:40 +01:00
Oliver Hamlet efd2d43ae3 Update plugin name regex doc
fancy-regex supports more syntax than C++ std::regex, but for the syntax
that they both accept:

- std::regex matches . against a single character, fancy-regex matches
  it against a Unicode codepoint
- \w \W \d \D \s \S \b and \B are locale-dependent in std::regex but
  Unicode-aware and locale-independent in fancy-regex
- case-insensitive comparisons are locale-dependent in std::regex but
  are Unicode-aware and locale-independent in fancy-regex
- std::regex supports \0 and \cX escapes, where X is in [A-Za-z] but
  fancy-regex does not. This is not significant for libloot's usage as
  nul and control characters are not allowed in Windows filenames.
- std::regex treats \< and \> as < and > respectively, but fancy-regex
  treats them as start- and end-of-word boundary assertions
  respectively. This is not significant for libloot's usage as they are
  not allowed in Windows filenames.
- std::regex allows a literal [ to appear within a character class, but
  fancy-regex requires it to be escaped.

These differences are unlikely to cause any issues.
2025-07-29 17:56:31 +01:00
Oliver Hamlet 03d835f965 Improve readmes 2025-06-15 20:12:24 +01:00
Oliver Hamlet aaacebefa0 Update changelog 2025-06-11 22:01:33 +01:00
Oliver Hamlet e6432db640 Fix changelog entry formatting 2025-06-11 21:43:49 +01:00
Oliver Hamlet 6fd89da516 Keep copyright licenses in their own directory 2025-06-11 21:24:00 +01:00
Oliver Hamlet fa193c1bdd Merge branch 'rust-rewrite' into master 2025-06-11 21:21:55 +01:00
Oliver Hamlet 47e109b5c0 Make building C++ API docs optional
If Doxygen isn't found then the C++ API reference page won't be included in the built docs.
2025-06-11 19:06:09 +01:00
Oliver Hamlet f4511b99bb Move cpp/docs to docs 2025-06-11 19:06:08 +01:00
Oliver Hamlet f3a078b3e5 Remove Miscellaneous Details docs page
- The string encoding and errors sections move to the reference page
- The metadata files section moves to the introduction page
- The language codes section is already detailed in a C++ header doc comment
- The caching section is already detailed in C++ header doc comments
- The performance section is outdated and isn't worth keeping once updated.
2025-06-11 17:43:48 +01:00
Oliver Hamlet d31fce7c96 Exclude .venv directory from sphinx 2025-06-11 17:41:03 +01:00
Oliver Hamlet 5ca56f7a6f Move copyright licenses under API documentation 2025-06-11 17:40:44 +01:00
Oliver Hamlet bee0f36d7b Improve docs for language values 2025-06-11 17:34:56 +01:00
Oliver Hamlet 356749df21 Update changelog and version for 0.27.0 2025-06-08 18:01:43 +01:00
Oliver Hamlet 3744908265 Remove ConditionalMetadata
While it makes sense, it doesn't really add any value and there is value in having all the relevant data and methods in a single class
2025-06-07 17:33:24 +01:00
Oliver Hamlet e90dffd518 Replace how esplugin errors are thrown
Throw std::runtime_error for all esplugin errors except ESP_ERROR_PLUGIN_METADATA_NOT_FOUND, which causes a PluginNotLoadedError to be thrown, since LOOT needs to be able to distinguish that error.
2025-06-07 17:05:48 +01:00
Oliver Hamlet ce729f8d76 Remove libloadorder_category()
Throw errors from libloadorder as std::runtime_error instead of std::system_error.
2025-06-07 17:05:47 +01:00
Oliver Hamlet f6e9954219 Remove ConditionSyntaxError
It's not usefully different from throwing std::runtime_error.
2025-06-07 17:05:47 +01:00
Oliver Hamlet 98234cc9cc Remove FileAccessError
It wasn't usefully different from just throwing std::runtime_error.
2025-06-07 17:05:42 +01:00
Oliver Hamlet 54c3f1a485 Update changelog and version for 0.26.3 2025-05-28 21:22:07 +01:00
Oliver Hamlet 20d583ba43 Update changelog and version for 0.26.2 2025-05-13 20:41:15 +01:00