Uwe Stöhr wrote:
Enrico wrote today:
> Now waiting for the next bug associated
> to unsigned chars and docstreams.
There's a potential problem in Hyperlink.cpp I'm not able to fix:
http://www.lyx.org/trac/changeset/21352
Could anybody please help me here? I can't get it to work when I change
to char_type, I get then countless compiler errors I don't understand.
char_type is not really needed here because the characters in the list
are ASCII and the list a const. But docstring wants char_type.
That's because you used strings instead of characters. I've changed that
and I corrected some missing whitespace at the same time. There are
other things to clean up in there, it is not clear what the different
'for' loop are doing with the strings.
At the moment the hyperlink stuff is stable, I can even use Vietnamese
double-accent characters in the dialog and it works. But would like to
have it correct and btw. learn how this is done.
Here it is, nothing really complicated, you just have to know that
mixing docstring with std::string is forbidden.
Author: younes
Date: Fri Nov 2 09:09:43 2007
New Revision: 21363
URL: http://www.lyx.org/trac/changeset/21363
Log:
use docstring wherever it makes sense.
Modified:
lyx-devel/trunk/src/insets/InsetHyperlink.cpp
Modified: lyx-devel/trunk/src/insets/InsetHyperlink.cpp
URL:
http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetHyperlink.cpp?rev=21363
==============================================================================
--- lyx-devel/trunk/src/insets/InsetHyperlink.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetHyperlink.cpp Fri Nov 2 09:09:43 2007
@@ -33,10 +33,10 @@
using std::replace;
//FIXME: these should be lists of char_type and not char
-static char const * const chars_url[2] = {"%", "#"};
+static char_type const chars_url[2] = {'%', '#'};
-static char const * const chars_name[6] = {
- "&", "_", "$", "%", "#", "^"};
+static char_type const chars_name[6] = {
+ '&', '_', '$', '%', '#', '^'};
InsetHyperlink::InsetHyperlink(InsetCommandParams const & p)
@@ -77,10 +77,10 @@
OutputParams const & runparams) const
{
//FIXME: all strings in this routine should be docstrings
- string url = to_utf8(getParam("target"));
+ docstring url = getParam("target");
- string backslash = "\\";
- string braces = "{}";
+ docstring backslash = from_ascii("\\");
+ docstring braces = from_ascii("{}");
// The characters in chars_url[] need to be changed to a command when
// they are in the url field.
@@ -90,12 +90,12 @@
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.
@@ -103,40 +103,42 @@
// handle the "\" character, but only when the following
character
// is not also a "\", because "\\" is valid code
+ docstring textbackslash = from_ascii("\\textbackslash{}");
for (size_t i = 0, pos;
- (pos = name.find("\\", i)) != string::npos;
+ (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 (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
+ docstring sim = from_ascii("$\\sim$");
for (int i = 0, pos;
- (pos = name.find("~", i)) != string::npos;
+ (pos = name.find('~', i)) != string::npos;
i = pos + 1)
- name.replace(pos,1,"$\\sim$");
+ name.replace(pos, 1, sim);
} // end if (!name.empty())
//for the case there is no name given, the target is set as name
- string urlname = url;
+ docstring urlname = url;
// set the hyperlink type
- url = to_utf8(getParam("type")) + url;
+ url += getParam("type");
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) <<
'}';
+ os << "\\href{" << url << "}{" << name << '}';
else
- os << "\\href{" << from_utf8(url) << "}{" << from_utf8(urlname)
<< '}';
+ os << "\\href{" << url << "}{" << urlname << '}';
return 0;
}
Abdel.