]> git.lyx.org Git - features.git/commitdiff
Make it possible to uses non-ascii labelstring, endlabelstring and
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Sat, 11 Nov 2006 12:00:34 +0000 (12:00 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Sat, 11 Nov 2006 12:00:34 +0000 (12:00 +0000)
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

src/buffer.C
src/buffer.h
src/buffer_funcs.C
src/lyxlayout.C
src/lyxtext.h
src/support/lstrings.C
src/support/lstrings.h
src/text2.C
src/text3.C

index 5e359daab3d35068fc7fd4a05010e89a2a7ed5e0..ffd9fa74c0b8118386705c0802a5978ddd6ab8c3 100644 (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;
index f30c83d8ab592353e859cf16c40eef5704c017ee..280fc05c8d23b3eb5c279cd1e7115bb9c00f1fd0 100644 (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();
index a203b62feebb74a8ca698357807724ee767d004d..94a018aa22267c4f8943b11e879b29d48b1fc6d3 100644 (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}'
index f54d8145e93a513aadaa63313667b0fa39785eaf..b81ea994251c7bcc7da7ffffd2770320830d31bd 100644 (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
index 60948936535b18a2eb5b3e0d4035926d02576e41..4f07d21dacc4cc25599e4bd388c43d0a9cc17ec2 100644 (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 */
index 3f97e9202e65f9972e022b248b5a1c1910726315..939d48531b78e621422d5a2a2ee8bc2fad22d9e9 100644 (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));
index b0016bf8469941be67ba757c8d267c41f2181bd1..16288e6f44350e59b76ae653bbba5014bee6394f 100644 (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);
 
index 7dcc542d63aadffa2033a2153388a3b0e55db1dc..28c7cf93deb9b12647f653b1c16ff053f0549719 100644 (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);
        }
 }
index 649f9067aee8e720bb13fe604ac970a7d39c469e..20c7e7fdd5c4ae1714d30df5f31a35163b0de12c 100644 (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;