]> git.lyx.org Git - lyx.git/blobdiff - src/output_xhtml.cpp
Try to disambibuate the use of "xetex". Here, we actually require polyglossia.
[lyx.git] / src / output_xhtml.cpp
index 6ee977d6fc3949fe9d420b157f2482c9648648e8..d8299ce5c4511a30df32133583a5f86fde4c6aa1 100644 (file)
@@ -32,6 +32,7 @@
 #include "support/debug.h"
 #include "support/lassert.h"
 #include "support/lstrings.h"
+#include "support/textutils.h"
 
 #include <vector>
 
@@ -128,11 +129,10 @@ docstring cleanAttr(docstring const & str)
        docstring newname;
        docstring::const_iterator it = str.begin();
        docstring::const_iterator en = str.end();
-       for (; it != en; ++it)
-               if (isalnum(*it))
-                       newname += *it;
-               else
-                       newname += '_';
+       for (; it != en; ++it) {
+               char_type const c = *it;
+               newname += isAlnumASCII(c) ? c : char_type('_');
+       }
        return newname; 
 }
 
@@ -286,6 +286,20 @@ XHTMLStream & XHTMLStream::operator<<(char_type c)
 }
 
 
+XHTMLStream & XHTMLStream::operator<<(char c)
+{
+       clearTagDeque();
+       if (nextraw_) {
+               os_ << c;
+               nextraw_ = false;
+       } else {
+               string const d = html::escapeChar(c);
+               os_ << from_ascii(d);
+       }
+       return *this;
+}
+
+
 XHTMLStream & XHTMLStream::operator<<(int i)
 {
        clearTagDeque();
@@ -491,6 +505,20 @@ inline void openTag(XHTMLStream & xs, Layout const & lay)
 }
 
 
+void openTag(XHTMLStream & xs, Layout const & lay, 
+             ParagraphParameters const & params)
+{
+       // FIXME Are there other things we should handle here?
+       string const align = alignmentToCSS(params.align());
+       if (align.empty()) {
+               openTag(xs, lay);
+               return;
+       }
+       string attrs = lay.htmlattr() + " style='text-align: " + align + ";'";
+       xs << html::StartTag(lay.htmltag(), attrs);
+}
+
+
 inline void closeTag(XHTMLStream & xs, Layout const & lay)
 {
        xs << html::EndTag(lay.htmltag());
@@ -515,6 +543,20 @@ inline void openItemTag(XHTMLStream & xs, Layout const & lay)
 }
 
 
+void openItemTag(XHTMLStream & xs, Layout const & lay, 
+             ParagraphParameters const & params)
+{
+       // FIXME Are there other things we should handle here?
+       string const align = alignmentToCSS(params.align());
+       if (align.empty()) {
+               openItemTag(xs, lay);
+               return;
+       }
+       string attrs = lay.htmlattr() + " style='text-align: " + align + ";'";
+       xs << html::StartTag(lay.htmlitemtag(), attrs);
+}
+
+
 inline void closeItemTag(XHTMLStream & xs, Layout const & lay)
 {
        xs << html::EndTag(lay.htmlitemtag());
@@ -587,7 +629,7 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf,
                bool const opened = runparams.html_make_pars &&
                        (par != pbegin || !runparams.html_in_par);
                if (opened)
-                       openTag(xs, lay);
+                       openTag(xs, lay, par->params());
                docstring const deferred = 
                        par->simpleLyXHTMLOnePar(buf, xs, runparams, text.outerFont(distance(begin, par)));
 
@@ -697,7 +739,7 @@ ParagraphList::const_iterator makeEnvironmentHtml(Buffer const & buf,
                                
                                bool const labelfirst = style.htmllabelfirst();
                                if (!labelfirst)
-                                       openItemTag(xs, style);
+                                       openItemTag(xs, style, par->params());
                                
                                // label output
                                if (style.labeltype != LABEL_NO_LABEL && 
@@ -732,7 +774,7 @@ ParagraphList::const_iterator makeEnvironmentHtml(Buffer const & buf,
                                } // end label output
 
                                if (labelfirst)
-                                       openItemTag(xs, style);
+                                       openItemTag(xs, style, par->params());
 
                                par->simpleLyXHTMLOnePar(buf, xs, runparams, 
                                        text.outerFont(distance(begin, par)), sep);
@@ -795,7 +837,7 @@ void makeCommand(Buffer const & buf,
        if (!style.counter.empty())
                buf.params().documentClass().counters().step(style.counter, OutputUpdate);
 
-       openTag(xs, style);
+       openTag(xs, style, pbegin->params());
 
        // Label around sectioning number:
        // FIXME Probably need to account for LABEL_MANUAL
@@ -881,4 +923,20 @@ void xhtmlParagraphs(Text const & text,
 }
 
 
+string alignmentToCSS(LyXAlignment align) {
+       switch (align) {
+       case LYX_ALIGN_BLOCK:
+               // we are NOT going to use text-align: justify!!
+       case LYX_ALIGN_LEFT:
+               return "left";
+       case LYX_ALIGN_RIGHT:
+               return "right";
+       case LYX_ALIGN_CENTER:
+               return "center";
+       default:
+               break;
+       }
+       return "";
+}
+
 } // namespace lyx