diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-07-10 02:05:56 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-07-10 02:05:56 +0200 |
| commit | f9c3bb397743e2556b55f8f6433aec8e731a81e8 (patch) | |
| tree | 261ef68758b7c208577fa442df431ca2c9d1e9ba /src | |
| parent | 8115d0f378b4c52a2ffca86ef8cfd949e9272d87 (diff) | |
Use dcp::compose rather than our own.compose
Diffstat (limited to 'src')
| -rw-r--r-- | src/compose.hpp | 392 | ||||
| -rw-r--r-- | src/dcp_reader.cc | 4 | ||||
| -rw-r--r-- | src/exceptions.cc | 4 | ||||
| -rw-r--r-- | src/ssa_reader.cc | 8 | ||||
| -rw-r--r-- | src/stl_binary_reader.cc | 6 | ||||
| -rw-r--r-- | src/stl_binary_tables.cc | 4 | ||||
| -rw-r--r-- | src/stl_binary_writer.cc | 2 | ||||
| -rw-r--r-- | src/stl_text_reader.cc | 10 | ||||
| -rw-r--r-- | src/stl_util.cc | 4 |
9 files changed, 21 insertions, 413 deletions
diff --git a/src/compose.hpp b/src/compose.hpp deleted file mode 100644 index bcddd43..0000000 --- a/src/compose.hpp +++ /dev/null @@ -1,392 +0,0 @@ -/* -*- c-basic-offset: 2 -*- - * Defines String::compose(fmt, arg...) for easy, i18n-friendly - * composition of strings. - * - * Version 1.0. - * - * Copyright (c) 2002 Ole Laursen <olau@hardworking.dk>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - */ - -// -// Basic usage is like -// -// std::cout << String::compose("This is a %1x%2 matrix.", rows, cols); -// -// See http://www.cs.aau.dk/~olau/compose/ or the included README.compose for -// more details. -// - -#ifndef STRING_COMPOSE_H -#define STRING_COMPOSE_H - -#include "locale_convert.h" -#include <boost/filesystem.hpp> -#include <string> -#include <list> -#include <map> -#include <inttypes.h> -#include <cstdio> - -namespace StringPrivate -{ - // the actual composition class - using string::compose is cleaner, so we - // hide it here - class Composition - { - public: - // initialize and prepare format string on the form "text %1 text %2 etc." - explicit Composition(std::string fmt); - - // supply an replacement argument starting from %1 - template <typename T> - Composition &arg(const T &obj); - - // compose and return string - std::string str() const; - - private: - std::string os; - int arg_no; - - // we store the output as a list - when the output string is requested, the - // list is concatenated to a string; this way we can keep iterators into - // the list instead of into a string where they're possibly invalidated on - // inserting a specification string - typedef std::list<std::string> output_list; - output_list output; - - // the initial parse of the format string fills in the specification map - // with positions for each of the various %?s - typedef std::multimap<int, output_list::iterator> specification_map; - specification_map specs; - }; - - // helper for converting spec string numbers - inline int char_to_int(char c) - { - switch (c) { - case '0': return 0; - case '1': return 1; - case '2': return 2; - case '3': return 3; - case '4': return 4; - case '5': return 5; - case '6': return 6; - case '7': return 7; - case '8': return 8; - case '9': return 9; - default: return -1000; - } - } - - inline bool is_number(int n) - { - switch (n) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - return true; - - default: - return false; - } - } - - // implementation of class Composition - template <typename T> - inline Composition &Composition::arg(const T &obj) - { - os += sub::locale_convert<std::string>(obj); - - if (!os.empty()) { // manipulators don't produce output - for (specification_map::const_iterator i = specs.lower_bound(arg_no), end = specs.upper_bound(arg_no); i != end; ++i) { - output_list::iterator pos = i->second; - ++pos; - - output.insert(pos, os); - } - - os = ""; - ++arg_no; - } - - return *this; - } - - inline Composition::Composition(std::string fmt) - : arg_no(1) - { - std::string::size_type b = 0, i = 0; - - // fill in output with the strings between the %1 %2 %3 etc. and - // fill in specs with the positions - while (i < fmt.length()) { - if (fmt[i] == '%' && i + 1 < fmt.length()) { - if (fmt[i + 1] == '%') { // catch %% - fmt.replace(i, 2, "%"); - ++i; - } - else if (is_number(fmt[i + 1])) { // aha! a spec! - // save string - output.push_back(fmt.substr(b, i - b)); - - int n = 1; // number of digits - int spec_no = 0; - - do { - spec_no += char_to_int(fmt[i + n]); - spec_no *= 10; - ++n; - } while (i + n < fmt.length() && is_number(fmt[i + n])); - - spec_no /= 10; - output_list::iterator pos = output.end(); - --pos; // safe since we have just inserted a string> - - specs.insert(specification_map::value_type(spec_no, pos)); - - // jump over spec string - i += n; - b = i; - } - else - ++i; - } - else - ++i; - } - - if (i - b > 0) // add the rest of the string - output.push_back(fmt.substr(b, i - b)); - } - - inline std::string Composition::str() const - { - // assemble string - std::string str; - - for (output_list::const_iterator i = output.begin(), end = output.end(); - i != end; ++i) - str += *i; - - return str; - } -} - -// now for the real thing(s) -namespace String -{ - // a series of functions which accept a format string on the form "text %1 - // more %2 less %3" and a number of templated parameters and spits out the - // composited string - template <typename T1> - inline std::string compose(const std::string &fmt, const T1 &o1) - { - StringPrivate::Composition c(fmt); - c.arg(o1); - return c.str(); - } - - template <typename T1, typename T2> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2); - return c.str(); - } - - template <typename T1, typename T2, typename T3> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10, const T11 &o11) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10).arg(o11); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10, const T11 &o11, const T12 &o12) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10).arg(o11).arg(o12); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10, const T11 &o11, const T12 &o12, - const T13 &o13) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10).arg(o11).arg(o12).arg(o13); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10, const T11 &o11, const T12 &o12, - const T13 &o13, const T14 &o14) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10).arg(o11).arg(o12).arg(o13).arg(o14); - return c.str(); - } - - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, - typename T15> - inline std::string compose(const std::string &fmt, - const T1 &o1, const T2 &o2, const T3 &o3, - const T4 &o4, const T5 &o5, const T6 &o6, - const T7 &o7, const T8 &o8, const T9 &o9, - const T10 &o10, const T11 &o11, const T12 &o12, - const T13 &o13, const T14 &o14, const T15 &o15) - { - StringPrivate::Composition c(fmt); - c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9) - .arg(o10).arg(o11).arg(o12).arg(o13).arg(o14).arg(o15); - return c.str(); - } -} - - -#endif // STRING_COMPOSE_H diff --git a/src/dcp_reader.cc b/src/dcp_reader.cc index 0c7a29a..673771e 100644 --- a/src/dcp_reader.cc +++ b/src/dcp_reader.cc @@ -18,8 +18,8 @@ */ #include "dcp_reader.h" -#include "compose.hpp" #include "exceptions.h" +#include <dcp/compose.h> #include <dcp/subtitle_string.h> #include <dcp/interop_subtitle_asset.h> #include <dcp/smpte_subtitle_asset.h> @@ -66,7 +66,7 @@ DCPReader::DCPReader (boost::filesystem::path file) } if (!sc) { - throw DCPError(String::compose("Could not read subtitles (%1 / %2)", interop_error, smpte_error)); + throw DCPError(dcp::compose("Could not read subtitles (%1 / %2)", interop_error, smpte_error)); } diff --git a/src/exceptions.cc b/src/exceptions.cc index 72198fc..e6559db 100644 --- a/src/exceptions.cc +++ b/src/exceptions.cc @@ -17,15 +17,15 @@ */ -#include "compose.hpp" #include "exceptions.h" +#include <dcp/compose.h> using std::list; using std::string; using namespace sub; ProgrammingError::ProgrammingError (string file, int line) - : runtime_error (String::compose ("Programming error at %1:%2", file, line)) + : runtime_error (dcp::compose ("Programming error at %1:%2", file, line)) { } diff --git a/src/ssa_reader.cc b/src/ssa_reader.cc index 4a9be0e..b6839fe 100644 --- a/src/ssa_reader.cc +++ b/src/ssa_reader.cc @@ -22,7 +22,7 @@ #include "sub_assert.h" #include "raw_convert.h" #include "subtitle.h" -#include "compose.hpp" +#include <dcp/compose.h> #include <boost/algorithm/string.hpp> #include <boost/bind.hpp> #include <iostream> @@ -54,13 +54,13 @@ h_colour (string s) { /* There are both BGR and ABGR versions of these colours */ if ((s.length() != 8 && s.length() != 10) || s[0] != '&' || s[1] != 'H') { - throw SSAError(String::compose("Badly formatted colour tag %1", s)); + throw SSAError(dcp::compose("Badly formatted colour tag %1", s)); } int ir, ig, ib; /* XXX: ignoring alpha channel here; note that 00 is opaque and FF is transparent */ int const off = s.length() == 10 ? 4 : 2; if (sscanf(s.c_str() + off, "%2x%2x%2x", &ib, &ig, &ir) < 3) { - throw SSAError(String::compose("Badly formatted colour tag %1", s)); + throw SSAError(dcp::compose("Badly formatted colour tag %1", s)); } return sub::Colour(ir / 255.0, ig / 255.0, ib / 255.0); } @@ -253,7 +253,7 @@ SSAReader::parse_style (RawSubtitle& sub, string style, int play_res_x, int play } else if (boost::starts_with(style, "\\c")) { /* \c&Hbbggrr& */ if (style.length() <= 2) { - throw SSAError(String::compose("Badly formatted colour tag %1", style)); + throw SSAError(dcp::compose("Badly formatted colour tag %1", style)); } sub.colour = h_colour (style.substr(2, style.length() - 3)); } diff --git a/src/stl_binary_reader.cc b/src/stl_binary_reader.cc index f441aec..43f51b8 100644 --- a/src/stl_binary_reader.cc +++ b/src/stl_binary_reader.cc @@ -21,7 +21,7 @@ #include "exceptions.h" #include "iso6937.h" #include "stl_util.h" -#include "compose.hpp" +#include <dcp/compose.h> #include <boost/lexical_cast.hpp> #include <boost/algorithm/string.hpp> #include <boost/locale.hpp> @@ -100,7 +100,7 @@ public: { _in.read (reinterpret_cast<char *>(_buffer), size); if (_in.gcount() != size) { - throw STLError (String::compose("Could not read %1 block from binary STL file", what)); + throw STLError (dcp::compose("Could not read %1 block from binary STL file", what)); } } @@ -121,7 +121,7 @@ public: { size_t const N = fread (_buffer, 1, size, _in); if (static_cast<int>(N) != size) { - throw STLError (String::compose("Could not read %1 block from binary STL file", what)); + throw STLError (dcp::compose("Could not read %1 block from binary STL file", what)); } } diff --git a/src/stl_binary_tables.cc b/src/stl_binary_tables.cc index db623bf..ae333e6 100644 --- a/src/stl_binary_tables.cc +++ b/src/stl_binary_tables.cc @@ -20,7 +20,7 @@ #include "stl_binary_tables.h" #include "exceptions.h" #include "sub_assert.h" -#include "compose.hpp" +#include <dcp/compose.h> using std::map; using std::string; @@ -39,7 +39,7 @@ file_to_enum (F k, map<F, STLBinaryCode<E> > m, string name) { typename map<F, STLBinaryCode<E> >::const_iterator i = m.find (k); if (i == m.end ()) { - throw STLError (String::compose ("Unknown %1 %2 in binary STL file", name, k)); + throw STLError (dcp::compose ("Unknown %1 %2 in binary STL file", name, k)); } return i->second.value; diff --git a/src/stl_binary_writer.cc b/src/stl_binary_writer.cc index 1b1d52f..8cc59d1 100644 --- a/src/stl_binary_writer.cc +++ b/src/stl_binary_writer.cc @@ -25,8 +25,8 @@ #include "subtitle.h" #include "iso6937.h" #include "stl_util.h" -#include "compose.hpp" #include "sub_assert.h" +#include <dcp/compose.h> #include <boost/locale.hpp> #include <boost/algorithm/string.hpp> #include <cmath> diff --git a/src/stl_text_reader.cc b/src/stl_text_reader.cc index f08a438..4859823 100644 --- a/src/stl_text_reader.cc +++ b/src/stl_text_reader.cc @@ -18,7 +18,7 @@ */ #include "stl_text_reader.h" -#include "compose.hpp" +#include <dcp/compose.h> #include <boost/algorithm/string.hpp> #include <boost/lexical_cast.hpp> #include <vector> @@ -69,7 +69,7 @@ STLTextReader::STLTextReader (istream& in) set (name, value); } else { - warn (String::compose ("Unrecognised line %1", line)); + warn (dcp::compose ("Unrecognised line %1", line)); } } else { /* "Normal" lines */ @@ -80,7 +80,7 @@ STLTextReader::STLTextReader (istream& in) } if (divider[0] == string::npos || divider[1] == string::npos || divider[0] <= 1 || divider[1] >= line.length() - 1) { - warn (String::compose ("Unrecognised line %1", line)); + warn (dcp::compose ("Unrecognised line %1", line)); continue; } @@ -93,7 +93,7 @@ STLTextReader::STLTextReader (istream& in) optional<Time> to = time (to_string); if (!from || !to) { - warn (String::compose ("Unrecognised line %1", line)); + warn (dcp::compose ("Unrecognised line %1", line)); continue; } @@ -138,7 +138,7 @@ STLTextReader::time (string t) const vector<string> b; split (b, t, is_any_of (":")); if (b.size() != 4) { - warn (String::compose ("Unrecognised time %1", t)); + warn (dcp::compose ("Unrecognised time %1", t)); return optional<Time> (); } diff --git a/src/stl_util.cc b/src/stl_util.cc index 16d8a63..f681b19 100644 --- a/src/stl_util.cc +++ b/src/stl_util.cc @@ -19,7 +19,7 @@ #include "stl_util.h" #include "exceptions.h" -#include "compose.hpp" +#include <dcp/compose.h> #include <string> #include <cmath> @@ -62,5 +62,5 @@ sub::stl_dfc_to_frame_rate (string s) return 30; } - throw STLError (String::compose ("Unknown disk format code %1 in binary STL file", s)); + throw STLError (dcp::compose ("Unknown disk format code %1 in binary STL file", s)); } |
