From 59fefa0759d0330d7db8066f5a1197f4f1dfc5a8 Mon Sep 17 00:00:00 2001 From: Martin Vermeer Date: Wed, 12 Nov 2003 14:38:26 +0000 Subject: [PATCH] The Character Style and XML short element inset. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8078 a592a061-630c-0410-9148-cb99ea01b6c8 --- lib/ChangeLog | 9 + lib/examples/docbook_article.lyx | 478 +++++++++++++++++++++++-------- lib/layouts/db_stdclass.inc | 49 ++++ lib/layouts/stdclass.inc | 15 + lib/ui/stdmenus.ui | 5 + po/POTFILES.in | 2 + src/ChangeLog | 16 ++ src/LaTeXFeatures.C | 7 + src/LyXAction.C | 1 + src/MenuBackend.C | 32 +++ src/MenuBackend.h | 3 + src/dispatchresult.h | 2 +- src/factory.C | 16 +- src/insets/ChangeLog | 8 + src/insets/Makefile.am | 2 + src/insets/inset.h | 4 +- src/insets/insetcharstyle.C | 215 ++++++++++++++ src/insets/insetcharstyle.h | 99 +++++++ src/lfuns.h | 1 + src/lyxfunc.C | 5 + src/lyxtextclass.C | 100 +++++++ src/lyxtextclass.h | 25 +- src/text3.C | 1 + 23 files changed, 971 insertions(+), 124 deletions(-) create mode 100644 src/insets/insetcharstyle.C create mode 100644 src/insets/insetcharstyle.h diff --git a/lib/ChangeLog b/lib/ChangeLog index 8d40f3d565..bbcc57a5f7 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,12 @@ +2003-11-12 Martin Vermeer + + * lib/examples/docbook_article.lyx: + * lib/layouts/db_stdclass.inc: + * lib/layouts/stdclass.inc: + * lib/ui/stdmenus.ui: The Character Style /XML short + element patch. + + 2003-11-07 Jean-Marc Lasgouttes * Makefile.am (install-xfonts): diff --git a/lib/examples/docbook_article.lyx b/lib/examples/docbook_article.lyx index 2699fcee8f..7fb6189178 100644 --- a/lib/examples/docbook_article.lyx +++ b/lib/examples/docbook_article.lyx @@ -1,12 +1,12 @@ -#LyX 1.3 created this file. For more info see http://www.lyx.org/ -\lyxformat 221 +#LyX 1.4.0cvs created this file. For more info see http://www.lyx.org/ +\lyxformat 225 \textclass docbook \language english \inputencoding default \fontscheme default \graphics default \paperfontsize default -\spacing single +\spacing single \papersize Default \paperpackage a4 \use_geometry 0 @@ -23,83 +23,140 @@ \papercolumns 1 \papersides 1 \paperpagestyle default +\tracking_changes 0 +\end_header -\layout SGML +\begin_layout SGML \begin_inset Note collapsed true -\layout Standard +\begin_layout Standard Here goes the information about the article: -\layout Standard +\end_layout + +\begin_layout Standard * title -\layout Standard +\end_layout + +\begin_layout Standard * date -\layout Standard +\end_layout + +\begin_layout Standard * author -\layout Standard +\end_layout + +\begin_layout Standard + first name -\layout Standard +\end_layout + +\begin_layout Standard + last name -\layout Standard +\end_layout + +\begin_layout Standard * abstract +\end_layout + \end_inset -\layout Title +\end_layout + +\begin_layout Title \added_space_top vfill \added_space_bottom vfill Docbook with LyX -\layout Date +\end_layout + +\begin_layout Date 24 September 1999 -\layout Author +\end_layout + +\begin_layout Author + +\end_layout \begin_deeper -\layout SGML +\begin_layout SGML \align center -\size normal - \begin_inset Note collapsed true -\layout Standard +\begin_layout Standard The author name is always composed of: -\layout Standard +\end_layout + +\begin_layout Standard * first name -\layout Standard +\end_layout + +\begin_layout Standard * surname -\layout Standard +\end_layout + +\begin_layout Standard It is always possible to have more than one author. +\end_layout + \end_inset -\layout FirstName +\end_layout + +\end_deeper +\begin_layout Author + + +\begin_inset FirstName +collapsed true + +\begin_layout Standard Jose' -\layout Surname +\end_layout + +\end_inset + + +\begin_inset Surname +collapsed true + +\begin_layout Standard Matos -\end_deeper -\layout Abstract +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Abstract This is a small illustration of lyx's features using DocBook. -\layout Abstract +\end_layout + +\begin_layout Abstract The abstract can span several paragraphs. -\layout Section +\end_layout + +\begin_layout Section \begin_inset LatexCommand \label{first-section} @@ -107,20 +164,30 @@ The abstract can span several paragraphs. \end_inset Introduction -\layout Standard +\end_layout + +\begin_layout Standard This file ilustrates the generation of docbook documents with LyX. -\layout Standard +\end_layout + +\begin_layout Standard This will improve as soon as new features are available. -\layout Section +\end_layout + +\begin_layout Section Standard layouts -\layout Standard +\end_layout + +\begin_layout Standard One of the goals is the support, as much as possible, of layouts used in other textclass, for compatibility purposes. -\layout Standard +\end_layout + +\begin_layout Standard Remember that this is work in progress, I would like to hear any comments, good or @@ -132,65 +199,103 @@ bad \end_inset . -\layout Subsection +\end_layout + +\begin_layout Subsection Lists -\layout Standard +\end_layout + +\begin_layout Standard This is an example with several nested lists. -\layout Itemize +\end_layout + +\begin_layout Itemize item 1 +\end_layout + \begin_deeper -\layout Enumerate +\begin_layout Enumerate item 2 -\layout Description +\end_layout + +\begin_layout Description new item +\end_layout + \begin_deeper -\layout Enumerate +\begin_layout Enumerate collection +\end_layout + \end_deeper \end_deeper -\layout Itemize +\begin_layout Itemize new set -\layout Subsection +\end_layout + +\begin_layout Subsection Code -\layout Standard +\end_layout + +\begin_layout Standard Required steps to have a running lyx. -\layout Quotation +\end_layout + +\begin_layout Quotation Be carefull with your own code. -\layout Quotation +\end_layout + +\begin_layout Quotation The debugger. -\layout Code +\end_layout + +\begin_layout Code cat > env.out -\layout Code +\end_layout + +\begin_layout Code tar xvzf lyx.tgz -\layout Code +\end_layout + +\begin_layout Code cd lyx-1_0_x -\layout Code +\end_layout + +\begin_layout Code ./configure -\layout Code +\end_layout + +\begin_layout Code make -\layout Code +\end_layout + +\begin_layout Code make install -\layout Subsection +\end_layout + +\begin_layout Subsection Labels -\layout Standard +\end_layout + +\begin_layout Standard If a label is the first element in any layout, that label will be merged with that element. @@ -200,41 +305,56 @@ If a label is the first element in any layout, that label will be merged \end_inset . -\layout Subsection +\end_layout + +\begin_layout Subsection Fonts -\layout Standard +\end_layout + +\begin_layout Standard The only fonts supported are \emph on Emphasis \emph default and -\begin_inset ERT -status Collapsed +\begin_inset Literal +collapsed true + +\begin_layout Standard + +SGML +\end_layout -\layout Standard -SGML \end_inset . -\layout Subsection +\end_layout + +\begin_layout Subsection Figures -\layout Standard +\end_layout + +\begin_layout Standard One of the major changes in the docbook when compared with the linuxdoc support are the figures support. LyX only allows to view eps figures. So you should have one of these if you want to take advantage of this feature. -\layout Standard +\end_layout + +\begin_layout Standard Notice that when the docbook code is exported the filename extension is stripped. This enables that when the several backends are processed in sgmltools, the corresponding extensions are added. The default extension are eps for the print and gif for the html backend. -\layout Standard +\end_layout + +\begin_layout Standard \begin_inset Float figure @@ -242,7 +362,7 @@ placement htbp wide false collapsed false -\layout Standard +\begin_layout Standard \begin_inset Graphics @@ -252,19 +372,28 @@ collapsed false height 3cm rotateAngle 45 rotateOrigin center + \end_inset -\layout Caption +\end_layout + +\begin_layout Caption Nice platypus +\end_layout + \end_inset -\layout Standard +\end_layout + +\begin_layout Standard Wide figures are treated as normal figures. -\layout Standard +\end_layout + +\begin_layout Standard \begin_inset Float figure @@ -272,7 +401,7 @@ placement htbp wide true collapsed false -\layout Standard +\begin_layout Standard \begin_inset Graphics @@ -282,20 +411,29 @@ collapsed false height 3cm rotateAngle 45 rotateOrigin center + \end_inset -\layout Caption +\end_layout + +\begin_layout Caption long, very long... :-) +\end_layout + \end_inset -\layout Subsection +\end_layout + +\begin_layout Subsection Tables -\layout Standard +\end_layout + +\begin_layout Standard There is also basic support for tables. \begin_inset Float table @@ -303,10 +441,10 @@ placement htbp wide false collapsed false -\layout Standard +\begin_layout Standard \added_space_top 0.3cm \added_space_bottom 0.3cm \align center -\begin_inset Tabular +\begin_inset Tabular @@ -318,40 +456,50 @@ collapsed false \begin_inset Text -\layout Standard +\begin_layout Standard + +\end_layout \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard Software 1 +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard Software 2 +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard Software 3 +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard Software 4 +\end_layout + \end_inset @@ -359,39 +507,49 @@ Software 4 \begin_inset Text -\layout Standard +\begin_layout Standard Plataform 1 +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 25 MB +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 10 MB +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 34 MB +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard + +\end_layout \end_inset @@ -400,40 +558,50 @@ Plataform 1 \begin_inset Text -\layout Standard +\begin_layout Standard Plataform 2 +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard + +\end_layout \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 12 MB +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 30 MB +\end_layout + \end_inset \begin_inset Text -\layout Standard +\begin_layout Standard 35 MB +\end_layout + \end_inset @@ -442,19 +610,29 @@ Plataform 2 \end_inset -\layout Caption +\end_layout + +\begin_layout Caption Nice Formal Table +\end_layout + \end_inset -\layout Standard +\end_layout + +\begin_layout Standard As it happens with the figures the wide tables are treated as normal tables. -\layout Subsection +\end_layout + +\begin_layout Subsection Margins -\layout Standard +\end_layout + +\begin_layout Standard There are some restrictions when using margins. For further information on docbook allowed syntax consult the @@ -463,128 +641,188 @@ There are some restrictions when using margins. \end_inset . -\layout Quotation +\end_layout + +\begin_layout Quotation It is also possible to insert margin notes inside some environments. +\end_layout + \begin_deeper -\layout SGML +\begin_layout SGML \begin_inset Marginal collapsed true -\layout Standard +\begin_layout Standard margin note -\layout Standard +\end_layout + +\begin_layout Standard second par -> margin note -\layout Standard +\end_layout + +\begin_layout Standard third par -> margin note +\end_layout + \end_inset +\end_layout + \end_deeper -\layout Quotation +\begin_layout Quotation Notice that the previous layout is at level 1 \begin_inset Foot collapsed true -\layout Standard +\begin_layout Standard This comes from a docbook restriction. Sidebar can only appear inside "MSGTEXT", "CAUTION", "IMPORTANT", "NOTE", "TIP", "WARNING", "BLOCKQUOTE". -\layout Standard +\end_layout + +\begin_layout Standard These environments are easily added to the docbook layout. +\end_layout + \end_inset and so is the follow: +\end_layout + \begin_deeper -\layout SGML +\begin_layout SGML \begin_inset Marginal collapsed true -\layout Standard +\begin_layout Standard too marginal ;-) +\end_layout + \end_inset +\end_layout + \end_deeper -\layout Section +\begin_layout Section The road map -\layout Standard +\end_layout + +\begin_layout Standard This is a small list of the remaining tasks: -\layout Itemize +\end_layout + +\begin_layout Itemize Expand the number of layouts +\end_layout + \begin_deeper -\layout Itemize +\begin_layout Itemize example -\layout Itemize +\end_layout + +\begin_layout Itemize note -\layout Itemize +\end_layout + +\begin_layout Itemize warning -\layout Itemize +\end_layout + +\begin_layout Itemize tip -\layout Itemize +\end_layout + +\begin_layout Itemize caution -\layout Itemize +\end_layout + +\begin_layout Itemize important +\end_layout + \end_deeper -\layout Itemize +\begin_layout Itemize Compose other layout files, besides article +\end_layout + \begin_deeper -\layout Enumerate +\begin_layout Enumerate book -\layout Enumerate +\end_layout + +\begin_layout Enumerate set (very unlikely) \begin_inset Foot collapsed true -\layout Standard +\begin_layout Standard I do not expect lyx to deal with colection of books, for now! +\end_layout + \end_inset -\layout Enumerate +\end_layout + +\begin_layout Enumerate refentry +\end_layout + \end_deeper -\layout Itemize +\begin_layout Itemize goodies +\end_layout + \begin_deeper -\layout Enumerate +\begin_layout Enumerate including other lyx files -\layout Enumerate +\end_layout + +\begin_layout Enumerate more advanced tables support +\end_layout + \end_deeper -\layout Itemize +\begin_layout Itemize better documentation -\layout Standard +\end_layout + +\begin_layout Standard That's all. ;-) -\the_end +\end_layout + +\end_document diff --git a/lib/layouts/db_stdclass.inc b/lib/layouts/db_stdclass.inc index ee7bb7a27f..154875cde8 100644 --- a/lib/layouts/db_stdclass.inc +++ b/lib/layouts/db_stdclass.inc @@ -26,6 +26,55 @@ Style Standard End +CharStyle Filename + LatexType Command + LatexName filename + Font + Family Typewriter + EndFont + LabelFont + Shape Italic + Color red + EndFont +End + +CharStyle FirstName + LatexType Command + LatexName firstname + Font + Shape SmallCaps + EndFont + LabelFont + Shape Italic + Color red + EndFont +End + +CharStyle Surname + LatexType Command + LatexName surname + Font + Shape SmallCaps + EndFont + LabelFont + Shape Italic + Color red + EndFont +End + +CharStyle Literal + LatexType Command + LatexName literal + Font + Family Typewriter + EndFont + LabelFont + Shape Italic + Color red + EndFont +End + + Input db_stdlists.inc Input db_stdsections.inc Input db_stdstarsections.inc diff --git a/lib/layouts/stdclass.inc b/lib/layouts/stdclass.inc index 937a7e1ecf..784274041f 100644 --- a/lib/layouts/stdclass.inc +++ b/lib/layouts/stdclass.inc @@ -35,6 +35,21 @@ Style Standard LabelType No_Label End +CharStyle Noun + LatexType Command + LatexName noun + Font + Shape SmallCaps + EndFont + LabelFont + Shape SmallCaps + Color blue + EndFont + Preamble + \newcommand{\noun}[1]{\textsc{#1}} + EndPreamble +End + Input stdlists.inc Input stdsections.inc diff --git a/lib/ui/stdmenus.ui b/lib/ui/stdmenus.ui index b6c48e554d..866c0c3167 100644 --- a/lib/ui/stdmenus.ui +++ b/lib/ui/stdmenus.ui @@ -231,6 +231,7 @@ Menuset Submenu "Note|N" "insert_note" Submenu "Box" "insert_box" Submenu "Branch|B" "branches" + Submenu "Character Style" "charstyle" Submenu "File|e" "insert_file" Separator Item "Citation Reference...|C" "dialog-show-new-inset citation" @@ -354,6 +355,10 @@ Menuset Branches End + Menu "charstyle" + CharStyles + End + # # DOCUMENT MENU # diff --git a/po/POTFILES.in b/po/POTFILES.in index 3df5f7ae00..41224e413c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -151,6 +151,7 @@ src/insets/insetbibtex.C src/insets/insetbox.C src/insets/insetbranch.C src/insets/insetcaption.C +src/insets/insetelement.C src/insets/insetenv.C src/insets/insetert.C src/insets/insetexternal.C @@ -198,6 +199,7 @@ src/output_plaintext.C src/paragraph.C src/paragraph_funcs.C src/rowpainter.C +src/support/path_defines.C src/text.C src/text2.C src/text3.C diff --git a/src/ChangeLog b/src/ChangeLog index 198b685158..790fba51b3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,19 @@ + +2003-11-12 Martin Vermeer + + * src/LaTeXFeatures.C: + * src/LyXAction.C: + * src/MenuBackend.C: + * src/MenuBackend.h: + * src/dispatchresult.h: + * src/factory.C: + * src/lfuns.h: + * src/lyxfunc.C: + * src/lyxtextclass.C: + * src/lyxtextclass.h: + * src/text3.C: The Character Style /XML short + element patch. + 2003-11-11 Martin Vermeer * text3.C: diff --git a/src/LaTeXFeatures.C b/src/LaTeXFeatures.C index bd891b5b76..85754e12d0 100644 --- a/src/LaTeXFeatures.C +++ b/src/LaTeXFeatures.C @@ -409,6 +409,13 @@ string const LaTeXFeatures::getTClassPreamble() const tcpreamble << tclass[*cit]->preamble(); } + CharStyles::iterator cs = tclass.charstyles().begin(); + CharStyles::iterator csend = tclass.charstyles().end(); + for (; cs != csend; ++cs) { + if (isRequired(cs->name)) + tcpreamble << cs->preamble; + } + return tcpreamble.str(); } diff --git a/src/LyXAction.C b/src/LyXAction.C index ae7a2b5337..5979bea6d2 100644 --- a/src/LyXAction.C +++ b/src/LyXAction.C @@ -226,6 +226,7 @@ void LyXAction::init() { LFUN_META_FAKE, "meta-prefix", NoBuffer }, { LFUN_INSET_MINIPAGE, "minipage-insert", Noop }, { LFUN_INSERT_BRANCH, "branch-insert", Noop }, + { LFUN_INSERT_CHARSTYLE, "charstyle-insert", Noop }, { LFUN_INSERT_NOTE, "note-insert", Noop }, { LFUN_INSERT_BOX, "box-insert", Noop }, { LFUN_GOTONOTE, "note-next", ReadOnly }, diff --git a/src/MenuBackend.C b/src/MenuBackend.C index 40c6151121..db9dbddf89 100644 --- a/src/MenuBackend.C +++ b/src/MenuBackend.C @@ -191,6 +191,7 @@ Menu & Menu::read(LyXLex & lex) md_item = 1, md_branches, md_documents, + md_charstyles, md_endmenu, md_exportformats, md_importformats, @@ -210,6 +211,7 @@ Menu & Menu::read(LyXLex & lex) struct keyword_item menutags[md_last - 1] = { { "branches", md_branches }, + { "charstyles", md_charstyles }, { "documents", md_documents }, { "end", md_endmenu }, { "exportformats", md_exportformats }, @@ -259,6 +261,10 @@ Menu & Menu::read(LyXLex & lex) add(MenuItem(MenuItem::Lastfiles)); break; + case md_charstyles: + add(MenuItem(MenuItem::CharStyles)); + break; + case md_documents: add(MenuItem(MenuItem::Documents)); break; @@ -524,6 +530,28 @@ void expandFloatInsert(Menu & tomenu, LyXView const * view) } +void expandCharStyleInsert(Menu & tomenu, LyXView const * view) +{ + if (!view->buffer()) { + tomenu.add(MenuItem(MenuItem::Command, + _("No Documents Open!"), + FuncRequest(LFUN_NOACTION)), + view); + return; + } + CharStyles & charstyles = + view->buffer()->params().getLyXTextClass().charstyles(); + CharStyles::iterator cit = charstyles.begin(); + CharStyles::iterator end = charstyles.end(); + for (; cit != end; ++cit) { + string const label = cit->name; + tomenu.add(MenuItem(MenuItem::Command, label, + FuncRequest(LFUN_INSERT_CHARSTYLE, + cit->name)), view); + } +} + + Menu::size_type const max_number_of_items = 25; void expandToc2(Menu & tomenu, @@ -691,6 +719,10 @@ void MenuBackend::expand(Menu const & frommenu, Menu & tomenu, expandFormats(cit->kind(), tomenu, view); break; + case MenuItem::CharStyles: + expandCharStyleInsert(tomenu, view); + break; + case MenuItem::FloatListInsert: expandFloatListInsert(tomenu, view); break; diff --git a/src/MenuBackend.h b/src/MenuBackend.h index 6234d3a874..a8497f8e1c 100644 --- a/src/MenuBackend.h +++ b/src/MenuBackend.h @@ -55,6 +55,9 @@ public: /** This is a list of importable formats typically for the File->Export menu. */ ImportFormats, + /** This is the list of elements available + * for insertion into document. */ + CharStyles, /** This is the list of floats that we can insert a list for. */ FloatListInsert, diff --git a/src/dispatchresult.h b/src/dispatchresult.h index 16ed98e9d6..70760b33d0 100644 --- a/src/dispatchresult.h +++ b/src/dispatchresult.h @@ -27,7 +27,7 @@ the inset. FINISHED_POP = FINISHED, but move the cursor out the inset (possibly more than one level) - UNDISPATCHED = the action was not catched, it should be + UNDISPATCHED = the action was not caught, it should be dispatched by lower level insets */ enum dispatch_result_t { diff --git a/src/factory.C b/src/factory.C index 1fbfd642c2..ec992ba605 100644 --- a/src/factory.C +++ b/src/factory.C @@ -26,6 +26,7 @@ #include "insets/insetbibtex.h" #include "insets/insetcaption.h" #include "insets/insetcite.h" +#include "insets/insetcharstyle.h" #include "insets/insetenv.h" #include "insets/insetert.h" #include "insets/insetexternal.h" @@ -86,6 +87,12 @@ InsetOld * createInset(FuncRequest const & cmd) case LFUN_INSET_MINIPAGE: return new InsetMinipage(params); + case LFUN_INSERT_CHARSTYLE: { + string s = cmd.getArg(0); + CharStyles::iterator found_cs = params.getLyXTextClass().charstyle(s); + return new InsetCharStyle(params, found_cs); + } + case LFUN_INSERT_NOTE: { string arg = cmd.getArg(0); if (arg.empty()) @@ -335,8 +342,13 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) auto_ptr inset; + LyXTextClass tclass = buf.params().getLyXTextClass(); + lex.next(); - string const tmptok = lex.getString(); + string tmptok = lex.getString(); + CharStyles::iterator found_cs = tclass.charstyle(tmptok); + if (found_cs != tclass.charstyles().end()) + tmptok = "CharStyle"; // test the different insets if (tmptok == "LatexCommand") { @@ -408,6 +420,8 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) || tmptok == "Shadowbox" || tmptok == "Doublebox" || tmptok == "Ovalbox" || tmptok == "Frameless") { inset.reset(new InsetBox(buf.params(), tmptok)); + } else if (tmptok == "CharStyle") { + inset.reset(new InsetCharStyle(buf.params(), found_cs)); } else if (tmptok == "Branch") { inset.reset(new InsetBranch(buf.params(), string())); } else if (tmptok == "Include") { diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index d4cf4786b7..d3c92e409b 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,11 @@ +2003-11-12 Martin Vermeer + + * src/insets/Makefile.am: + * src/insets/inset.h: + * src/insets/insetcharstyle.C: + * src/insets/insetcharstyle.h: The Character Style /XML short + element patch. + 2003-11-11 Alfredo Braunstein * insettext.C: remove all update calls diff --git a/src/insets/Makefile.am b/src/insets/Makefile.am index 3763181775..911842e971 100644 --- a/src/insets/Makefile.am +++ b/src/insets/Makefile.am @@ -40,6 +40,8 @@ libinsets_la_SOURCES = \ insetbranch.h \ insetcaption.C \ insetcaption.h \ + insetcharstyle.C \ + insetcharstyle.h \ insetcite.C \ insetcite.h \ insetcollapsable.C \ diff --git a/src/insets/inset.h b/src/insets/inset.h index 70abbb6a5e..0423190dc1 100644 --- a/src/insets/inset.h +++ b/src/insets/inset.h @@ -134,7 +134,9 @@ public: /// BRANCH_CODE, // 40 /// - BOX_CODE + BOX_CODE, + /// + CHARSTYLE_CODE }; /// diff --git a/src/insets/insetcharstyle.C b/src/insets/insetcharstyle.C new file mode 100644 index 0000000000..f9083305bb --- /dev/null +++ b/src/insets/insetcharstyle.C @@ -0,0 +1,215 @@ +/** + * \file insetcharstyle.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Angus Leeming + * \author Martin Vermeer + * \author Jürgen Spitzmüller + * + * Full author contact details are available in file CREDITS. + */ + +#include + +#include "insetcharstyle.h" + +#include "BufferView.h" +#include "dispatchresult.h" +#include "funcrequest.h" +#include "gettext.h" +#include "LaTeXFeatures.h" +#include "LColor.h" +#include "lyxlex.h" +#include "lyxtext.h" +#include "metricsinfo.h" +#include "paragraph.h" + +#include "support/std_sstream.h" + + +using std::string; +using std::auto_ptr; +using std::istringstream; +using std::ostream; +using std::ostringstream; + + +void InsetCharStyle::init() +{ + setInsetName("CharStyle"); + setButtonLabel(); +} + + +InsetCharStyle::InsetCharStyle(BufferParams const & bp, + CharStyles::iterator cs) + : InsetCollapsable(bp) +{ + params_.type = cs->name; + params_.latextype = cs->latextype; + params_.latexname = cs->latexname; + params_.font = cs->font; + params_.labelfont = cs->labelfont; + init(); +} + + +InsetCharStyle::InsetCharStyle(InsetCharStyle const & in) + : InsetCollapsable(in), params_(in.params_) +{ + init(); +} + + +auto_ptr InsetCharStyle::clone() const +{ + return auto_ptr(new InsetCharStyle(*this)); +} + + +string const InsetCharStyle::editMessage() const +{ + return _("Opened CharStyle Inset"); +} + + +void InsetCharStyle::write(Buffer const & buf, ostream & os) const +{ + params_.write(os); + InsetCollapsable::write(buf, os); +} + + +void InsetCharStyle::read(Buffer const & buf, LyXLex & lex) +{ + InsetCollapsable::read(buf, lex); + setButtonLabel(); +} + + +void InsetCharStyle::setButtonLabel() +{ + LyXFont font(params_.labelfont); + font.realize(LyXFont(LyXFont::ALL_SANE)); + font.decSize(); + setLabel("Style: " + params_.type); + setLabelFont(font); +} + + +void InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const +{ + InsetCollapsable::metrics(mi, dim); + dim_ = dim; +} + + +void InsetCharStyle::getDrawFont(LyXFont & font) const +{ + font = params_.font; +} + + +DispatchResult +InsetCharStyle::priv_dispatch(FuncRequest const & cmd, + idx_type & idx, pos_type & pos) +{ + DispatchResult dr = InsetCollapsable::priv_dispatch(cmd, idx, pos); + setButtonLabel(); + return dr; +} + + +namespace { + +int outputVerbatim(std::ostream & os, InsetText inset) +{ + int lines = 0; + ParagraphList::iterator par = inset.paragraphs.begin(); + ParagraphList::iterator end = inset.paragraphs.end(); + while (par != end) { + lyx::pos_type siz = par->size(); + for (lyx::pos_type i = 0; i < siz; ++i) { + if (par->isNewline(i)) { + os << '\n'; + ++lines; + } else { + os << par->getChar(i); + } + } + ++par; + if (par != end) { + os << "\n"; + lines ++; + } + } + return lines; +} + +} // namespace anon + + +int InsetCharStyle::latex(Buffer const & buf, ostream & os, + OutputParams const & runparams) const +{ + os << "%\n\\" << params_.latexname << "{"; + int i = outputVerbatim(os, inset); + os << "}%\n"; + i += 2; + return i; +} + + +int InsetCharStyle::linuxdoc(Buffer const & buf, std::ostream & os, + OutputParams const & runparams) const +{ + os << "<" << params_.latexname << ">"; + int const i = outputVerbatim(os, inset); + os << ""; + return i; +} + + +int InsetCharStyle::docbook(Buffer const & buf, std::ostream & os, + OutputParams const & runparams) const +{ + os << "<" << params_.latexname << ">"; + int const i = outputVerbatim(os, inset); + os << ""; + return i; +} + + +int InsetCharStyle::plaintext(Buffer const & buf, std::ostream & os, + OutputParams const & runparams) const +{ + return outputVerbatim(os, inset); +} + + +void InsetCharStyle::validate(LaTeXFeatures & features) const +{ + features.require(params_.type); +} + + +void InsetCharStyleParams::write(ostream & os) const +{ + os << type << "\n"; +} + + +void InsetCharStyleParams::read(LyXLex & lex) +{ + if (lex.isOK()) { + lex.next(); + string token = lex.getString(); + } + + if (lex.isOK()) { + lex.next(); + type = lex.getString(); + } +} + diff --git a/src/insets/insetcharstyle.h b/src/insets/insetcharstyle.h new file mode 100644 index 0000000000..8b3ea9c2b1 --- /dev/null +++ b/src/insets/insetcharstyle.h @@ -0,0 +1,99 @@ +// -*- C++ -*- +/** + * \file insetcharstyle.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Angus Leeming + * \author Martin Vermeer + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef INSETCHARSTYLE_H +#define INSETCHARSTYLE_H + + +#include "insetcollapsable.h" +#include "lyxtextclass.h" + + + struct InsetCharStyleParams { + /// + void write(std::ostream & os) const; + /// + void read(LyXLex & lex); + /// + std::string type; + /// + std::string latextype; + /// + std::string latexname; + /// + LyXFont font; + /// + LyXFont labelfont; +}; + + +/** The CharStyle inset, also XML short element + +*/ +class InsetCharStyle : public InsetCollapsable { +public: + /// + + + InsetCharStyle(BufferParams const &, CharStyles::iterator); + /// Copy constructor + InsetCharStyle(InsetCharStyle const &); + /// + virtual std::auto_ptr clone() const; + /// + std::string const editMessage() const; + /// + InsetOld::Code lyxCode() const { return InsetOld::CHARSTYLE_CODE; } + /// + void write(Buffer const &, std::ostream &) const; + /// + void read(Buffer const & buf, LyXLex & lex); + /// + void setButtonLabel(); + /// + void metrics(MetricsInfo &, Dimension &) const; + /// + void getDrawFont(LyXFont &) const; + /// + int latex(Buffer const &, std::ostream &, + OutputParams const &) const; + /// + int linuxdoc(Buffer const &, std::ostream &, + OutputParams const &) const; + /// + int docbook(Buffer const &, std::ostream &, + OutputParams const &) const; + /// + int plaintext(Buffer const &, std::ostream &, + OutputParams const &) const; + /// + void validate(LaTeXFeatures &) const; + + /// + InsetCharStyleParams const & params() const { return params_; } + +protected: + /// + virtual + DispatchResult + priv_dispatch(FuncRequest const &, idx_type &, pos_type &); + +private: + friend class InsetCharStyleParams; + + /// used by the constructors + void init(); + /// + InsetCharStyleParams params_; +}; + +#endif diff --git a/src/lfuns.h b/src/lfuns.h index f1dfe36390..bb044e78f1 100644 --- a/src/lfuns.h +++ b/src/lfuns.h @@ -331,6 +331,7 @@ enum kb_action { LFUN_FINISHED_RIGHT, LFUN_FINISHED_UP, LFUN_FINISHED_DOWN, + LFUN_INSERT_CHARSTYLE, LFUN_LASTACTION // end of the table }; diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 53555cf02c..60756dfe8e 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -645,6 +645,11 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_INSERT_NOTE: code = InsetOld::NOTE_CODE; break; + case LFUN_INSERT_CHARSTYLE: + code = InsetOld::CHARSTYLE_CODE; + if (buf->params().getLyXTextClass().charstyles().empty()) + disable = true; + break; case LFUN_INSERT_BOX: code = InsetOld::BOX_CODE; break; diff --git a/src/lyxtextclass.C b/src/lyxtextclass.C index 002d51df83..058db9e893 100644 --- a/src/lyxtextclass.C +++ b/src/lyxtextclass.C @@ -104,6 +104,7 @@ enum TextClassTags { TC_INPUT, TC_STYLE, TC_DEFAULTSTYLE, + TC_CHARSTYLE, TC_ENVIRONMENT, TC_NOSTYLE, TC_COLUMNS, @@ -131,6 +132,7 @@ enum TextClassTags { bool LyXTextClass::Read(string const & filename, bool merge) { keyword_item textClassTags[] = { + { "charstyle", TC_CHARSTYLE }, { "classoptions", TC_CLASSOPTIONS }, { "columns", TC_COLUMNS }, { "counter", TC_COUNTER }, @@ -346,6 +348,12 @@ bool LyXTextClass::Read(string const & filename, bool merge) if (lexrc.next()) rightmargin_ = lexrc.getString(); break; + case TC_CHARSTYLE: + if (lexrc.next()) { + string const name = subst(lexrc.getString(), '_', ' '); + readCharStyle(lexrc, name); + } + break; case TC_FLOAT: readFloat(lexrc); break; @@ -506,6 +514,85 @@ void LyXTextClass::readClassOptions(LyXLex & lexrc) lexrc.popTable(); } +enum CharStyleTags { + CS_FONT = 1, + CS_LABELFONT, + CS_LATEXTYPE, + CS_LATEXNAME, + CS_PREAMBLE, + CS_END +}; + + +void LyXTextClass::readCharStyle(LyXLex & lexrc, string const & name) +{ + keyword_item elementTags[] = { + { "end", CS_END }, + { "font", CS_FONT }, + { "labelfont", CS_LABELFONT }, + { "latexname", CS_LATEXNAME }, + { "latextype", CS_LATEXTYPE }, + { "preamble", CS_PREAMBLE} + }; + + lexrc.pushTable(elementTags, CS_END); + + string latextype; + string latexname; + LyXFont font(LyXFont::ALL_INHERIT); + LyXFont labelfont(LyXFont::ALL_INHERIT); + string preamble; + + bool getout = false; + while (!getout && lexrc.isOK()) { + int le = lexrc.lex(); + switch (le) { + case LyXLex::LEX_UNDEF: + lexrc.printError("Unknown ClassOption tag `$$Token'"); + continue; + default: break; + } + switch (static_cast(le)) { + case CS_LATEXTYPE: + lexrc.next(); + latextype = lexrc.getString(); + break; + case CS_LATEXNAME: + lexrc.next(); + latexname = lexrc.getString(); + break; + case CS_LABELFONT: + labelfont.lyxRead(lexrc); + break; + case CS_FONT: + font.lyxRead(lexrc); + labelfont = font; + break; + case CS_PREAMBLE: + preamble = lexrc.getLongString("EndPreamble"); + break; + case CS_END: + getout = true; + break; + } + } + + // + // Here add element to list if getout == true + if (getout) { + CharStyle cs; + cs.name = name; + cs.latextype = latextype; + cs.latexname = latexname; + cs.font = font; + cs.labelfont = labelfont; + cs.preamble = preamble; + charstyles().push_back(cs); + } + + lexrc.popTable(); +} + enum FloatTags { FT_TYPE = 1, @@ -519,6 +606,7 @@ enum FloatTags { FT_END }; + void LyXTextClass::readFloat(LyXLex & lexrc) { keyword_item floatTags[] = { @@ -776,6 +864,18 @@ Counters & LyXTextClass::counters() const } +CharStyles::iterator LyXTextClass::charstyle(string const & s) const +{ + CharStyles::iterator cs = charstyles().begin(); + CharStyles::iterator csend = charstyles().end(); + for (; cs != csend; ++cs) { + if (cs->name == s) + return cs; + } + return csend; +} + + string const & LyXTextClass::defaultLayoutName() const { // This really should come from the actual layout... (Lgb) diff --git a/src/lyxtextclass.h b/src/lyxtextclass.h index 2bf28f6a9e..9a526ae281 100644 --- a/src/lyxtextclass.h +++ b/src/lyxtextclass.h @@ -22,6 +22,21 @@ class Counters; class FloatList; +/// +struct CharStyle { + std::string name; + std::string latextype; + std::string latexname; + LyXFont font; + LyXFont labelfont; + std::string preamble; +}; + + +/// List of semantically defined character style insets +typedef std::vector CharStyles; + + /// Stores the layout specification of a LyX document class. class LyXTextClass { public: @@ -55,6 +70,8 @@ public: /// void readClassOptions(LyXLex &); /// + void readCharStyle(LyXLex &, std::string const &); + /// void readFloat(LyXLex &); /// void readCounter(LyXLex &); @@ -73,6 +90,10 @@ public: FloatList const & floats() const; /// The Counters present in this document class. Counters & counters() const; + /// CharStyles of this doc class + CharStyles & charstyles() const { return charstylelist_; }; + /// Retrieve element of name s: + CharStyles::iterator charstyle(std::string const & s) const; /// std::string const & defaultLayoutName() const; /// @@ -199,7 +220,9 @@ private: /// Paragraph styles used in this layout LayoutList layoutlist_; - + /// CharStyles available to this layout + mutable CharStyles charstylelist_; + /// available types of float, eg. figure, algorithm. boost::shared_ptr floatlist_; diff --git a/src/text3.C b/src/text3.C index 6c3b2baf95..4b1cbdf7ff 100644 --- a/src/text3.C +++ b/src/text3.C @@ -1511,6 +1511,7 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd) case LFUN_INSET_CAPTION: #endif case LFUN_INSERT_NOTE: + case LFUN_INSERT_CHARSTYLE: case LFUN_INSERT_BOX: case LFUN_INSERT_BRANCH: case LFUN_INSERT_BIBITEM: -- 2.39.2