Make it possible to uses non-ascii labelstring, endlabelstring and

labelstring_appendix in layout files

	* src/text2.C
	(LyXText::setLayout): Translate labelwidthstring for paragraph
	(LyXText::getStringToIndex): labelwidthstring is now a docstring

	* src/buffer.[Ch]
	(Buffer::translateLabel): New method for translating a label if it
	is not already translated by the user in the layout file

	* src/lyxtext.h
	(setParagraph): labelwidthstring is now a docstring

	* src/support/lstrings.[Ch]
	(bool isAscii): New utility function: Determine whether a docstring
	contains only pure ascii

	* src/text3.C
	(LyXText::dispatch): setParagraph() now takes a docstring

	* src/lyxlayout.C
	(LyXLayout::read): Don't use from_ascii when reading labelstring_,
	endlabelstring_ and labelstring_appendix_

	* src/buffer_funcs.C
	(setLabel): labelwidthstring is now a docstring
	(setLabel): Use Buffer::translateLabel instead of Buffer::B_ to
	translate labels
	(expandLabel): ditto


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15855 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Georg Baum 2006-11-11 12:00:34 +00:00
parent 1354f4b6d6
commit 7e7d28a0ca
9 changed files with 43 additions and 23 deletions

View File

@ -1445,6 +1445,18 @@ docstring const Buffer::B_(string const & l10n) const
}
docstring const Buffer::translateLabel(docstring const & label) const
{
if (support::isAscii(label))
// Probably standard layout, try to translate
return B_(to_ascii(label));
else
// This must be a user defined layout. We can not translate
// this, since gettext accepts only ascii keys.
return label;
}
bool Buffer::isClean() const
{
return pimpl_->lyx_clean;

View File

@ -170,6 +170,8 @@ public:
Language const * getLanguage() const;
/// get l10n translated to the buffers language
docstring const B_(std::string const & l10n) const;
/// translate \p label to the buffer language if possible
docstring const translateLabel(docstring const & label) const;
///
int runChktex();

View File

@ -43,8 +43,6 @@
#include "support/fs_extras.h"
#include "support/lyxlib.h"
#include <iostream>
#include <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
@ -376,7 +374,7 @@ void setLabel(Buffer const & buf, ParIterator & it)
if (layout->margintype == MARGIN_MANUAL) {
if (par.params().labelWidthString().empty())
par.setLabelWidthString(layout->labelstring());
par.setLabelWidthString(buf.translateLabel(layout->labelstring()));
} else {
par.setLabelWidthString(docstring());
}
@ -468,8 +466,7 @@ void setLabel(Buffer const & buf, ParIterator & it)
int number = counters.value(from_ascii("bibitem"));
if (par.bibitem())
par.bibitem()->setCounter(number);
// FIXME UNICODE
par.params().labelString(buf.B_(to_ascii(layout->labelstring())));
par.params().labelString(buf.translateLabel(layout->labelstring()));
// In biblio should't be following counters but...
} else if (layout->labeltype == LABEL_SENSITIVE) {
// Search for the first float or wrap inset in the iterator
@ -495,16 +492,14 @@ void setLabel(Buffer const & buf, ParIterator & it)
s = bformat(_("%1$s #:"), buf.B_(fl.name()));
} else {
// par->SetLayout(0);
// FIXME UNICODE
s = buf.B_(to_ascii(layout->labelstring()));
s = buf.translateLabel(layout->labelstring());
}
par.params().labelString(s);
} else if (layout->labeltype == LABEL_NO_LABEL)
par.params().labelString(docstring());
else
// FIXME UNICODE
par.params().labelString(buf.B_(to_ascii(layout->labelstring())));
par.params().labelString(buf.translateLabel(layout->labelstring()));
}
} // anon namespace
@ -596,9 +591,9 @@ docstring expandLabel(Buffer const & buf,
{
LyXTextClass const & tclass = buf.params().getLyXTextClass();
// FIXME UNICODE
docstring fmt = buf.B_(to_ascii(appendix ? layout->labelstring_appendix()
: layout->labelstring()));
docstring fmt = buf.translateLabel(appendix ?
layout->labelstring_appendix() :
layout->labelstring());
// handle 'inherited level parts' in 'fmt',
// i.e. the stuff between '@' in '@Section@.\arabic{subsection}'

View File

@ -451,17 +451,17 @@ bool LyXLayout::read(LyXLex & lexrc, LyXTextClass const & tclass)
case LT_LABELSTRING: // label string definition
if (lexrc.next())
labelstring_ = lyx::from_ascii(trim(lexrc.getString()));
labelstring_ = trim(lexrc.getDocString());
break;
case LT_ENDLABELSTRING: // endlabel string definition
if (lexrc.next())
endlabelstring_ = lyx::from_ascii(trim(lexrc.getString()));
endlabelstring_ = trim(lexrc.getDocString());
break;
case LT_LABELSTRING_APPENDIX: // label string appendix definition
if (lexrc.next())
labelstring_appendix_ = lyx::from_ascii(trim(lexrc.getString()));
labelstring_appendix_ = trim(lexrc.getDocString());
break;
case LT_LABELCOUNTER: // name of counter to use

View File

@ -260,7 +260,7 @@ public:
void setParagraph(LCursor & cur,
Spacing const & spacing,
LyXAlignment align,
std::string const & labelwidthstring,
docstring const & labelwidthstring,
bool noindent);
/* these things are for search and replace */

View File

@ -279,6 +279,16 @@ int hexToInt(docstring const & str)
}
bool isAscii(docstring const & str)
{
int const len = str.length();
for (int i = 0; i < len; ++i)
if (str[i] >= 0x80)
return false;
return true;
}
char lowercase(char c)
{
return char(tolower(c));

View File

@ -72,6 +72,9 @@ bool isHex(lyx::docstring const & str);
int hexToInt(lyx::docstring const & str);
/// is \p str pure ascii?
bool isAscii(docstring const & str);
///
char lowercase(char c);

View File

@ -352,7 +352,7 @@ void LyXText::setLayout(Buffer const & buffer, pit_type start, pit_type end,
for (pit_type pit = start; pit != end; ++pit) {
pars_[pit].applyLayout(lyxlayout);
if (lyxlayout->margintype == MARGIN_MANUAL)
pars_[pit].setLabelWidthString(lyxlayout->labelstring());
pars_[pit].setLabelWidthString(buffer.translateLabel(lyxlayout->labelstring()));
}
}
@ -604,7 +604,7 @@ docstring LyXText::getStringToIndex(LCursor const & cur)
void LyXText::setParagraph(LCursor & cur,
Spacing const & spacing, LyXAlignment align,
string const & labelwidthstring, bool noindent)
docstring const & labelwidthstring, bool noindent)
{
BOOST_ASSERT(cur.text());
// make sure that the depth behind the selection are restored, too
@ -628,8 +628,7 @@ void LyXText::setParagraph(LCursor & cur,
else
params.align(align);
}
// FIXME UNICODE
par.setLabelWidthString(from_ascii(labelwidthstring));
par.setLabelWidthString(labelwidthstring);
params.noindent(noindent);
}
}

View File

@ -1411,7 +1411,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
}
setLayout(cur, tclass.defaultLayoutName());
setParagraph(cur, Spacing(), LYX_ALIGN_LAYOUT, string(), 0);
setParagraph(cur, Spacing(), LYX_ALIGN_LAYOUT, docstring(), 0);
insertInset(cur, new InsetFloatList(to_utf8(cmd.argument())));
cur.posRight();
} else {
@ -1455,11 +1455,10 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
lex.setStream(is);
ParagraphParameters params;
params.read(lex);
// FIXME UNICODE
setParagraph(cur,
params.spacing(),
params.align(),
to_ascii(params.labelWidthString()),
params.labelWidthString(),
params.noindent());
cur.message(_("Paragraph layout set"));
break;