From 154fb7d9fd88ea9b25de374efd7c65ee949fa842 Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 29 Feb 2024 13:03:38 +0300 Subject: [PATCH] pip_vtt support special characters --- CMakeLists.txt | 2 +- utils/value_tree_translator/main.cpp | 36 ++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 97994baf..6b9cd963 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(PIP) set(PIP_MAJOR 3) set(PIP_MINOR 15) -set(PIP_REVISION 2) +set(PIP_REVISION 3) set(PIP_SUFFIX ) set(PIP_COMPANY SHS) set(PIP_DOMAIN org.SHS) diff --git a/utils/value_tree_translator/main.cpp b/utils/value_tree_translator/main.cpp index 580a0fcf..ae2d6115 100644 --- a/utils/value_tree_translator/main.cpp +++ b/utils/value_tree_translator/main.cpp @@ -77,6 +77,34 @@ void printError(const PIString & msg) { PISet strings; PIMap locations; +PIString mask(const PIString & in) { + static PIVector> map = { + {"&", "&" }, + {"<", "<" }, + {">", ">" }, + {"'", "'"}, + {"\"", """}, + }; + PIString ret = in; + for (const auto & i: map) + ret.replaceAll(i.first, i.second); + return ret; +} + +PIString unmask(const PIString & in) { + static PIVector> map = { + {"<", "<" }, + {">", ">" }, + {"'", "'"}, + {"\"", """}, + {"&", "&" }, + }; + PIString ret = in; + for (const auto & i: map) + ret.replaceAll(i.second, i.first); + return ret; +} + void addString(const PIString & s, const PIString & loc) { if (s.isEmpty()) return; strings << s; @@ -138,7 +166,7 @@ PIMap readTS(const PIString & path) { phase = 2; } else if (line.startsWith("")) { line.cutLeft(8).cutRight(9); - msg.source = line; + msg.source = unmask(line); } else if (line.startsWith("').cutLeft(8); while (trs.isNotEmpty()) { @@ -158,7 +186,7 @@ PIMap readTS(const PIString & path) { if (t == "type") msg.type = v; } line.cutRight(14); - msg.translation = line; + msg.translation = unmask(line); } break; } @@ -236,7 +264,7 @@ int main(int argc, char * argv[]) { PIIOTextStream ts(&outf); auto writeTSMessage = [&ts](const PIString & s, const TSMessage & m) { ts << " \n"; - ts << " " << s << "\n"; + ts << " " << mask(s) << "\n"; if (m.filename.isNotEmpty()) { ts << " " << m.translation << "\n"; + ts << ">" << mask(m.translation) << "\n"; ts << " \n"; }; ts << "\n";