From d49758edbfaf2f3fe82ea4753acee89fa2bd8610 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sat, 29 Dec 2012 15:53:56 -0800 Subject: [PATCH] De-wxify AssOverride --- aegisub/src/ass_dialogue.cpp | 94 +++++++------- aegisub/src/ass_dialogue.h | 18 +-- aegisub/src/ass_karaoke.cpp | 41 ++++--- aegisub/src/ass_karaoke.h | 13 +- aegisub/src/ass_override.cpp | 157 +++++++++++------------- aegisub/src/ass_override.h | 11 +- aegisub/src/audio_karaoke.cpp | 30 ++--- aegisub/src/audio_karaoke.h | 4 +- aegisub/src/audio_timing_karaoke.cpp | 1 + aegisub/src/command/edit.cpp | 30 ++--- aegisub/src/dialog_kara_timing_copy.cpp | 11 +- aegisub/src/dialog_resample.cpp | 4 +- aegisub/src/dialog_style_editor.cpp | 6 +- aegisub/src/dialog_translation.cpp | 17 +-- aegisub/src/export_framerate.cpp | 2 +- aegisub/src/export_framerate.h | 2 +- aegisub/src/font_file_lister.cpp | 5 +- aegisub/src/subtitle_format_ebu3264.cpp | 2 +- aegisub/src/subtitle_format_srt.cpp | 4 +- aegisub/src/visual_tool.cpp | 19 ++- aegisub/src/visual_tool.h | 4 +- 21 files changed, 233 insertions(+), 242 deletions(-) diff --git a/aegisub/src/ass_dialogue.cpp b/aegisub/src/ass_dialogue.cpp index b8ee3dd79..0152aa822 100644 --- a/aegisub/src/ass_dialogue.cpp +++ b/aegisub/src/ass_dialogue.cpp @@ -33,13 +33,6 @@ #include "config.h" -#include -#include -#include - -#include -#include - #include "ass_dialogue.h" #include "compat.h" #include "subtitle_format.h" @@ -47,6 +40,13 @@ #include +#include +#include +#include + +#include +#include + using namespace boost::adaptors; std::size_t hash_value(wxString const& s) { @@ -196,23 +196,24 @@ std::auto_ptr> AssDialogue::ParseTags() cons } int drawingLevel = 0; + std::string text(from_wx(Text.get())); - for (size_t len = Text.get().size(), cur = 0; cur < len; ) { + for (size_t len = text.size(), cur = 0; cur < len; ) { // Overrides block - if (Text.get()[cur] == '{') { - size_t end = Text.get().find('}', cur); + if (text[cur] == '{') { + size_t end = text.find('}', cur); // VSFilter requires that override blocks be closed, while libass // does not. We match VSFilter here. - if (end == wxString::npos) + if (end == std::string::npos) goto plain; ++cur; // Get contents of block - wxString work = Text.get().substr(cur, end - cur); + std::string work = text.substr(cur, end - cur); cur = end + 1; - if (work.size() && work.find('\\') == wxString::npos) { + if (work.size() && work.find('\\') == std::string::npos) { //We've found an override block with no backslashes //We're going to assume it's a comment and not consider it an override block //Currently we'll treat this as a plain text block, but feel free to create a new class @@ -236,14 +237,14 @@ std::auto_ptr> AssDialogue::ParseTags() cons // Plain-text/drawing block plain: - wxString work; - size_t end = Text.get().find('{', cur + 1); - if (end == wxString::npos) { - work = Text.get().substr(cur); + std::string work; + size_t end = text.find('{', cur + 1); + if (end == std::string::npos) { + work = text.substr(cur); cur = len; } else { - work = Text.get().substr(cur, end - cur); + work = text.substr(cur, end - cur); cur = end; } @@ -260,10 +261,10 @@ void AssDialogue::StripTags() { Text = GetStrippedText(); } -static wxString get_text(AssDialogueBlock &d) { return d.GetText(); } +static std::string get_text(AssDialogueBlock &d) { return d.GetText(); } void AssDialogue::UpdateText(boost::ptr_vector& blocks) { if (blocks.empty()) return; - Text = join(blocks | transformed(get_text), wxS("")); + Text = to_wx(join(blocks | transformed(get_text), "")); } void AssDialogue::SetMarginString(wxString const& origvalue, int which) { @@ -296,52 +297,45 @@ bool AssDialogue::CollidesWith(const AssDialogue *target) const { return ((Start < target->Start) ? (target->Start < End) : (Start < target->End)); } -static wxString get_text_p(AssDialogueBlock *d) { return d->GetText(); } +static std::string get_text_p(AssDialogueBlock *d) { return d->GetText(); } wxString AssDialogue::GetStrippedText() const { wxString ret; boost::ptr_vector blocks(ParseTags()); - return join(blocks | agi::of_type() | transformed(get_text_p), wxS("")); + return to_wx(join(blocks | agi::of_type() | transformed(get_text_p), "")); } AssEntry *AssDialogue::Clone() const { return new AssDialogue(*this); } -void AssDialogueBlockDrawing::TransformCoords(int mx,int my,double x,double y) { +void AssDialogueBlockDrawing::TransformCoords(int mx, int my, double x, double y) { // HACK: Implement a proper parser ffs!! // Could use Spline but it'd be slower and this seems to work fine - wxStringTokenizer tkn(GetText()," ",wxTOKEN_DEFAULT); - wxString cur; - wxString final; - bool isX = true; - long temp; + bool is_x = true; + std::string final; - // Process tokens - while (tkn.HasMoreTokens()) { - cur = tkn.GetNextToken().Lower(); - - // Number, process it - if (cur.IsNumber()) { - // Transform it - cur.ToLong(&temp); - if (isX) temp = (long int)((temp+mx)*x + 0.5); - else temp = (long int)((temp+my)*y + 0.5); - - // Write back to list - final += wxString::Format("%i ",temp); - - // Toggle X/Y - isX = !isX; + boost::char_separator sep(" "); + for (auto const& cur : boost::tokenizer>(text, sep)) { + if (std::all_of(begin(cur), end(cur), isdigit)) { + int val = boost::lexical_cast(cur); + if (is_x) + val = (int)((val + mx) * x + .5); + else + val = (int)((val + my) * y + .5); + final += std::to_string(val); + final += ' '; } - - // Text - else { - if (cur == "m" || cur == "n" || cur == "l" || cur == "b" || cur == "s" || cur == "p" || cur == "c") isX = true; - final += cur + " "; + else if (cur.size() == 1) { + char c = tolower(cur[0]); + if (c == 'm' || c == 'n' || c == 'l' || c == 'b' || c == 's' || c == 'p' || c == 'c') { + is_x = true; + final += c; + final += ' '; + } } } // Write back final - final = final.Left(final.Length()-1); + final.pop_back(); text = final; } diff --git a/aegisub/src/ass_dialogue.h b/aegisub/src/ass_dialogue.h index a89e30e4a..d147d1bd3 100644 --- a/aegisub/src/ass_dialogue.h +++ b/aegisub/src/ass_dialogue.h @@ -74,19 +74,19 @@ std::size_t hash_value(wxString const& s); class AssDialogueBlock { protected: /// Text of this block - wxString text; + std::string text; public: - AssDialogueBlock(wxString const& text) : text(text) { } + AssDialogueBlock(std::string const& text) : text(text) { } virtual ~AssDialogueBlock() { } virtual AssBlockType GetType() const = 0; - virtual wxString GetText() { return text; } + virtual std::string GetText() { return text; } }; class AssDialogueBlockPlain : public AssDialogueBlock { public: AssBlockType GetType() const override { return BLOCK_PLAIN; } - AssDialogueBlockPlain(wxString const& text = wxString()) : AssDialogueBlock(text) { } + AssDialogueBlockPlain(std::string const& text = std::string()) : AssDialogueBlock(text) { } }; class AssDialogueBlockDrawing : public AssDialogueBlock { @@ -94,23 +94,23 @@ public: int Scale; AssBlockType GetType() const override { return BLOCK_DRAWING; } - AssDialogueBlockDrawing(wxString const& text, int scale) : AssDialogueBlock(text), Scale(scale) { } + AssDialogueBlockDrawing(std::string const& text, int scale) : AssDialogueBlock(text), Scale(scale) { } void TransformCoords(int trans_x,int trans_y,double mult_x,double mult_y); }; class AssDialogueBlockOverride : public AssDialogueBlock { public: - AssDialogueBlockOverride(wxString const& text = wxString()) : AssDialogueBlock(text) { } + AssDialogueBlockOverride(std::string const& text = std::string()) : AssDialogueBlock(text) { } std::vector Tags; AssBlockType GetType() const override { return BLOCK_OVERRIDE; } - wxString GetText() override; + std::string GetText() override; void ParseTags(); - void AddTag(wxString const& tag); + void AddTag(std::string const& tag); /// Type of callback function passed to ProcessParameters - typedef void (*ProcessParametersCallback)(wxString const&, AssOverrideParameter *, void *); + typedef void (*ProcessParametersCallback)(std::string const&, AssOverrideParameter *, void *); /// @brief Process parameters via callback /// @param callback The callback function to call per tag parameter /// @param userData User data to pass to callback function diff --git a/aegisub/src/ass_karaoke.cpp b/aegisub/src/ass_karaoke.cpp index f20032332..7a22d7102 100644 --- a/aegisub/src/ass_karaoke.cpp +++ b/aegisub/src/ass_karaoke.cpp @@ -25,24 +25,28 @@ #include "ass_dialogue.h" #include "ass_file.h" +#include "compat.h" #include "include/aegisub/context.h" #include "selection_controller.h" +#include +#include +#include #include -wxString AssKaraoke::Syllable::GetText(bool k_tag) const { - wxString ret; +std::string AssKaraoke::Syllable::GetText(bool k_tag) const { + std::string ret; if (k_tag) - ret = wxString::Format("{%s%d}", tag_type, (duration + 5) / 10); + ret = str(boost::format("{%s%d}") % tag_type % ((duration + 5) / 10)); size_t idx = 0; for (auto const& ovr : ovr_tags) { - ret += text.Mid(idx, ovr.first - idx); + ret += text.substr(idx, ovr.first - idx); ret += ovr.second; idx = ovr.first; } - ret += text.Mid(idx); + ret += text.substr(idx); return ret; } @@ -91,7 +95,7 @@ void AssKaraoke::SetLine(AssDialogue *line, bool auto_split, bool normalize) { if (auto_split && syls.size() == 1) { size_t pos; no_announce = true; - while ((pos = syls.back().text.find(' ')) != wxString::npos) + while ((pos = syls.back().text.find(' ')) != std::string::npos) AddSplit(syls.size() - 1, pos + 1); no_announce = false; } @@ -103,11 +107,11 @@ void AssKaraoke::ParseSyllables(AssDialogue *line, Syllable &syl) { boost::ptr_vector blocks(line->ParseTags()); for (auto& block : blocks) { - wxString text = block.GetText(); + std::string text = block.GetText(); if (dynamic_cast(&block)) { // treat comments as overrides rather than dialogue - if (text.size() && text[0] == '{') + if (boost::starts_with(text, "{")) syl.ovr_tags[syl.text.size()] += text; else syl.text += text; @@ -120,7 +124,7 @@ void AssKaraoke::ParseSyllables(AssDialogue *line, Syllable &syl) { else if (AssDialogueBlockOverride *ovr = dynamic_cast(&block)) { bool in_tag = false; for (auto& tag : ovr->Tags) { - if (tag.IsValid() && tag.Name.Left(2).Lower() == "\\k") { + if (tag.IsValid() && boost::istarts_with(tag.Name, "\\k")) { if (in_tag) { syl.ovr_tags[syl.text.size()] += "}"; in_tag = false; @@ -142,11 +146,10 @@ void AssKaraoke::ParseSyllables(AssDialogue *line, Syllable &syl) { syl.duration = tag.Params[0].Get(0) * 10; } else { - wxString& otext = syl.ovr_tags[syl.text.size()]; + std::string& otext = syl.ovr_tags[syl.text.size()]; // Merge adjacent override tags - if (otext.size() && otext.Last() == '}') - otext.RemoveLast(); - else if (!in_tag) + boost::trim_right_if(text, boost::is_any_of("}")); + if (!in_tag) otext += "{"; in_tag = true; @@ -167,16 +170,16 @@ wxString AssKaraoke::GetText() const { text.reserve(size() * 10); for (auto const& syl : syls) - text += syl.GetText(true); + text += to_wx(syl.GetText(true)); return text; } -wxString AssKaraoke::GetTagType() const { +std::string AssKaraoke::GetTagType() const { return begin()->tag_type; } -void AssKaraoke::SetTagType(wxString const& new_type) { +void AssKaraoke::SetTagType(std::string const& new_type) { for (auto& syl : syls) syl.tag_type = new_type; } @@ -190,8 +193,8 @@ void AssKaraoke::AddSplit(size_t syl_idx, size_t pos) { // character then pos will be out of bounds. Doing this is a bit goofy, // but it's sometimes required for complex karaoke scripts if (pos < syl.text.size()) { - new_syl.text = syl.text.Mid(pos); - syl.text = syl.text.Left(pos); + new_syl.text = syl.text.substr(pos); + syl.text = syl.text.substr(0, pos); } if (new_syl.text.empty()) @@ -302,7 +305,7 @@ void AssKaraoke::SplitLines(std::set const& lines, agi::Context *c new_line->Start = syl.start_time; new_line->End = syl.start_time + syl.duration; - new_line->Text = syl.GetText(false); + new_line->Text = to_wx(syl.GetText(false)); c->ass->Line.insert(it, *new_line); diff --git a/aegisub/src/ass_karaoke.h b/aegisub/src/ass_karaoke.h index ffbd9e9bc..2c200327f 100644 --- a/aegisub/src/ass_karaoke.h +++ b/aegisub/src/ass_karaoke.h @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -39,14 +40,14 @@ public: struct Syllable { int start_time; ///< Start time relative to time zero (not line start) in milliseconds int duration; ///< Duration in milliseconds - wxString text; ///< Stripped syllable text - wxString tag_type; ///< \k, \kf or \ko + std::string text; ///< Stripped syllable text + std::string tag_type; ///< \k, \kf or \ko /// Non-karaoke override tags in this syllable. Key is an index in text /// before which the value should be inserted - std::map ovr_tags; + std::map ovr_tags; /// Get the text of this line with override tags and optionally the karaoke tag - wxString GetText(bool k_tag) const; + std::string GetText(bool k_tag) const; }; private: std::vector syls; @@ -87,9 +88,9 @@ public: /// Get the karaoke tag type used, with leading slash /// @returns "\k", "\kf", or "\ko" - wxString GetTagType() const; + std::string GetTagType() const; /// Set the tag type for all karaoke tags in this line - void SetTagType(wxString const& new_type); + void SetTagType(std::string const& new_type); /// Split lines so that each syllable is its own line /// @param lines Lines to split diff --git a/aegisub/src/ass_override.cpp b/aegisub/src/ass_override.cpp index dfaef209f..6d8638086 100644 --- a/aegisub/src/ass_override.cpp +++ b/aegisub/src/ass_override.cpp @@ -37,17 +37,15 @@ #include "ass_dialogue.h" -#include - -#include "compat.h" -#include "utils.h" +#include #include +#include +#include +#include #include #include #include -#include -#include using namespace boost::adaptors; @@ -78,31 +76,27 @@ AssOverrideParameter& AssOverrideParameter::operator=(AssOverrideParameter&& rhs AssOverrideParameter::~AssOverrideParameter() { } -template<> wxString AssOverrideParameter::Get() const { +template<> std::string AssOverrideParameter::Get() const { if (omitted) throw agi::InternalError("AssOverrideParameter::Get() called on omitted parameter", 0); if (block.get()) { - wxString str(block->GetText()); - str.Replace("{", ""); - str.Replace("}", ""); + std::string str(block->GetText()); + if (boost::starts_with(str, "{")) str.erase(0); + if (boost::ends_with(str, "}")) str.erase(str.size() - 1); return str; } return value; } template<> int AssOverrideParameter::Get() const { - long v = 0; - Get().ToLong(&v); - return v; + return boost::lexical_cast(Get()); } template<> double AssOverrideParameter::Get() const { - double v = 0; - Get().ToDouble(&v); - return v; + return boost::lexical_cast(Get()); } template<> float AssOverrideParameter::Get() const { - return Get(); + return boost::lexical_cast(Get()); } template<> bool AssOverrideParameter::Get() const { @@ -110,29 +104,29 @@ template<> bool AssOverrideParameter::Get() const { } template<> agi::Color AssOverrideParameter::Get() const { - return from_wx(Get()); + return Get(); } template<> AssDialogueBlockOverride *AssOverrideParameter::Get() const { if (!block.get()) { - block.reset(new AssDialogueBlockOverride(Get())); + block.reset(new AssDialogueBlockOverride(Get())); block->ParseTags(); } return block.get(); } -template<> void AssOverrideParameter::Set(wxString new_value) { +template<> void AssOverrideParameter::Set(std::string new_value) { omitted = false; value = new_value; block.reset(); } template<> void AssOverrideParameter::Set(int new_value) { - Set(wxString::Format("%d", new_value)); + Set(std::to_string(new_value)); } template<> void AssOverrideParameter::Set(double new_value) { - Set(wxString::Format("%g", new_value)); + Set(std::to_string(new_value)); } template<> void AssOverrideParameter::Set(bool new_value) { @@ -166,45 +160,42 @@ struct AssOverrideParamProto { /// Semantic type of this parameter AssParameterClass classification; - AssOverrideParamProto (VariableDataType type, int opt=NOT_OPTIONAL, AssParameterClass classi=PARCLASS_NORMAL); + AssOverrideParamProto(VariableDataType type, int opt, AssParameterClass classi) + : optional(opt) + , type(type) + , classification(classi) + { + } }; struct AssOverrideTagProto { /// Name of the tag, with slash - wxString name; + std::string name; + /// Parameters to this tag std::vector params; + typedef std::vector::iterator iterator; /// @brief Add a parameter to this tag prototype /// @param type Data type of the parameter /// @param classi Semantic type of the parameter /// @param opt Situations in which this parameter is present - void AddParam(VariableDataType type, AssParameterClass classi = PARCLASS_NORMAL, int opt = NOT_OPTIONAL); + void AddParam(VariableDataType type, AssParameterClass classi = PARCLASS_NORMAL, int opt = NOT_OPTIONAL) { + params.emplace_back(type, opt, classi); + } + /// @brief Convenience function for single-argument tags /// @param name Name of the tag, with slash /// @param type Data type of the parameter /// @param classi Semantic type of the parameter /// @param opt Situations in which this parameter is present - void Set(wxString name, VariableDataType type, AssParameterClass classi = PARCLASS_NORMAL, int opt = NOT_OPTIONAL); + void Set(const char *name, VariableDataType type, AssParameterClass classi = PARCLASS_NORMAL, int opt = NOT_OPTIONAL) { + this->name = name; + params.emplace_back(type, opt, classi); + } }; -AssOverrideParamProto::AssOverrideParamProto(VariableDataType type, int opt, AssParameterClass classi) -: optional(opt) -, type(type) -, classification(classi) -{ -} - -void AssOverrideTagProto::AddParam(VariableDataType type, AssParameterClass classi, int opt) { - params.emplace_back(type, opt, classi); -} - -void AssOverrideTagProto::Set(wxString newName, VariableDataType type, AssParameterClass classi, int opt) { - name = newName; - params.emplace_back(type, opt, classi); -} - static std::vector proto; static void load_protos() { static bool loaded = false; @@ -341,8 +332,8 @@ static void load_protos() { proto[i].AddParam(VARDATA_BLOCK); } -std::vector tokenize(const wxString &text) { - std::vector paramList; +std::vector tokenize(const std::string &text) { + std::vector paramList; paramList.reserve(6); if (text.empty()) @@ -351,32 +342,25 @@ std::vector tokenize(const wxString &text) { if (text[0] != '(') { // There's just one parameter (because there's no parentheses) // This means text is all our parameters - wxString param(text); - paramList.push_back(param.Trim(true).Trim(false)); + paramList.emplace_back(boost::trim_copy(text)); return paramList; } // Ok, so there are parentheses used here, so there may be more than one parameter // Enter fullscale parsing! size_t i = 0, textlen = text.size(); - size_t start = 0; int parDepth = 1; while (i < textlen && parDepth > 0) { // Just skip until next ',' or ')', whichever comes first // (Next ')' is achieved when parDepth == 0) - start = ++i; + size_t start = ++i; while (i < textlen && parDepth > 0) { - wxChar c = text[i]; + char c = text[i]; // parDepth 1 is where we start, and the tag-level we're interested in parsing on if (c == ',' && parDepth == 1) break; if (c == '(') parDepth++; else if (c == ')') { - parDepth--; - if (parDepth < 0) { - wxLogWarning("Unmatched parenthesis near '%s'!\nTag-parsing incomplete.", text.SubString(i, 10)); - return paramList; - } - else if (parDepth == 0) { + if (--parDepth == 0) { // We just ate the parenthesis ending this parameter block // Make sure it doesn't get included in the parameter text break; @@ -385,22 +369,22 @@ std::vector tokenize(const wxString &text) { i++; } // i now points to the first character not member of this parameter - paramList.push_back(text.SubString(start, i-1).Trim(true).Trim(false)); + paramList.emplace_back(boost::trim_copy(text.substr(start, i - start))); } if (i+1 < textlen) { // There's some additional garbage after the parentheses // Just add it in for completeness - paramList.push_back(text.Mid(i+1)); + paramList.emplace_back(text.begin() + i + 1, text.end()); } return paramList; } -void parse_parameters(AssOverrideTag *tag, const wxString &text, AssOverrideTagProto::iterator proto_it) { +void parse_parameters(AssOverrideTag *tag, const std::string &text, AssOverrideTagProto::iterator proto_it) { tag->Clear(); // Tokenize text, attempting to find all parameters - std::vector paramList = tokenize(text); + std::vector paramList = tokenize(text); size_t totalPars = paramList.size(); int parsFlag = 1 << (totalPars - 1); // Get optional parameters flag @@ -428,30 +412,32 @@ void parse_parameters(AssOverrideTag *tag, const wxString &text, AssOverrideTagP void AssDialogueBlockOverride::ParseTags() { Tags.clear(); - wxStringTokenizer tkn(text, "\\", wxTOKEN_STRTOK); - wxString curTag; - if (text.StartsWith("\\")) curTag = "\\"; - - while (tkn.HasMoreTokens()) { - curTag += tkn.GetNextToken(); - - // Check for parenthesis matching for \t - while (curTag.Freq('(') > curTag.Freq(')') && tkn.HasMoreTokens()) - curTag << "\\" << tkn.GetNextToken(); - - Tags.emplace_back(curTag); - - curTag = "\\"; + int depth = 0; + size_t start = 0; + for (size_t i = 1; i < text.size(); ++i) { + if (depth > 0) { + if (text[i] == ')') + --depth; + } + else if (text[i] == '\\') { + Tags.emplace_back(text.substr(start, i - start)); + start = i; + } + else if (text[i] == '(') + ++depth; } + + if (!text.empty()) + Tags.emplace_back(text.substr(start)); } -void AssDialogueBlockOverride::AddTag(wxString const& tag) { +void AssDialogueBlockOverride::AddTag(std::string const& tag) { Tags.emplace_back(tag); } -static wxString tag_str(AssOverrideTag const& t) { return t; } -wxString AssDialogueBlockOverride::GetText() { - text = "{" + join(Tags | transformed(tag_str), wxString()) + "}"; +static std::string tag_str(AssOverrideTag const& t) { return t; } +std::string AssDialogueBlockOverride::GetText() { + text = "{" + join(Tags | transformed(tag_str), std::string()) + "}"; return text; } @@ -470,7 +456,7 @@ void AssDialogueBlockOverride::ProcessParameters(ProcessParametersCallback callb } AssOverrideTag::AssOverrideTag() : valid(false) { } -AssOverrideTag::AssOverrideTag(wxString const& text) { +AssOverrideTag::AssOverrideTag(std::string const& text) { SetText(text); } AssOverrideTag::AssOverrideTag(AssOverrideTag&& rhs) @@ -493,24 +479,25 @@ void AssOverrideTag::Clear() { valid = false; } -void AssOverrideTag::SetText(const wxString &text) { +void AssOverrideTag::SetText(const std::string &text) { load_protos(); for (auto cur = proto.begin(); cur != proto.end(); ++cur) { - if (text.StartsWith(cur->name)) { + if (boost::starts_with(text, cur->name)) { Name = cur->name; - parse_parameters(this, text.Mid(Name.length()), cur); + parse_parameters(this, text.substr(Name.size()), cur); valid = true; return; } } + // Junk tag Name = text; valid = false; } -static wxString param_str(AssOverrideParameter const& p) { return p.Get(); } -AssOverrideTag::operator wxString() const { - wxString result = Name; +static std::string param_str(AssOverrideParameter const& p) { return p.Get(); } +AssOverrideTag::operator std::string() const { + std::string result = Name; // Determine if it needs parentheses bool parentheses = Params.size() > 1; @@ -520,7 +507,7 @@ AssOverrideTag::operator wxString() const { result += join(Params | filtered([](AssOverrideParameter const& p) { return !p.omitted; } ) | transformed(param_str), - wxS(",")); + ","); if (parentheses) result += ")"; return result; diff --git a/aegisub/src/ass_override.h b/aegisub/src/ass_override.h index 8a1ae0156..85060212a 100644 --- a/aegisub/src/ass_override.h +++ b/aegisub/src/ass_override.h @@ -37,7 +37,6 @@ #include class AssDialogueBlockOverride; -class wxString; /// Type of parameter; probably only used by the resample tool enum AssParameterClass { @@ -63,7 +62,7 @@ enum VariableDataType { /// A single parameter to an override tag class AssOverrideParameter : boost::noncopyable { - wxString value; + std::string value; mutable std::unique_ptr block; VariableDataType type; @@ -93,14 +92,14 @@ class AssOverrideTag : boost::noncopyable { public: AssOverrideTag(); AssOverrideTag(AssOverrideTag&&); - AssOverrideTag(wxString const& text); + AssOverrideTag(std::string const& text); AssOverrideTag& operator=(AssOverrideTag&&); - wxString Name; + std::string Name; std::vector Params; bool IsValid() const { return valid; } void Clear(); - void SetText(const wxString &text); - operator wxString() const; + void SetText(const std::string &text); + operator std::string() const; }; diff --git a/aegisub/src/audio_karaoke.cpp b/aegisub/src/audio_karaoke.cpp index 5c551d438..546fbd2de 100644 --- a/aegisub/src/audio_karaoke.cpp +++ b/aegisub/src/audio_karaoke.cpp @@ -26,16 +26,6 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include "include/aegisub/context.h" #include "ass_dialogue.h" @@ -44,11 +34,21 @@ #include "audio_box.h" #include "audio_controller.h" #include "audio_timing.h" +#include "compat.h" #include "libresrc/libresrc.h" #include "main.h" #include "selection_controller.h" #include "utils.h" +#include +#include +#include +#include +#include +#include +#include +#include + template static inline size_t last_lt_or_eq(Container const& c, Value const& v) { typename Container::const_iterator it = lower_bound(c.begin(), c.end(), v); @@ -236,8 +236,8 @@ void AudioKaraoke::RenderText() { } } -void AudioKaraoke::AddMenuItem(wxMenu &menu, wxString const& tag, wxString const& help, wxString const& selected) { - wxMenuItem *item = menu.AppendCheckItem(-1, tag, help); +void AudioKaraoke::AddMenuItem(wxMenu &menu, std::string const& tag, wxString const& help, std::string const& selected) { + wxMenuItem *item = menu.AppendCheckItem(-1, to_wx(tag), help); menu.Bind(wxEVT_COMMAND_MENU_SELECTED, std::bind(&AudioKaraoke::SetTagType, this, tag), item->GetId()); item->Check(tag == selected); } @@ -246,7 +246,7 @@ void AudioKaraoke::OnContextMenu(wxContextMenuEvent&) { if (!enabled) return; wxMenu context_menu(_("Karaoke tag")); - wxString type = kara->GetTagType(); + std::string type = kara->GetTagType(); AddMenuItem(context_menu, "\\k", _("Change karaoke tag to \\k"), type); AddMenuItem(context_menu, "\\kf", _("Change karaoke tag to \\kf"), type); @@ -359,7 +359,7 @@ void AudioKaraoke::SetDisplayText() { syl_start_points.reserve(kara->size()); for (auto const& syl : *kara) { syl_start_points.push_back(spaced_text.size()); - spaced_text += " " + syl.text; + spaced_text += to_wx(" " + syl.text); } // Get the x-coordinates of the right edge of each character @@ -408,7 +408,7 @@ void AudioKaraoke::AcceptSplit() { cancel_button->Enable(false); } -void AudioKaraoke::SetTagType(wxString new_tag) { +void AudioKaraoke::SetTagType(std::string const& new_tag) { kara->SetTagType(new_tag); AcceptSplit(); } diff --git a/aegisub/src/audio_karaoke.h b/aegisub/src/audio_karaoke.h index 0f5483a1c..eb42556bc 100644 --- a/aegisub/src/audio_karaoke.h +++ b/aegisub/src/audio_karaoke.h @@ -118,9 +118,9 @@ class AudioKaraoke : public wxWindow { void SetDisplayText(); /// Helper function for context menu creation - void AddMenuItem(wxMenu &menu, wxString const& tag, wxString const& help, wxString const& selected); + void AddMenuItem(wxMenu &menu, std::string const& tag, wxString const& help, std::string const& selected); /// Set the karaoke tags for the selected syllables to the indicated one - void SetTagType(wxString new_type); + void SetTagType(std::string const& new_type); /// Prerender the current line along with syllable split lines void RenderText(); diff --git a/aegisub/src/audio_timing_karaoke.cpp b/aegisub/src/audio_timing_karaoke.cpp index 91fdb1a8d..7280ad2fa 100644 --- a/aegisub/src/audio_timing_karaoke.cpp +++ b/aegisub/src/audio_timing_karaoke.cpp @@ -29,6 +29,7 @@ #include "audio_controller.h" #include "audio_renderer.h" #include "audio_timing.h" +#include "compat.h" #include "include/aegisub/context.h" #include "main.h" #include "pen.h" diff --git a/aegisub/src/command/edit.cpp b/aegisub/src/command/edit.cpp index 1601037e9..5ef391ef4 100644 --- a/aegisub/src/command/edit.cpp +++ b/aegisub/src/command/edit.cpp @@ -48,6 +48,7 @@ #include "../ass_file.h" #include "../ass_karaoke.h" #include "../ass_style.h" +#include "../compat.h" #include "../dialog_colorpicker.h" #include "../dialog_paste_over.h" #include "../dialog_search_replace.h" @@ -59,6 +60,7 @@ #include "../utils.h" #include "../video_context.h" +#include #include #include #include @@ -166,7 +168,7 @@ void paste_lines(agi::Context *c, bool paste_over) { } template -T get_value(boost::ptr_vector const& blocks, int blockn, T initial, wxString const& tag_name, wxString alt = wxString()) { +T get_value(boost::ptr_vector const& blocks, int blockn, T initial, std::string const& tag_name, std::string alt = "") { for (auto ovr : blocks | sliced(0, blockn + 1) | reversed | agi::of_type()) { for (auto const& tag : ovr->Tags | reversed) { if (tag.Name == tag_name || tag.Name == alt) @@ -190,7 +192,7 @@ int block_at_pos(wxString const& text, int pos) { return n; } -void set_tag(AssDialogue *line, boost::ptr_vector &blocks, wxString const& tag, wxString const& value, int &sel_start, int &sel_end, bool at_end = false) { +void set_tag(AssDialogue *line, boost::ptr_vector &blocks, std::string const& tag, std::string const& value, int &sel_start, int &sel_end, bool at_end = false) { if (blocks.empty()) blocks = line->ParseTags(); @@ -205,7 +207,7 @@ void set_tag(AssDialogue *line, boost::ptr_vector &blocks, wxS --blockn; else if ((plain = dynamic_cast(block))) { // Cursor is in a comment block, so try the previous block instead - if (plain->GetText().StartsWith("{")) { + if (boost::starts_with(plain->GetText(), "{")) { --blockn; start = line->Text.get().rfind('{', start); } @@ -224,22 +226,22 @@ void set_tag(AssDialogue *line, boost::ptr_vector &blocks, wxS if (blockn < 0) start = 0; - wxString insert = tag + value; + std::string insert(tag + value); int shift = insert.size(); if (plain || blockn < 0) { - line->Text = line->Text.get().Left(start) + "{" + insert + "}" + line->Text.get().Mid(start); + line->Text = line->Text.get().Left(start) + "{" + to_wx(insert) + "}" + line->Text.get().Mid(start); shift += 2; blocks = line->ParseTags(); } else if (ovr) { - wxString alt; + std::string alt; if (tag == "\\c") alt = "\\1c"; // Remove old of same bool found = false; for (size_t i = 0; i < ovr->Tags.size(); i++) { - wxString name = ovr->Tags[i].Name; + std::string const& name = ovr->Tags[i].Name; if (tag == name || alt == name) { - shift -= ((wxString)ovr->Tags[i]).size(); + shift -= ((std::string)ovr->Tags[i]).size(); if (found) { ovr->Tags.erase(ovr->Tags.begin() + i); i--; @@ -433,21 +435,21 @@ struct edit_font : public Command { get_value(blocks, blockn, style->italic, "\\i") ? wxFONTSTYLE_ITALIC : wxFONTSTYLE_NORMAL, get_value(blocks, blockn, style->bold, "\\b") ? wxFONTWEIGHT_BOLD : wxFONTWEIGHT_NORMAL, get_value(blocks, blockn, style->underline, "\\u"), - get_value(blocks, blockn, style->font, "\\fn")); + to_wx(get_value(blocks, blockn, from_wx(style->font), "\\fn"))); const wxFont font = wxGetFontFromUser(c->parent, startfont); if (!font.Ok() || font == startfont) return; if (font.GetFaceName() != startfont.GetFaceName()) - set_tag(line, blocks, "\\fn", font.GetFaceName(), sel_start, sel_end); + set_tag(line, blocks, "\\fn", from_wx(font.GetFaceName()), sel_start, sel_end); if (font.GetPointSize() != startfont.GetPointSize()) - set_tag(line, blocks, "\\fs", wxString::Format("%d", font.GetPointSize()), sel_start, sel_end); + set_tag(line, blocks, "\\fs", std::to_string(font.GetPointSize()), sel_start, sel_end); if (font.GetWeight() != startfont.GetWeight()) - set_tag(line, blocks, "\\b", wxString::Format("%d", font.GetWeight() == wxFONTWEIGHT_BOLD), sel_start, sel_end); + set_tag(line, blocks, "\\b", std::to_string(font.GetWeight() == wxFONTWEIGHT_BOLD), sel_start, sel_end); if (font.GetStyle() != startfont.GetStyle()) - set_tag(line, blocks, "\\i", wxString::Format("%d", font.GetStyle() == wxFONTSTYLE_ITALIC), sel_start, sel_end); + set_tag(line, blocks, "\\i", std::to_string(font.GetStyle() == wxFONTSTYLE_ITALIC), sel_start, sel_end); if (font.GetUnderlined() != startfont.GetUnderlined()) - set_tag(line, blocks, "\\i", wxString::Format("%d", font.GetUnderlined()), sel_start, sel_end); + set_tag(line, blocks, "\\i", std::to_string(font.GetUnderlined()), sel_start, sel_end); commit_text(c, _("set font"), sel_start, sel_end); } diff --git a/aegisub/src/dialog_kara_timing_copy.cpp b/aegisub/src/dialog_kara_timing_copy.cpp index dff3c8ae6..fe0b21e28 100644 --- a/aegisub/src/dialog_kara_timing_copy.cpp +++ b/aegisub/src/dialog_kara_timing_copy.cpp @@ -53,6 +53,7 @@ #include "ass_dialogue.h" #include "ass_file.h" #include "ass_karaoke.h" +#include "compat.h" #include "help_button.h" #include "include/aegisub/context.h" #include "kana_table.h" @@ -266,7 +267,7 @@ void KaraokeLineMatchDisplay::OnPaint(wxPaintEvent &) // Matched source syllables int syl_x = next_x; for (auto const& syl : grp.src) - syl_x += DrawBoxedText(dc, syl.text, syl_x, y_line1); + syl_x += DrawBoxedText(dc, to_wx(syl.text), syl_x, y_line1); // Matched destination text { @@ -305,7 +306,7 @@ void KaraokeLineMatchDisplay::OnPaint(wxPaintEvent &) dc.SetBrush(wxBrush(inner_back)); } - syl_x += DrawBoxedText(dc, unmatched_source[j].text, syl_x, y_line1); + syl_x += DrawBoxedText(dc, to_wx(unmatched_source[j].text), syl_x, y_line1); } // Remaining destination @@ -413,7 +414,7 @@ void KaraokeLineMatchDisplay::AutoMatchJapanese() } // We'll first see if we can do something with the first unmatched source syllable - wxString src(unmatched_source[0].text.Lower()); + wxString src(to_wx(unmatched_source[0].text).Lower()); wxString dst(unmatched_destination); source_sel_length = 1; // we're working on the first, assume it was matched destination_sel_length = 0; @@ -531,12 +532,12 @@ void KaraokeLineMatchDisplay::AutoMatchJapanese() // Check if we've gone too far ahead in the source if (src_lookahead_pos++ >= src_lookahead_max) break; // Otherwise look for a match - if (syl.text.StartsWith(matched_roma)) + if (to_wx(syl.text).StartsWith(matched_roma)) { // Yay! Time to interpolate. // Special case: If the last source syllable before the matching one is // empty or contains just whitespace, don't include that one. - if (src_lookahead_pos > 1 && StringEmptyOrWhitespace(unmatched_source[src_lookahead_pos-2].text)) + if (src_lookahead_pos > 1 && StringEmptyOrWhitespace(to_wx(unmatched_source[src_lookahead_pos-2].text))) src_lookahead_pos -= 1; // Special case: Just one source syllable matching, pick all destination found if (src_lookahead_pos == 2) diff --git a/aegisub/src/dialog_resample.cpp b/aegisub/src/dialog_resample.cpp index 59b9fa5b4..d0a8f247e 100644 --- a/aegisub/src/dialog_resample.cpp +++ b/aegisub/src/dialog_resample.cpp @@ -152,7 +152,7 @@ namespace { double ar; }; - void resample_tags(wxString const& name, AssOverrideParameter *cur, void *ud) { + void resample_tags(std::string const& name, AssOverrideParameter *cur, void *ud) { resample_state *state = static_cast(ud); double resizer = 1.0; @@ -182,7 +182,7 @@ namespace { break; case PARCLASS_DRAWING: { - AssDialogueBlockDrawing block(cur->Get(), 1); + AssDialogueBlockDrawing block(cur->Get(), 1); block.TransformCoords(state->margin[LEFT], state->margin[TOP], state->rx, state->ry); cur->Set(block.GetText()); return; diff --git a/aegisub/src/dialog_style_editor.cpp b/aegisub/src/dialog_style_editor.cpp index 42360bdc5..88331ade1 100644 --- a/aegisub/src/dialog_style_editor.cpp +++ b/aegisub/src/dialog_style_editor.cpp @@ -73,11 +73,11 @@ class StyleRenamer { wxString new_name; /// Process a single override parameter to check if it's \r with this style name - static void ProcessTag(wxString const& tag, AssOverrideParameter* param, void *userData) { + static void ProcessTag(std::string const& tag, AssOverrideParameter* param, void *userData) { StyleRenamer *self = static_cast(userData); - if (tag == "\\r" && param->GetType() == VARDATA_TEXT && param->Get() == self->source_name) { + if (tag == "\\r" && param->GetType() == VARDATA_TEXT && to_wx(param->Get()) == self->source_name) { if (self->do_replace) - param->Set(self->new_name); + param->Set(from_wx(self->new_name)); else self->found_any = true; } diff --git a/aegisub/src/dialog_translation.cpp b/aegisub/src/dialog_translation.cpp index d6ae0bab5..5765670df 100644 --- a/aegisub/src/dialog_translation.cpp +++ b/aegisub/src/dialog_translation.cpp @@ -39,6 +39,9 @@ #include "utils.h" #include "video_context.h" +#include +#include + #include #include #include @@ -53,9 +56,9 @@ static void add_hotkey(wxSizer *sizer, wxWindow *parent, const char *command, wx // Skip over override blocks, comments, and whitespace between blocks static bool bad_block(AssDialogueBlock &block) { if (block.GetType() != BLOCK_PLAIN) return true; - wxString text = block.GetText(); - if (text.Trim().Trim(false).empty()) return true; - if (text[0] == '{' && text.Last() == '}') return true; + std::string text = block.GetText(); + if (boost::all(text, boost::is_space())) return true; + if (boost::starts_with(text, "{") && boost::ends_with(text, "}")) return true; return false; } @@ -247,14 +250,14 @@ void DialogTranslation::UpdateDisplay() { for (auto& block : blocks) { if (block.GetType() == BLOCK_PLAIN) { int cur_size = original_text->GetReverseUnicodePosition(original_text->GetLength()); - original_text->AppendText(block.GetText()); + original_text->AppendTextRaw(block.GetText().c_str()); if (i == cur_block) { original_text->StartUnicodeStyling(cur_size); original_text->SetUnicodeStyling(cur_size, block.GetText().size(), 1); } } else if (block.GetType() == BLOCK_OVERRIDE) - original_text->AppendText(block.GetText()); + original_text->AppendTextRaw(block.GetText().c_str()); ++i; } @@ -271,7 +274,7 @@ void DialogTranslation::Commit(bool next) { new_value.Replace("\r\n", "\\N"); new_value.Replace("\r", "\\N"); new_value.Replace("\n", "\\N"); - blocks[cur_block] = AssDialogueBlockPlain(new_value); + blocks[cur_block] = AssDialogueBlockPlain(from_wx(new_value)); active_line->UpdateText(blocks); file_change_connection.Block(); @@ -290,7 +293,7 @@ void DialogTranslation::Commit(bool next) { } void DialogTranslation::InsertOriginal() { - translated_text->AddText(blocks[cur_block].GetText()); + translated_text->AddText(to_wx(blocks[cur_block].GetText())); } diff --git a/aegisub/src/export_framerate.cpp b/aegisub/src/export_framerate.cpp index b889a6258..f734ec2e0 100644 --- a/aegisub/src/export_framerate.cpp +++ b/aegisub/src/export_framerate.cpp @@ -167,7 +167,7 @@ int FORCEINLINE trunc_cs(int time) { return (time / 10) * 10; } -void AssTransformFramerateFilter::TransformTimeTags(wxString const& name, AssOverrideParameter *curParam, void *curData) { +void AssTransformFramerateFilter::TransformTimeTags(std::string const& name, AssOverrideParameter *curParam, void *curData) { VariableDataType type = curParam->GetType(); if (type != VARDATA_INT && type != VARDATA_FLOAT) return; diff --git a/aegisub/src/export_framerate.h b/aegisub/src/export_framerate.h index 391c812b3..380079c6a 100644 --- a/aegisub/src/export_framerate.h +++ b/aegisub/src/export_framerate.h @@ -72,7 +72,7 @@ class AssTransformFramerateFilter : public AssExportFilter { /// @param name Name of the tag /// @param curParam Current parameter being processed /// @param userdata Filter instance - static void TransformTimeTags(wxString const& name, AssOverrideParameter *curParam, void *userdata); + static void TransformTimeTags(std::string const& name, AssOverrideParameter *curParam, void *userdata); /// @brief Convert a time from the input frame rate to the output frame rate /// @param time Time in ms to convert diff --git a/aegisub/src/font_file_lister.cpp b/aegisub/src/font_file_lister.cpp index 3182d3a7c..1d4357edf 100644 --- a/aegisub/src/font_file_lister.cpp +++ b/aegisub/src/font_file_lister.cpp @@ -26,6 +26,7 @@ #include "ass_dialogue.h" #include "ass_file.h" #include "ass_style.h" +#include "compat.h" #include "utils.h" #include @@ -59,7 +60,7 @@ void FontCollector::ProcessDialogueLine(const AssDialogue *line, int index) { std::string const& name = tag.Name; if (name == "\\r") { - style = styles[tag.Params[0].Get(line->Style)]; + style = styles[to_wx(tag.Params[0].Get(from_wx(line->Style)))]; overriden = false; } else if (name == "\\b") { @@ -71,7 +72,7 @@ void FontCollector::ProcessDialogueLine(const AssDialogue *line, int index) { overriden = true; } else if (name == "\\fn") { - style.facename = tag.Params[0].Get(initial.facename); + style.facename = to_wx(tag.Params[0].Get(from_wx(initial.facename))); overriden = true; } } diff --git a/aegisub/src/subtitle_format_ebu3264.cpp b/aegisub/src/subtitle_format_ebu3264.cpp index 98655b5b9..2cca600be 100644 --- a/aegisub/src/subtitle_format_ebu3264.cpp +++ b/aegisub/src/subtitle_format_ebu3264.cpp @@ -285,7 +285,7 @@ namespace case BLOCK_PLAIN: // find special characters and convert them { - wxString text = b.GetText(); + wxString text = to_wx(b.GetText()); // Skip comments if (text.size() > 1 && text[0] =='{' && text.Last() == '}') diff --git a/aegisub/src/subtitle_format_srt.cpp b/aegisub/src/subtitle_format_srt.cpp index cb8e184ca..1cd092e7e 100644 --- a/aegisub/src/subtitle_format_srt.cpp +++ b/aegisub/src/subtitle_format_srt.cpp @@ -516,7 +516,7 @@ void SRTSubtitleFormat::WriteFile(const AssFile *src, wxString const& filename, } bool SRTSubtitleFormat::CanSave(const AssFile *file) const { - wxString supported_tags[] = { "\\b", "\\i", "\\s", "\\u" }; + std::string supported_tags[] = { "\\b", "\\i", "\\s", "\\u" }; AssStyle defstyle; for (auto const& line : file->Line) { @@ -574,7 +574,7 @@ wxString SRTSubtitleFormat::ConvertTags(const AssDialogue *diag) const { } // Plain text else if (AssDialogueBlockPlain *plain = dynamic_cast(&block)) { - final += plain->GetText(); + final += to_wx(plain->GetText()); } } diff --git a/aegisub/src/visual_tool.cpp b/aegisub/src/visual_tool.cpp index 1117f820b..96214d6cd 100644 --- a/aegisub/src/visual_tool.cpp +++ b/aegisub/src/visual_tool.cpp @@ -28,6 +28,7 @@ #include "ass_file.h" #include "ass_style.h" #include "ass_time.h" +#include "compat.h" #include "include/aegisub/context.h" #include "main.h" #include "utils.h" @@ -354,7 +355,7 @@ void VisualTool::RemoveSelection(feature_iterator feat) { typedef const std::vector * param_vec; // Find a tag's parameters in a line or return nullptr if it's not found -static param_vec find_tag(boost::ptr_vector& blocks, wxString tag_name) { +static param_vec find_tag(boost::ptr_vector& blocks, std::string const& tag_name) { for (auto ovr : blocks | agi::of_type()) { for (auto const& tag : ovr->Tags) { if (tag.Name == tag_name) @@ -526,21 +527,21 @@ wxString VisualToolBase::GetLineVectorClip(AssDialogue *diag, int &scale, bool & } if (tag) { scale = std::max((*tag)[0].Get(scale), 1); - return (*tag)[1].Get(""); + return to_wx((*tag)[1].Get("")); } return ""; } -void VisualToolBase::SetSelectedOverride(wxString const& tag, wxString const& value) { +void VisualToolBase::SetSelectedOverride(std::string const& tag, wxString const& value) { for (auto line : c->selectionController->GetSelectedSet()) SetOverride(line, tag, value); } -void VisualToolBase::SetOverride(AssDialogue* line, wxString const& tag, wxString const& value) { +void VisualToolBase::SetOverride(AssDialogue* line, std::string const& tag, wxString const& value) { if (!line) return; - wxString removeTag; + std::string removeTag; if (tag == "\\1c") removeTag = "\\c"; else if (tag == "\\frz") removeTag = "\\fr"; else if (tag == "\\pos") removeTag = "\\move"; @@ -548,8 +549,6 @@ void VisualToolBase::SetOverride(AssDialogue* line, wxString const& tag, wxStrin else if (tag == "\\clip") removeTag = "\\iclip"; else if (tag == "\\iclip") removeTag = "\\clip"; - wxString insert = tag + value; - // Get block at start boost::ptr_vector blocks(line->ParseTags()); AssDialogueBlock *block = &blocks.front(); @@ -558,17 +557,17 @@ void VisualToolBase::SetOverride(AssDialogue* line, wxString const& tag, wxStrin assert(dynamic_cast(block) == nullptr); if (dynamic_cast(block)) - line->Text = "{" + insert + "}" + line->Text; + line->Text = "{" + to_wx(tag) + value + "}" + line->Text; else if (AssDialogueBlockOverride *ovr = dynamic_cast(block)) { // Remove old of same for (size_t i = 0; i < ovr->Tags.size(); i++) { - wxString const& name = ovr->Tags[i].Name; + std::string const& name = ovr->Tags[i].Name; if (tag == name || removeTag == name) { ovr->Tags.erase(ovr->Tags.begin() + i); i--; } } - ovr->AddTag(insert); + ovr->AddTag(tag + from_wx(value)); line->UpdateText(blocks); } diff --git a/aegisub/src/visual_tool.h b/aegisub/src/visual_tool.h index 838a66080..efe3c5cd3 100644 --- a/aegisub/src/visual_tool.h +++ b/aegisub/src/visual_tool.h @@ -135,8 +135,8 @@ protected: void GetLineClip(AssDialogue *diag, Vector2D &p1, Vector2D &p2, bool &inverse); wxString GetLineVectorClip(AssDialogue *diag, int &scale, bool &inverse); - void SetOverride(AssDialogue* line, wxString const& tag, wxString const& value); - void SetSelectedOverride(wxString const& tag, wxString const& value); + void SetOverride(AssDialogue* line, std::string const& tag, wxString const& value); + void SetSelectedOverride(std::string const& tag, wxString const& value); VisualToolBase(VideoDisplay *parent, agi::Context *context);