X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetHyperlink.cpp;h=908ddd1337c099e35bfc2b97cb58a427ebf0e4e5;hb=c3a8b3a566e9e90f9ade72acbc723232d721d0b1;hp=213e7b59ad08ce1eabd0d73a073a1794d93f092d;hpb=07b6198f4c3aa6dfe3245394b660966fd3e85c99;p=lyx.git diff --git a/src/insets/InsetHyperlink.cpp b/src/insets/InsetHyperlink.cpp index 213e7b59ad..908ddd1337 100644 --- a/src/insets/InsetHyperlink.cpp +++ b/src/insets/InsetHyperlink.cpp @@ -16,40 +16,29 @@ #include "DispatchResult.h" #include "FuncRequest.h" #include "LaTeXFeatures.h" -#include "gettext.h" +#include "support/gettext.h" #include "OutputParams.h" #include "support/lstrings.h" +#include "support/docstream.h" -#include "support/std_ostream.h" - +using namespace std; +using namespace lyx::support; namespace lyx { -using support::subst; - -using std::string; -using std::ostream; -using std::find; -using std::replace; - -static char const * const chars_url[2] = {"%", "#"}; - -static char const * const chars_name[6] = { - "&", "_", "$", "%", "#", "^"}; - InsetHyperlink::InsetHyperlink(InsetCommandParams const & p) : InsetCommand(p, "href") {} -CommandInfo const * InsetHyperlink::findInfo(std::string const & /* cmdName */) +CommandInfo const * InsetHyperlink::findInfo(string const & /* cmdName */) { static const char * const paramnames[] = - {"name", "target", ""}; + {"name", "target", "type", ""}; static const bool isoptional[] = {true, false}; - static const CommandInfo info = {2, paramnames, isoptional}; + static const CommandInfo info = {3, paramnames, isoptional}; return &info; } @@ -76,25 +65,27 @@ docstring const InsetHyperlink::getScreenLabel(Buffer const &) const int InsetHyperlink::latex(Buffer const &, odocstream & os, OutputParams const & runparams) const { - string url = to_utf8(getParam("target")); - - string backslash = "\\"; - string braces = "{}"; + docstring url = getParam("target"); + static docstring const backslash = from_ascii("\\"); + static docstring const braces = from_ascii("{}"); + static char_type const chars_url[2] = {'%', '#'}; + static char_type const chars_name[6] = { + '&', '_', '$', '%', '#', '^'}; // The characters in chars_url[] need to be changed to a command when // they are in the url field. if (!url.empty()) { // the chars_url[] characters must be handled for both, url and href for (int k = 0; k < 2; k++) { - for (int i = 0, pos; + for (size_t i = 0, pos; (pos = url.find(chars_url[k], i)) != string::npos; i = pos + 2) { - url.replace(pos,1,backslash + chars_url[k]); + url.replace(pos, 1, backslash + chars_url[k]); } } } // end if (!url.empty()) - string name = to_utf8(getParam("name")); + docstring name = getParam("name"); // The characters in chars_name[] need to be changed to a command when // they are in the name field. @@ -102,35 +93,37 @@ int InsetHyperlink::latex(Buffer const &, odocstream & os, // handle the "\" character, but only when the following character // is not also a "\", because "\\" is valid code - for (int i = 0, pos; - (pos = name.find("\\", i)) != string::npos; + docstring const textbackslash = from_ascii("\\textbackslash{}"); + for (size_t i = 0, pos; + (pos = name.find('\\', i)) != string::npos; i = pos + 2) { - if (name[pos+1] != '\\') - name.replace(pos,1,"\\textbackslash{}"); + if (name[pos + 1] != '\\') + name.replace(pos, 1, textbackslash); } for (int k = 0; k < 6; k++) { - for (int i = 0, pos; + for (size_t i = 0, pos; (pos = name.find(chars_name[k], i)) != string::npos; i = pos + 2) { - name.replace(pos,1,backslash + chars_name[k] + braces); + name.replace(pos, 1, backslash + chars_name[k] + braces); } } // replace the tilde by the \sim character as suggested in the LaTeX FAQ // for URLs - for (int i = 0, pos; - (pos = name.find("~", i)) != string::npos; + docstring const sim = from_ascii("$\\sim$"); + for (size_t i = 0, pos; + (pos = name.find('~', i)) != string::npos; i = pos + 1) - name.replace(pos,1,"$\\sim$"); + name.replace(pos, 1, sim); } // end if (!name.empty()) if (runparams.moving_arg) os << "\\protect"; - //set the target for the name when no name is given - if (!name.empty()) - os << "\\href{" << from_utf8(url) << "}{" << from_utf8(name) << '}'; - else - os << "\\href{" << from_utf8(url) << "}{" << from_utf8(url) << '}'; + + //for the case there is no name given, the target is set as name + os << "\\href{" << getParam("type") << url << "}{" + << (name.empty()? url : name) << '}'; + return 0; } @@ -164,10 +157,9 @@ int InsetHyperlink::docbook(Buffer const &, odocstream & os, } -int InsetHyperlink::textString(Buffer const & buf, odocstream & os, - OutputParams const & op) const +void InsetHyperlink::textString(Buffer const & buf, odocstream & os) const { - return plaintext(buf, os, op); + plaintext(buf, os, OutputParams(0)); }