diff options
author | Fredrik Noring <noring@nocrew.org> | 2019-08-05 10:50:47 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2019-08-10 10:50:51 +0200 |
commit | 2d61e526deaa13a835a1307dc6fc701162495932 (patch) | |
tree | 68d1aa1053ec36667a5cc471d77e8561a37559eb | |
parent | 7723c481db66f089f5ccde941a0a952cb1b16e2e (diff) |
decoder/sidplay: Fix date field to have year but not company or author
Field 2 is called <released>, formerly used as <copyright>[1][2]. It is
formatted <year><space><company or author or group>, where <year> may be
<YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for example "1987", "199?", "19??"
or "1985-87". The <company or author or group> may be for example Rob
Hubbard. A full field may be for example "1987 Rob Hubbard".
This change splits the <released> field at the first <space>, to retain
the <year> part.
The 51823 SID files in High Voltage SID Collection (HVSC) version 71
have the following distribution of dates:
333 19?? 11 1990-92 6 1995-99 2 2006-08
827 198? 88 1990-93 2140 1996 530 2007
32 1982 69 1990-94 9 1996-97 15 2007-08
1 1982-83 49 1990-95 2 1996-98 2 2007-09
255 1983 3467 1991 5 1996-99 1 2007-10
677 1984 75 1991-92 1840 1997 430 2008
775 1985 65 1991-93 4 1997-98 23 2008-09
3 1985-86 10 1991-94 1276 1998 1 2008-12
10 1985-87 35 1991-97 4 1998-99 631 2009
943 1986 3320 1992 865 1999 1 2009-10
12 1986-87 26 1992-93 24 200? 645 2010
5 1986-89 59 1992-94 590 2000 1 2010-12
2083 1987 1 1992-96 4 2000-01 538 2011
31 1987-88 2996 1993 727 2001 1 2011-12
44 1987-89 42 1993-94 875 2002 651 2012
2510 1988 12 1993-95 2 2002-04 811 2013
129 1988-89 2 1993-97 844 2003 790 2014
91 1988-90 2737 1994 3 2003-05 740 2015
58 1988-91 16 1994-95 842 2004 792 2016
3466 1989 20 1994-96 2 2004-05 775 2017
95 1989-90 17 1994-97 707 2005 638 2018
150 1989-91 2271 1995 1 2005-06 284 2019
1077 199? 2 1995-96 2 2005-07
2834 1990 4 1995-97 785 2006
119 1990-91 2 1995-98 6 2006-07
References:
[1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt
[2] https://hvsc.c64.org/info
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/decoder/plugins/SidplayDecoderPlugin.cxx | 26 |
2 files changed, 26 insertions, 1 deletions
@@ -2,6 +2,7 @@ ver 0.21.14 (not yet released) * decoder - sidplay: show track durations in database - sidplay: convert tag values from Windows-1252 charset + - sidplay: strip text from "Date" tag ver 0.21.13 (2019/08/06) * input diff --git a/src/decoder/plugins/SidplayDecoderPlugin.cxx b/src/decoder/plugins/SidplayDecoderPlugin.cxx index 619ef38f6..8a22e0817 100644 --- a/src/decoder/plugins/SidplayDecoderPlugin.cxx +++ b/src/decoder/plugins/SidplayDecoderPlugin.cxx @@ -477,6 +477,30 @@ GetInfoString(const SidTuneInfo &info, unsigned i) noexcept return Windows1252ToUTF8(s); } +gcc_pure +static AllocatedString<char> +GetDateString(const SidTuneInfo &info) noexcept +{ + /* + * Field 2 is called <released>, previously used as <copyright>. + * It is formatted <year><space><company or author or group>, + * where <year> may be <YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for + * example "1987", "199?", "19??" or "1985-87". The <company or + * author or group> may be for example Rob Hubbard. A full field + * may be for example "1987 Rob Hubbard". + */ + AllocatedString<char> release = GetInfoString(info, 2); + + /* Keep the <year> part only for the date. */ + for (size_t i = 0; release[i] != AllocatedString<char>::SENTINEL; i++) + if (std::isspace(release[i])) { + release[i] = AllocatedString<char>::SENTINEL; + break; + } + + return release; +} + static void ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks, TagHandler &handler) noexcept @@ -498,7 +522,7 @@ ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks, handler.OnTag(TAG_ARTIST, artist.c_str()); /* date */ - const auto date = GetInfoString(info, 2); + const auto date = GetDateString(info); if (!date.empty()) handler.OnTag(TAG_DATE, date.c_str()); |