]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetquotes.C
Don't remove cell selections after fontchange.
[lyx.git] / src / insets / insetquotes.C
index 6ae646b0bb1867daede4e22284cbe4726c65fdec..d4e1541ad8721a8bf7ee7bd98c4189d8c000f664 100644 (file)
 #endif
 
 #include "insetquotes.h"
-#include "support/lyxlib.h"
-#include "debug.h"
-#include "lyxfont.h"
-#include "lyxrc.h"
-#include "buffer.h"
-#include "LaTeXFeatures.h"
+
+#include "support/LAssert.h"
 #include "support/lstrings.h"
+#include "BufferView.h"
+#include "LaTeXFeatures.h"
 #include "Painter.h"
+#include "buffer.h"
+#include "debug.h"
 #include "font.h"
 #include "language.h"
-#include "BufferView.h"
+#include "lyxfont.h"
+#include "lyxrc.h"
+#include "paragraph.h"
 
 using std::ostream;
 using std::endl;
@@ -85,7 +87,7 @@ InsetQuotes::InsetQuotes(char c, BufferParams const & params)
 {
        // Decide whether left or right 
        switch (c) {
-       case ' ': case '(': case '{': case '[': case '-': case ':':
+       case ' ': case '(': 
        case Paragraph::META_HFILL:
        case Paragraph::META_NEWLINE: 
                side_ = LeftQ;   // left quote 
@@ -153,11 +155,22 @@ string const InsetQuotes::dispString(Language const * loclang) const
                disp += disp;
 
        if (lyxrc.font_norm_type == LyXRC::ISO_8859_1
-           || lyxrc.font_norm_type == LyXRC::ISO_8859_15)
+           || lyxrc.font_norm_type == LyXRC::ISO_8859_3
+           || lyxrc.font_norm_type == LyXRC::ISO_8859_4
+           || lyxrc.font_norm_type == LyXRC::ISO_8859_9) {
+               if (disp == "'")
+                       disp = "´";
+               else if (disp == "''")
+                       disp = "´´";
+       }
+       if (lyxrc.font_norm_type == LyXRC::ISO_8859_1
+           || lyxrc.font_norm_type == LyXRC::ISO_8859_9
+           || lyxrc.font_norm_type == LyXRC::ISO_8859_15) {
                if (disp == "<<")
                        disp = '«';
                else if (disp == ">>")
                        disp = '»';
+       }
 
        // in french, spaces are added inside double quotes
        if (times_ == DoubleQ && prefixIs(loclang->code(), "fr")) {
@@ -201,15 +214,17 @@ int InsetQuotes::width(BufferView *, LyXFont const & font) const
 }
 
 
+#if 0
 LyXFont const InsetQuotes::convertFont(LyXFont const & f) const
 {
+#if 1
+       return f;
+#else
        LyXFont font(f);
-#ifndef NO_LATEX
-       // quotes-insets cannot be latex of any kind
-       font.setLatex(LyXFont::OFF);
-#endif
        return font;
+#endif
 }
+#endif
 
 
 void InsetQuotes::draw(BufferView * bv, LyXFont const & font,
@@ -235,33 +250,37 @@ void InsetQuotes::write(Buffer const *, ostream & os) const
 void InsetQuotes::read(Buffer const *, LyXLex & lex)
 {
        lex.nextToken();
-       parseString(lex.GetString());
+       parseString(lex.getString());
        lex.next();
-       if (lex.GetString() != "\\end_inset")
+       if (lex.getString() != "\\end_inset") {
                lex.printError("Missing \\end_inset at this point");
+       }
 }
 
 
 extern bool use_babel;
 
 int InsetQuotes::latex(Buffer const * buf, ostream & os,
-                      bool /*fragile*/, bool) const
+                      bool /*fragile*/, bool /* free_spc */) const
 {
-#ifdef WITH_WARNINGS
-#warning How do we get the local language here??
-#endif
-       string const doclang = buf->getLanguage()->babel();
+       // How do we get the local language here??
+       lyx::pos_type curr_pos = parOwner()->getPositionOfInset(this);
+       lyx::Assert(curr_pos != -1);
+       string const curr_lang =
+               parOwner()->getFont(buf->params,
+                                   curr_pos).language()->babel();
+
        const int quoteind = quote_index[side_][language_];
        string qstr;
        
        if (language_ == FrenchQ && times_ == DoubleQ
-           && doclang == "frenchb") {
+           && curr_lang == "frenchb") {
                if (side_ == LeftQ) 
                        qstr = "\\og "; //the spaces are important here
                else 
                        qstr = " \\fg{}"; //and here
        } else if (language_ == FrenchQ && times_ == DoubleQ
-                  && doclang == "french") {
+                  && curr_lang == "french") {
                if (side_ == LeftQ) 
                        qstr = "<< "; //the spaces are important here
                else 
@@ -301,7 +320,7 @@ int InsetQuotes::linuxdoc(Buffer const *, ostream & os) const
 }
 
 
-int InsetQuotes::docBook(Buffer const *, ostream & os) const
+int InsetQuotes::docbook(Buffer const *, ostream & os) const
 {
        if (times_ == DoubleQ) {
                if (side_ == LeftQ)
@@ -330,16 +349,16 @@ void InsetQuotes::validate(LaTeXFeatures & features) const
            && lyxrc.fontenc != "T1") {
                if (times_ == SingleQ) 
                        switch (type) {
-                       case ',': features.quotesinglbase = true; break;
-                       case '<': features.guilsinglleft = true; break;
-                       case '>': features.guilsinglright = true; break;
+                       case ',': features.require("quotesinglbase");  break;
+                       case '<': features.require("guilsinglleft");  break;
+                       case '>': features.require("guilsinglright"); break;
                        default: break;
                        }
                else 
                        switch (type) {
-                       case ',': features.quotedblbase = true; break;
-                       case '<': features.guillemotleft = true; break;
-                       case '>': features.guillemotright = true; break;
+                       case ',': features.require("quotedblbase");   break;
+                       case '<': features.require("guillemotleft");  break;
+                       case '>': features.require("guillemotright"); break;
                        default: break;
                        }
        }