diff --git a/CHANGELOG.md b/CHANGELOG.md index 89ad90b..ff0ecd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ opustags changelog ================== +1.8.0 - 2023-03-07 +------------------ + +- Introduce --set-cover and --output-cover. + +opustags is now able to extract and edit the cover art of Opus files. The underlying +METADATA_BLOCK_PICTURE tag will still appear as a regular tag, but you won’t have to handle it +manually anymore. + 1.7.0 - 2023-02-13 ------------------ diff --git a/CMakeLists.txt b/CMakeLists.txt index 40e8b3c..c4eb367 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.11) project( opustags - VERSION 1.7.0 + VERSION 1.8.0 LANGUAGES CXX ) diff --git a/README.md b/README.md index ee8e6f4..9a098ce 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,12 @@ opustags View and edit Ogg Opus comments. +opustags supports the following features: + +- interactive editing using your preferred text editor, +- batch editing with command-line flags, +- tags exporting and importing through text files. + opustags is designed to be fast and as conservative as possible, to the point that if you edit tags then edit them again to their previous values, you should get a bit-perfect copy of the original file. No under-the-cover operation like writing "edited with opustags" or timestamp tagging will @@ -11,15 +17,6 @@ ever be performed. opustags is tag-agnostic: you can write arbitrary key-value tags, and none of them will be treated specially. After all, common tags like TITLE or ARTIST are nothing more than conventions. -It currently has the following limitations: - -- The total size of all tags cannot exceed 64 kB, the maximum size of one Ogg page. -- Multiplexed streams are not supported. -- Newlines inside tags are not supported by `--set-all`. - -If you'd like one of these limitations lifted, please do open an issue explaining your use case. -Feel free to ask for new features too. - Requirements ------------ diff --git a/opustags.1 b/opustags.1 index fd8425e..624aca6 100644 --- a/opustags.1 +++ b/opustags.1 @@ -1,4 +1,4 @@ -.TH opustags 1 "February 2023" "@PROJECT_NAME@ @PROJECT_VERSION@" +.TH opustags 1 "March 2023" "@PROJECT_NAME@ @PROJECT_VERSION@" .SH NAME opustags \- Ogg Opus tag editor .SH SYNOPSIS @@ -20,7 +20,7 @@ opustags \- Ogg Opus tag editor .SH DESCRIPTION .PP \fBopustags\fP can read and edit the comment header of an Ogg Opus file. -It basically has two modes: read-only, and read-write for tag editing. +It has two modes: read-only, and read-write for tag editing. .PP In read-only mode, only the beginning of \fIINPUT\fP is read, and the tags are printed on standard output. Lines prefixed by tabs are continuation of the previous tag. @@ -47,10 +47,9 @@ All the previously existing tags as deleted. .PP The Opus format specifications requires that tags are encoded in UTF-8, so that's the only encoding opustags supports. If your system encoding is different, the tags are automatically converted to and -from your system locale. When the conversion is lossy, the incompatible characters are -transliterated and a warning is displayed. Even if you edit an Opus file whose tags contains -characters unsupported by your system encoding, the original UTF-8 values will be preserved for the -tags you don't explictly modify. +from your system locale. When you edit an Opus file whose tags contains characters unsupported by +your system encoding, the original UTF-8 values will be preserved for the tags you don't explictly +modify. .SH OPTIONS .TP .B \-h, \-\-help diff --git a/src/base64.cc b/src/base64.cc index 9118f41..5102f62 100644 --- a/src/base64.cc +++ b/src/base64.cc @@ -11,7 +11,7 @@ #include -#include +#include static const char8_t base64_table[65] = u8"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; diff --git a/t/system.cc b/t/system.cc index c5fb89b..5106c24 100644 --- a/t/system.cc +++ b/t/system.cc @@ -48,6 +48,7 @@ void check_slurp() void check_converter() { + setlocale(LC_ALL, ""); is(ot::decode_utf8(ot::encode_utf8("Éphémère")), "Éphémère", "decode_utf8 reverts encode_utf8"); opaque_is(ot::encode_utf8(ot::decode_utf8(u8"Éphémère")), u8"Éphémère", "encode_utf8 reverts decode_utf8");