From 9e3aa6d583dc11a87e8ad54414ec33f18d26f69b Mon Sep 17 00:00:00 2001 From: Guillaume Pasero <guillaume.pasero@c-s.fr> Date: Tue, 9 Jan 2018 14:29:38 +0100 Subject: [PATCH] BUG: Mantis-1489: utility class to prepare string for HTML encapsulation --- Modules/Core/Common/include/otbStringToHTML.h | 55 +++++++++++++++ Modules/Core/Common/src/CMakeLists.txt | 1 + Modules/Core/Common/src/otbStringToHTML.cxx | 68 +++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 Modules/Core/Common/include/otbStringToHTML.h create mode 100644 Modules/Core/Common/src/otbStringToHTML.cxx diff --git a/Modules/Core/Common/include/otbStringToHTML.h b/Modules/Core/Common/include/otbStringToHTML.h new file mode 100644 index 0000000000..3eab95fd21 --- /dev/null +++ b/Modules/Core/Common/include/otbStringToHTML.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef otbStringToHTML_h +#define otbStringToHTML_h + +#include <string> +#include <iostream> + +#include "OTBCommonExport.h" + +namespace otb +{ + +/** + * \class StringToHTML + * + * Prepare a plain string for HTML encapsulation (protection of special + * characters) + */ +class OTBCommon_EXPORT StringToHTML +{ +public: + StringToHTML(const std::string & str); + + void Print(std::ostream& os) const; + +protected: + +private: + const std::string & m_Str; +}; + +extern OTBCommon_EXPORT std::ostream & operator<< (std::ostream& os, const otb::StringToHTML& str); + +} // end of namespace otb + +#endif diff --git a/Modules/Core/Common/src/CMakeLists.txt b/Modules/Core/Common/src/CMakeLists.txt index fdfd2e9f5c..02ff6250e7 100644 --- a/Modules/Core/Common/src/CMakeLists.txt +++ b/Modules/Core/Common/src/CMakeLists.txt @@ -28,6 +28,7 @@ set(OTBCommon_SRC otbStandardOneLineFilterWatcher.cxx otbWriterWatcherBase.cxx otbStopwatch.cxx + otbStringToHTML.cxx ) add_library(OTBCommon ${OTBCommon_SRC}) diff --git a/Modules/Core/Common/src/otbStringToHTML.cxx b/Modules/Core/Common/src/otbStringToHTML.cxx new file mode 100644 index 0000000000..064ec850c2 --- /dev/null +++ b/Modules/Core/Common/src/otbStringToHTML.cxx @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES) + * + * This file is part of Orfeo Toolbox + * + * https://www.orfeo-toolbox.org/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "otbStringToHTML.h" + +namespace otb +{ + +StringToHTML::StringToHTML(const std::string & str) + : m_Str(str) +{ +} + +void +StringToHTML::Print(std::ostream& os) const +{ + // TODO : add a Tex to HTML translator (maybe try TtH) + bool formulaMode=false; + for(auto&& c : m_Str) + { + if (c=='`') + { + formulaMode = !formulaMode; + } + switch (c) + { + case '<': + os.write("<",4); + break; + case '>': + os.write(">",4); + break; + case '&': + os.write("&",5); + break; + case '\n': + os.write("<br/>",5); + break; + default: + os.put(c); + } + } +} + +std::ostream & operator<< (std::ostream& os, const StringToHTML& str) +{ + str.Print(os); + return os; +} + +} // end of namespace otb -- GitLab