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
}
+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;
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();
#include "support/fs_extras.h"
#include "support/lyxlib.h"
-#include <iostream>
-
#include <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
if (layout->margintype == MARGIN_MANUAL) {
if (par.params().labelWidthString().empty())
- par.setLabelWidthString(layout->labelstring());
+ par.setLabelWidthString(buf.translateLabel(layout->labelstring()));
} else {
par.setLabelWidthString(docstring());
}
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
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
{
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}'
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
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 */
}
+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));
int hexToInt(lyx::docstring const & str);
+/// is \p str pure ascii?
+bool isAscii(docstring const & str);
+
///
char lowercase(char c);
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()));
}
}
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
else
params.align(align);
}
- // FIXME UNICODE
- par.setLabelWidthString(from_ascii(labelwidthstring));
+ par.setLabelWidthString(labelwidthstring);
params.noindent(noindent);
}
}
}
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 {
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;