2003-08-23 00:17:00 +00:00
/**
2007-04-26 04:41:58 +00:00
* \ file BufferParams . cpp
2003-08-23 00:17:00 +00:00
* This file is part of LyX , the document processor .
* Licence details can be found in the file COPYING .
2002-03-21 17:27:08 +00:00
*
2003-08-23 00:17:00 +00:00
* \ author Alfredo Braunstein
2008-11-14 15:58:50 +00:00
* \ author Lars Gullik Bjønnes
2003-08-23 00:17:00 +00:00
* \ author Jean - Marc Lasgouttes
* \ author John Levon
2008-11-14 15:58:50 +00:00
* \ author André Pönitz
2003-08-23 00:17:00 +00:00
* \ author Martin Vermeer
2002-03-21 17:27:08 +00:00
*
2003-08-23 00:17:00 +00:00
* Full author contact details are available in file CREDITS .
*/
1999-09-27 18:44:28 +00:00
# include <config.h>
2007-04-26 04:41:58 +00:00
# include "BufferParams.h"
2003-09-06 23:36:02 +00:00
2007-04-26 04:41:58 +00:00
# include "Author.h"
2008-03-07 03:53:21 +00:00
# include "LayoutFile.h"
2003-09-09 17:00:19 +00:00
# include "BranchList.h"
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
# include "Buffer.h"
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This first patch does some reworking of the infrastructrue. We need to distinguish between the TextClass that a particular document is using and the layout of that document, since modules, in particular, can modify the layout. The solution adopted here is to add a TextClass pointer to BufferParams, which will hold the layout. The layout itself is then constructed from the TextClass the document is using. At present, this is completely trivial, but that will change when modules are added.
The pointer in question is a boost::shared_ptr. This is needed because CutAndPaste saves a copy of the layout with each cut or copied selection. We cannot assume the selection vanishes when the document is closed, so there are two options: (i) keep a list of all the layouts that have ever been used by any document; (ii) used some kind of smart pointer. The latter seems preferable, as the former would waste memory. More importantly, the use of a smart pointer allows modules to be modified on disk and then reloaded while LyX is running, and it will eventually allow the same for layout files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19756 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-23 16:41:13 +00:00
# include "buffer_funcs.h"
2003-09-06 23:36:02 +00:00
# include "Bullet.h"
2007-11-02 23:42:27 +00:00
# include "Color.h"
2009-02-09 23:30:24 +00:00
# include "ColorSet.h"
2011-05-13 19:39:56 +00:00
# include "Converter.h"
2007-04-26 04:41:58 +00:00
# include "Encoding.h"
2009-07-19 21:13:27 +00:00
# include "HSpace.h"
2009-04-16 07:29:01 +00:00
# include "IndicesList.h"
2007-04-26 04:41:58 +00:00
# include "Language.h"
2003-09-04 03:54:04 +00:00
# include "LaTeXFeatures.h"
2012-08-16 11:23:39 +00:00
# include "LaTeXFonts.h"
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
# include "ModuleList.h"
2007-04-29 18:17:15 +00:00
# include "Font.h"
2007-04-26 11:30:54 +00:00
# include "Lexer.h"
2007-04-26 04:41:58 +00:00
# include "LyXRC.h"
# include "OutputParams.h"
2003-09-09 17:00:19 +00:00
# include "Spacing.h"
2007-04-26 04:41:58 +00:00
# include "TexRow.h"
# include "VSpace.h"
2007-09-20 22:31:18 +00:00
# include "PDFOptions.h"
2001-12-28 13:26:54 +00:00
2007-04-28 20:44:46 +00:00
# include "frontends/alert.h"
2007-11-29 07:04:28 +00:00
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
# include "insets/InsetListingsParams.h"
2003-08-17 11:28:23 +00:00
2005-01-06 16:39:35 +00:00
# include "support/convert.h"
2007-11-29 07:04:28 +00:00
# include "support/debug.h"
2007-11-01 22:17:22 +00:00
# include "support/docstream.h"
2007-11-28 15:25:07 +00:00
# include "support/FileName.h"
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
# include "support/filetools.h"
2007-11-29 07:04:28 +00:00
# include "support/gettext.h"
# include "support/Messages.h"
2014-07-05 10:39:59 +00:00
# include "support/mutex.h"
2015-05-25 22:29:46 +00:00
# include "support/Package.h"
Rename files in src/support, step one.
src/support/package.h src/support/Package.h Package
src/support/package.C.in src/support/Package.C.in Package
src/support/path.h src/support/Path.h Path
src/support/fs_extras.h src/support/fs_extras.h NOCLASSES
src/support/RandomAccessList.h src/support/RandomAccessList.h RandomAccessList
src/support/lyxmanip.h src/support/lyxmanip.h NOCLASSES
src/support/rename.C src/support/rename.cpp NOCLASSES
src/support/abort.C src/support/abort.cpp NOCLASSES
src/support/lyxlib.h src/support/lyxlib.h NOCLASSES
src/support/ExceptionMessage.h src/support/ExceptionMessage.h ExceptionMessage
src/support/copy.C src/support/copy.cpp NOCLASSES
src/support/limited_stack.h src/support/limited_stack.h limited_stack
src/support/filefilterlist.C src/support/FileFilterList.cpp ['FileFilterList', 'Filter']
src/support/cow_ptr.h src/support/cow_ptr.h cow_ptr
src/support/os_unix.C src/support/os_unix.cpp NOCLASSES
src/support/socktools.h src/support/socktools.h NOCLASSES
src/support/forkedcontr.h src/support/ForkedcallsController.h ForkedcallsController
src/support/os.h src/support/os.h NOCLASSES
src/support/FileMonitor.h src/support/FileMonitor.h FileMonitor
src/support/copied_ptr.h src/support/copied_ptr.h copied_ptr
src/support/translator.h src/support/Translator.h Translator
src/support/filetools.C src/support/filetools.cpp NOCLASSES
src/support/unlink.C src/support/unlink.cpp NOCLASSES
src/support/os_win32.C src/support/os_win32.cpp GetFolderPath
src/support/lstrings.C src/support/lstrings.cpp NOCLASSES
src/support/qstring_helpers.C src/support/qstring_helpers.cpp NOCLASSES
src/support/getcwd.C src/support/getcwd.cpp NOCLASSES
src/support/systemcall.C src/support/Systemcall.cpp Systemcall
src/support/lyxalgo.h src/support/lyxalgo.h NOCLASSES
src/support/filefilterlist.h src/support/FileFilterList.h ['FileFilterList', 'Filter']
src/support/unicode.C src/support/unicode.cpp IconvProcessor
src/support/userinfo.C src/support/userinfo.cpp NOCLASSES
src/support/lyxtime.C src/support/lyxtime.cpp NOCLASSES
src/support/kill.C src/support/kill.cpp NOCLASSES
src/support/docstring.C src/support/docstring.cpp to_local8bit_failure
src/support/os_cygwin.C src/support/os_cygwin.cpp NOCLASSES
src/support/lyxsum.C src/support/lyxsum.cpp NOCLASSES
src/support/environment.C src/support/environment.cpp NOCLASSES
src/support/filetools.h src/support/filetools.h NOCLASSES
src/support/textutils.C src/support/textutils.cpp NOCLASSES
src/support/mkdir.C src/support/mkdir.cpp NOCLASSES
src/support/forkedcall.C src/support/Forkedcall.cpp ['ForkedProcess', 'Forkedcall']
src/support/tempname.C src/support/tempname.cpp NOCLASSES
src/support/os_win32.h src/support/os_win32.h GetFolderPath
src/support/types.h src/support/types.h NOCLASSES
src/support/lstrings.h src/support/lstrings.h NOCLASSES
src/support/forkedcallqueue.C src/support/ForkedCallQueue.cpp ForkedCallQueue
src/support/qstring_helpers.h src/support/qstring_helpers.h NOCLASSES
src/support/convert.C src/support/convert.cpp NOCLASSES
src/support/filename.C src/support/FileName.cpp ['FileName', 'DocFileName']
src/support/tests/convert.C src/support/tests/convert.cpp NOCLASSES
src/support/tests/filetools.C src/support/tests/filetools.cpp NOCLASSES
src/support/tests/lstrings.C src/support/tests/lstrings.cpp NOCLASSES
src/support/tests/boost.C src/support/tests/boost.cpp NOCLASSES
src/support/docstream.C src/support/docstream.cpp ['iconv_codecvt_facet_exception', 'idocfstream', 'odocfstream']
src/support/std_istream.h src/support/std_istream.h NOCLASSES
src/support/systemcall.h src/support/Systemcall.h Systemcall
src/support/chdir.C src/support/chdir.cpp NOCLASSES
src/support/std_ostream.h src/support/std_ostream.h NOCLASSES
src/support/unicode.h src/support/unicode.h IconvProcessor
src/support/path.C src/support/Path.cpp Path
src/support/fs_extras.C src/support/fs_extras.cpp NOCLASSES
src/support/userinfo.h src/support/userinfo.h NOCLASSES
src/support/lyxtime.h src/support/lyxtime.h NOCLASSES
src/support/docstring.h src/support/docstring.h to_local8bit_failure
src/support/debugstream.h src/support/debugstream.h basic_debugstream
src/support/environment.h src/support/environment.h NOCLASSES
src/support/textutils.h src/support/textutils.h NOCLASSES
src/support/forkedcall.h src/support/Forkedcall.h ['ForkedProcess', 'Forkedcall']
src/support/socktools.C src/support/socktools.cpp NOCLASSES
src/support/forkedcallqueue.h src/support/ForkedCallQueue.h ForkedCallQueue
src/support/forkedcontr.C src/support/ForkedcallsController.cpp ForkedcallsController
src/support/os.C src/support/os.cpp NOCLASSES
src/support/convert.h src/support/convert.h NOCLASSES
src/support/filename.h src/support/FileName.h ['FileName', 'DocFileName']
src/support/docstream.h src/support/docstream.h ['iconv_codecvt_facet_exception', 'idocfstream', 'odocfstream']
src/support/FileMonitor.C src/support/FileMonitor.cpp FileMonitor
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18024 a592a061-630c-0410-9148-cb99ea01b6c8
2007-04-26 05:12:52 +00:00
# include "support/Translator.h"
2007-09-20 22:31:18 +00:00
# include "support/lstrings.h"
2003-05-03 19:24:36 +00:00
2007-08-12 08:57:17 +00:00
# include <algorithm>
2004-07-24 10:55:30 +00:00
# include <sstream>
2000-02-22 00:36:17 +00:00
2007-12-12 10:16:00 +00:00
using namespace std ;
2007-12-12 18:57:56 +00:00
using namespace lyx : : support ;
2007-04-30 21:01:24 +00:00
static char const * const string_paragraph_separation [ ] = {
" indent " , " skip " , " "
} ;
static char const * const string_quotes_language [ ] = {
" english " , " swedish " , " german " , " polish " , " french " , " danish " , " "
} ;
static char const * const string_papersize [ ] = {
2008-05-15 22:54:13 +00:00
" default " , " custom " , " letterpaper " , " legalpaper " , " executivepaper " ,
2010-05-18 01:22:08 +00:00
" a0paper " , " a1paper " , " a2paper " , " a3paper " , " a4paper " , " a5paper " ,
" a6paper " , " b0paper " , " b1paper " , " b2paper " , " b3paper " , " b4paper " ,
2010-07-13 01:06:20 +00:00
" b5paper " , " b6paper " , " c0paper " , " c1paper " , " c2paper " , " c3paper " ,
" c4paper " , " c5paper " , " c6paper " , " b0j " , " b1j " , " b2j " , " b3j " , " b4j " , " b5j " ,
2010-05-18 01:22:08 +00:00
" b6j " , " "
2007-04-30 21:01:24 +00:00
} ;
static char const * const string_orientation [ ] = {
" portrait " , " landscape " , " "
} ;
static char const * const tex_graphics [ ] = {
2008-09-29 19:33:37 +00:00
" default " , " dvialw " , " dvilaser " , " dvipdf " , " dvipdfm " , " dvipdfmx " ,
" dvips " , " dvipsone " , " dvitops " , " dviwin " , " dviwindo " , " dvi2ps " , " emtex " ,
" ln " , " oztex " , " pctexhp " , " pctexps " , " pctexwin " , " pctex32 " , " pdftex " ,
" psprint " , " pubps " , " tcidvi " , " textures " , " truetex " , " vtex " , " xdvi " ,
" xetex " , " none " , " "
2007-04-30 21:01:24 +00:00
} ;
2004-05-19 15:11:37 +00:00
2009-04-06 06:58:30 +00:00
2007-04-30 21:01:24 +00:00
namespace lyx {
2003-05-13 16:24:49 +00:00
2004-10-05 13:18:28 +00:00
// Local translators
2004-08-20 13:06:33 +00:00
namespace {
2004-10-05 13:18:28 +00:00
// Paragraph separation
2008-03-15 00:22:54 +00:00
typedef Translator < string , BufferParams : : ParagraphSeparation > ParSepTranslator ;
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
ParSepTranslator const init_parseptranslator ( )
{
2008-03-15 00:22:54 +00:00
ParSepTranslator translator
( string_paragraph_separation [ 0 ] , BufferParams : : ParagraphIndentSeparation ) ;
translator . addPair ( string_paragraph_separation [ 1 ] , BufferParams : : ParagraphSkipSeparation ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
ParSepTranslator const & parseptranslator ( )
{
2013-10-07 22:59:05 +00:00
static ParSepTranslator const translator =
init_parseptranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
2004-10-05 13:18:28 +00:00
// Quotes language
2008-03-15 00:22:54 +00:00
typedef Translator < string , InsetQuotes : : QuoteLanguage > QuotesLangTranslator ;
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
QuotesLangTranslator const init_quoteslangtranslator ( )
{
2008-03-15 00:22:54 +00:00
QuotesLangTranslator translator
( string_quotes_language [ 0 ] , InsetQuotes : : EnglishQuotes ) ;
translator . addPair ( string_quotes_language [ 1 ] , InsetQuotes : : SwedishQuotes ) ;
translator . addPair ( string_quotes_language [ 2 ] , InsetQuotes : : GermanQuotes ) ;
translator . addPair ( string_quotes_language [ 3 ] , InsetQuotes : : PolishQuotes ) ;
translator . addPair ( string_quotes_language [ 4 ] , InsetQuotes : : FrenchQuotes ) ;
translator . addPair ( string_quotes_language [ 5 ] , InsetQuotes : : DanishQuotes ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
QuotesLangTranslator const & quoteslangtranslator ( )
{
2013-10-07 22:59:05 +00:00
static QuotesLangTranslator const translator =
init_quoteslangtranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
2004-10-05 13:18:28 +00:00
// Paper size
2007-12-12 19:28:07 +00:00
typedef Translator < string , PAPER_SIZE > PaperSizeTranslator ;
2004-10-05 13:18:28 +00:00
2008-03-15 00:22:54 +00:00
static PaperSizeTranslator initPaperSizeTranslator ( )
2005-01-05 20:21:27 +00:00
{
2005-07-16 16:57:55 +00:00
PaperSizeTranslator translator ( string_papersize [ 0 ] , PAPER_DEFAULT ) ;
translator . addPair ( string_papersize [ 1 ] , PAPER_CUSTOM ) ;
translator . addPair ( string_papersize [ 2 ] , PAPER_USLETTER ) ;
translator . addPair ( string_papersize [ 3 ] , PAPER_USLEGAL ) ;
translator . addPair ( string_papersize [ 4 ] , PAPER_USEXECUTIVE ) ;
2010-05-18 01:22:08 +00:00
translator . addPair ( string_papersize [ 5 ] , PAPER_A0 ) ;
translator . addPair ( string_papersize [ 6 ] , PAPER_A1 ) ;
translator . addPair ( string_papersize [ 7 ] , PAPER_A2 ) ;
translator . addPair ( string_papersize [ 8 ] , PAPER_A3 ) ;
translator . addPair ( string_papersize [ 9 ] , PAPER_A4 ) ;
translator . addPair ( string_papersize [ 10 ] , PAPER_A5 ) ;
translator . addPair ( string_papersize [ 11 ] , PAPER_A6 ) ;
translator . addPair ( string_papersize [ 12 ] , PAPER_B0 ) ;
translator . addPair ( string_papersize [ 13 ] , PAPER_B1 ) ;
translator . addPair ( string_papersize [ 14 ] , PAPER_B2 ) ;
translator . addPair ( string_papersize [ 15 ] , PAPER_B3 ) ;
translator . addPair ( string_papersize [ 16 ] , PAPER_B4 ) ;
translator . addPair ( string_papersize [ 17 ] , PAPER_B5 ) ;
translator . addPair ( string_papersize [ 18 ] , PAPER_B6 ) ;
2010-07-13 01:06:20 +00:00
translator . addPair ( string_papersize [ 19 ] , PAPER_C0 ) ;
translator . addPair ( string_papersize [ 20 ] , PAPER_C1 ) ;
translator . addPair ( string_papersize [ 21 ] , PAPER_C2 ) ;
translator . addPair ( string_papersize [ 22 ] , PAPER_C3 ) ;
translator . addPair ( string_papersize [ 23 ] , PAPER_C4 ) ;
translator . addPair ( string_papersize [ 24 ] , PAPER_C5 ) ;
translator . addPair ( string_papersize [ 25 ] , PAPER_C6 ) ;
translator . addPair ( string_papersize [ 26 ] , PAPER_JISB0 ) ;
translator . addPair ( string_papersize [ 27 ] , PAPER_JISB1 ) ;
translator . addPair ( string_papersize [ 28 ] , PAPER_JISB2 ) ;
translator . addPair ( string_papersize [ 29 ] , PAPER_JISB3 ) ;
translator . addPair ( string_papersize [ 30 ] , PAPER_JISB4 ) ;
translator . addPair ( string_papersize [ 31 ] , PAPER_JISB5 ) ;
translator . addPair ( string_papersize [ 32 ] , PAPER_JISB6 ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
PaperSizeTranslator const & papersizetranslator ( )
{
2013-10-07 22:59:05 +00:00
static PaperSizeTranslator const translator =
initPaperSizeTranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
2004-10-05 13:18:28 +00:00
// Paper orientation
2005-01-05 20:21:27 +00:00
typedef Translator < string , PAPER_ORIENTATION > PaperOrientationTranslator ;
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
PaperOrientationTranslator const init_paperorientationtranslator ( )
{
2004-10-05 13:18:28 +00:00
PaperOrientationTranslator translator ( string_orientation [ 0 ] , ORIENTATION_PORTRAIT ) ;
translator . addPair ( string_orientation [ 1 ] , ORIENTATION_LANDSCAPE ) ;
return translator ;
}
2005-01-05 20:21:27 +00:00
PaperOrientationTranslator const & paperorientationtranslator ( )
{
2013-10-07 22:59:05 +00:00
static PaperOrientationTranslator const translator =
init_paperorientationtranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
// Page sides
2007-11-07 23:25:08 +00:00
typedef Translator < int , PageSides > SidesTranslator ;
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
SidesTranslator const init_sidestranslator ( )
{
2007-11-07 23:25:08 +00:00
SidesTranslator translator ( 1 , OneSide ) ;
translator . addPair ( 2 , TwoSides ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2005-01-05 20:21:27 +00:00
SidesTranslator const & sidestranslator ( )
{
2013-10-07 22:59:05 +00:00
static SidesTranslator const translator = init_sidestranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2006-11-13 17:35:18 +00:00
// LaTeX packages
typedef Translator < int , BufferParams : : Package > PackageTranslator ;
2004-10-05 13:18:28 +00:00
2006-11-13 17:35:18 +00:00
PackageTranslator const init_packagetranslator ( )
2005-01-05 20:21:27 +00:00
{
2006-11-13 17:35:18 +00:00
PackageTranslator translator ( 0 , BufferParams : : package_off ) ;
translator . addPair ( 1 , BufferParams : : package_auto ) ;
translator . addPair ( 2 , BufferParams : : package_on ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2006-11-13 17:35:18 +00:00
PackageTranslator const & packagetranslator ( )
2005-01-05 20:21:27 +00:00
{
2013-10-07 22:59:05 +00:00
static PackageTranslator const translator =
init_packagetranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
// Cite engine
2012-01-09 13:16:38 +00:00
typedef Translator < string , CiteEngineType > CiteEngineTypeTranslator ;
CiteEngineTypeTranslator const init_citeenginetypetranslator ( )
{
CiteEngineTypeTranslator translator ( " authoryear " , ENGINE_TYPE_AUTHORYEAR ) ;
translator . addPair ( " numerical " , ENGINE_TYPE_NUMERICAL ) ;
2013-05-16 14:00:54 +00:00
translator . addPair ( " default " , ENGINE_TYPE_DEFAULT ) ;
2012-01-09 13:16:38 +00:00
return translator ;
}
CiteEngineTypeTranslator const & citeenginetypetranslator ( )
{
2013-10-07 22:59:05 +00:00
static CiteEngineTypeTranslator const translator =
init_citeenginetypetranslator ( ) ;
2012-01-09 13:16:38 +00:00
return translator ;
}
2004-10-05 13:18:28 +00:00
// Spacing
typedef Translator < string , Spacing : : Space > SpaceTranslator ;
2004-08-20 13:06:33 +00:00
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
SpaceTranslator const init_spacetranslator ( )
{
2004-10-05 13:18:28 +00:00
SpaceTranslator translator ( " default " , Spacing : : Default ) ;
translator . addPair ( " single " , Spacing : : Single ) ;
translator . addPair ( " onehalf " , Spacing : : Onehalf ) ;
translator . addPair ( " double " , Spacing : : Double ) ;
2005-01-06 13:48:13 +00:00
translator . addPair ( " other " , Spacing : : Other ) ;
2004-10-05 13:18:28 +00:00
return translator ;
2004-08-20 13:06:33 +00:00
}
2004-10-05 13:18:28 +00:00
2005-01-05 20:21:27 +00:00
SpaceTranslator const & spacetranslator ( )
{
2013-10-07 22:59:05 +00:00
static SpaceTranslator const translator = init_spacetranslator ( ) ;
2004-10-05 13:18:28 +00:00
return translator ;
}
2007-01-27 17:22:58 +00:00
} // anon namespace
2004-08-20 13:06:33 +00:00
2005-01-19 15:03:31 +00:00
class BufferParams : : Impl
2003-09-09 17:00:19 +00:00
{
2005-01-19 15:03:31 +00:00
public :
2003-09-09 17:00:19 +00:00
Impl ( ) ;
AuthorList authorlist ;
BranchList branchlist ;
2007-11-03 18:30:05 +00:00
Bullet temp_bullets [ 4 ] ;
Bullet user_defined_bullets [ 4 ] ;
2009-04-16 07:29:01 +00:00
IndicesList indiceslist ;
2003-09-09 17:00:19 +00:00
Spacing spacing ;
/** This is the amount of space used for paragraph_separation "skip",
* and for detached paragraphs in " indented " documents .
*/
2009-07-19 21:13:27 +00:00
HSpace indentation ;
2003-09-09 17:00:19 +00:00
VSpace defskip ;
2007-09-20 22:31:18 +00:00
PDFOptions pdfoptions ;
This is the last of the commits that hopes to enforce the distinction between "layout files" and "document classes" that was introduced by the modules code. For the most part, these changes just refactor code from TextClass between: (a) a TextClass base class; (b) a LayoutFile subclass, which represents the information in a .layout file; and (c) a DocumentClass subclass, which represents the layout information associated with a Buffer---a LayoutFile plus Modules. Methods from TextClass have been apportioned between the three classes depending upon what is needed where, and signatures have been changed where necessary so that the right kind of class is required.
At this point, there are no simple TextClass objects in the main LyX code, and it is impossible to create them, since the TextClass constructor is protected. Only LayoutFile and DocumentClass objects can be constructed, and for the most part these are constructed only by their respective containers: BaseClassList and DocumentClassBundle. There is an exception: LayoutFile does have a public default constructor, but if anyone knows how to make it go away, please do.
There will be one or two more commits along these lines, but these will be simple renamings. For example, BaseClassList should be LayoutFileList.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23343 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-29 02:45:33 +00:00
LayoutFileIndex baseClass_ ;
2003-09-09 17:00:19 +00:00
} ;
BufferParams : : Impl : : Impl ( )
2008-02-28 21:04:55 +00:00
: defskip ( VSpace : : MEDSKIP ) , baseClass_ ( string ( " " ) )
2003-09-09 17:00:19 +00:00
{
// set initial author
2006-12-21 13:58:28 +00:00
// FIXME UNICODE
authorlist . record ( Author ( from_utf8 ( lyxrc . user_name ) , from_utf8 ( lyxrc . user_email ) ) ) ;
2003-09-09 17:00:19 +00:00
}
2003-09-15 20:23:57 +00:00
BufferParams : : Impl *
BufferParams : : MemoryTraits : : clone ( BufferParams : : Impl const * ptr )
{
2013-04-27 21:52:55 +00:00
LBUFERR ( ptr ) ;
2003-09-15 20:23:57 +00:00
return new BufferParams : : Impl ( * ptr ) ;
}
void BufferParams : : MemoryTraits : : destroy ( BufferParams : : Impl * ptr )
{
delete ptr ;
}
1999-09-27 18:44:28 +00:00
BufferParams : : BufferParams ( )
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This first patch does some reworking of the infrastructrue. We need to distinguish between the TextClass that a particular document is using and the layout of that document, since modules, in particular, can modify the layout. The solution adopted here is to add a TextClass pointer to BufferParams, which will hold the layout. The layout itself is then constructed from the TextClass the document is using. At present, this is completely trivial, but that will change when modules are added.
The pointer in question is a boost::shared_ptr. This is needed because CutAndPaste saves a copy of the layout with each cut or copied selection. We cannot assume the selection vanishes when the document is closed, so there are two options: (i) keep a list of all the layouts that have ever been used by any document; (ii) used some kind of smart pointer. The latter seems preferable, as the former would waste memory. More importantly, the use of a smart pointer allows modules to be modified on disk and then reloaded while LyX is running, and it will eventually allow the same for layout files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19756 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-23 16:41:13 +00:00
: pimpl_ ( new Impl )
1999-09-27 18:44:28 +00:00
{
2008-02-24 16:59:49 +00:00
setBaseClass ( defaultBaseclass ( ) ) ;
2015-11-06 20:51:13 +00:00
cite_engine_ . push_back ( " basic " ) ;
cite_engine_type_ = ENGINE_TYPE_DEFAULT ;
2008-02-28 01:42:02 +00:00
makeDocumentClass ( ) ;
2008-03-15 00:22:54 +00:00
paragraph_separation = ParagraphIndentSeparation ;
quotes_language = InsetQuotes : : EnglishQuotes ;
1999-09-27 18:44:28 +00:00
fontsize = " default " ;
1999-11-25 17:29:19 +00:00
2001-11-29 17:12:21 +00:00
/* PaperLayout */
1999-09-27 18:44:28 +00:00
papersize = PAPER_DEFAULT ;
orientation = ORIENTATION_PORTRAIT ;
2001-11-29 17:12:21 +00:00
use_geometry = false ;
2011-12-12 14:40:34 +00:00
biblio_style = " plain " ;
2004-03-29 13:17:25 +00:00
use_bibtopic = false ;
2009-04-16 07:29:01 +00:00
use_indices = false ;
2014-03-29 22:52:36 +00:00
track_changes = false ;
output_changes = false ;
2008-10-12 09:36:00 +00:00
use_default_options = true ;
2010-01-10 13:25:41 +00:00
maintain_unincluded_children = false ;
1999-09-27 18:44:28 +00:00
secnumdepth = 3 ;
tocdepth = 3 ;
2000-10-10 12:36:36 +00:00
language = default_language ;
2009-11-29 14:43:00 +00:00
fontenc = " global " ;
2015-11-09 06:33:57 +00:00
fonts_roman [ 0 ] = " default " ;
fonts_roman [ 1 ] = " default " ;
fonts_sans [ 0 ] = " default " ;
fonts_sans [ 1 ] = " default " ;
fonts_typewriter [ 0 ] = " default " ;
fonts_typewriter [ 1 ] = " default " ;
fonts_math [ 0 ] = " auto " ;
fonts_math [ 1 ] = " auto " ;
2010-11-26 18:32:29 +00:00
fonts_default_family = " default " ;
2010-11-26 09:42:03 +00:00
useNonTeXFonts = false ;
2010-11-26 18:32:29 +00:00
fonts_expert_sc = false ;
fonts_old_figures = false ;
2015-11-09 06:33:57 +00:00
fonts_sans_scale [ 0 ] = 100 ;
fonts_sans_scale [ 1 ] = 100 ;
fonts_typewriter_scale [ 0 ] = 100 ;
fonts_typewriter_scale [ 1 ] = 100 ;
2000-07-04 20:32:37 +00:00
inputenc = " auto " ;
2011-02-03 14:17:31 +00:00
lang_package = " default " ;
2010-11-26 18:42:53 +00:00
graphics_driver = " default " ;
default_output_format = " default " ;
2009-05-22 07:20:00 +00:00
bibtex_command = " default " ;
index_command = " default " ;
2007-11-07 23:25:08 +00:00
sides = OneSide ;
1999-09-27 18:44:28 +00:00
columns = 1 ;
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
listings_params = string ( ) ;
1999-09-27 18:44:28 +00:00
pagestyle = " default " ;
2009-08-14 00:52:33 +00:00
suppress_date = false ;
2011-12-07 22:33:25 +00:00
justification = true ;
2010-04-05 20:31:10 +00:00
// no color is the default (white)
2009-04-11 21:40:11 +00:00
backgroundcolor = lyx : : rgbFromHexName ( " #ffffff " ) ;
2010-04-05 20:31:10 +00:00
isbackgroundcolor = false ;
2010-04-02 23:39:36 +00:00
// no color is the default (black)
fontcolor = lyx : : rgbFromHexName ( " #000000 " ) ;
isfontcolor = false ;
2010-03-31 00:46:50 +00:00
// light gray is the default font color for greyed-out notes
notefontcolor = lyx : : rgbFromHexName ( " #cccccc " ) ;
2010-04-08 00:14:08 +00:00
boxbgcolor = lyx : : rgbFromHexName ( " #ff0000 " ) ;
2010-03-26 14:02:56 +00:00
compressed = lyxrc . save_compressed ;
2000-11-04 10:00:12 +00:00
for ( int iter = 0 ; iter < 4 ; + + iter ) {
2003-09-09 17:00:19 +00:00
user_defined_bullet ( iter ) = ITEMIZE_DEFAULTS [ iter ] ;
temp_bullet ( iter ) = ITEMIZE_DEFAULTS [ iter ] ;
1999-09-27 18:44:28 +00:00
}
2009-04-16 07:29:01 +00:00
// default index
indiceslist ( ) . addDefault ( B_ ( " Index " ) ) ;
2010-04-21 15:18:25 +00:00
html_be_strict = false ;
2010-03-18 20:35:08 +00:00
html_math_output = MathML ;
2010-04-21 15:18:25 +00:00
html_math_img_scale = 1.0 ;
2011-02-15 17:44:17 +00:00
html_css_as_file = false ;
2014-10-18 13:30:58 +00:00
display_pixel_ratio = 1.0 ;
2010-05-25 11:36:00 +00:00
output_sync = false ;
2010-10-13 12:36:53 +00:00
use_refstyle = true ;
2015-11-11 21:31:05 +00:00
// map current author
author_map_ [ pimpl_ - > authorlist . get ( 0 ) . bufferId ( ) ] = 0 ;
1999-09-27 18:44:28 +00:00
}
2008-03-15 00:22:54 +00:00
docstring BufferParams : : B_ ( string const & l10n ) const
2007-05-01 08:26:40 +00:00
{
2013-04-25 21:27:10 +00:00
LASSERT ( language , return from_utf8 ( l10n ) ) ;
2007-05-01 08:26:40 +00:00
return getMessages ( language - > code ( ) ) . get ( l10n ) ;
}
2012-01-03 20:51:07 +00:00
BufferParams : : Package BufferParams : : use_package ( std : : string const & p ) const
{
PackageMap : : const_iterator it = use_packages . find ( p ) ;
if ( it = = use_packages . end ( ) )
return package_auto ;
return it - > second ;
}
void BufferParams : : use_package ( std : : string const & p , BufferParams : : Package u )
{
use_packages [ p ] = u ;
}
2013-03-01 14:59:37 +00:00
map < string , string > const & BufferParams : : auto_packages ( )
2012-01-03 20:51:07 +00:00
{
2013-03-01 14:59:37 +00:00
static map < string , string > packages ;
2012-01-03 20:51:07 +00:00
if ( packages . empty ( ) ) {
2014-07-05 10:39:59 +00:00
// We could have a race condition here that two threads
// discover an empty map at the same time and want to fill
// it, but that is no problem, since the same contents is
// filled in twice then. Having the locker inside the
// packages.empty() condition has the advantage that we
// don't need the mutex overhead for simple reading.
static Mutex mutex ;
Mutex : : Locker locker ( & mutex ) ;
2012-01-03 20:51:07 +00:00
// adding a package here implies a file format change!
2013-03-01 14:59:37 +00:00
packages [ " amsmath " ] =
N_ ( " The LaTeX package amsmath is only used if AMS formula types or symbols from the AMS math toolbars are inserted into formulas " ) ;
packages [ " amssymb " ] =
N_ ( " The LaTeX package amssymb is only used if symbols from the AMS math toolbars are inserted into formulas " ) ;
packages [ " cancel " ] =
N_ ( " The LaTeX package cancel is only used if \\ cancel commands are used in formulas " ) ;
packages [ " esint " ] =
N_ ( " The LaTeX package esint is only used if special integral symbols are inserted into formulas " ) ;
packages [ " mathdots " ] =
N_ ( " The LaTeX package mathdots is only used if the command \\ iddots is inserted into formulas " ) ;
packages [ " mathtools " ] =
N_ ( " The LaTeX package mathtools is only used if some mathematical relations are inserted into formulas " ) ;
packages [ " mhchem " ] =
N_ ( " The LaTeX package mhchem is only used if either the command \\ ce or \\ cf is inserted into formulas " ) ;
packages [ " stackrel " ] =
N_ ( " The LaTeX package stackrel is only used if the command \\ stackrel with subscript is inserted into formulas " ) ;
packages [ " stmaryrd " ] =
N_ ( " The LaTeX package stmaryrd is only used if symbols from the St Mary's Road symbol font for theoretical computer science are inserted into formulas " ) ;
packages [ " undertilde " ] =
N_ ( " The LaTeX package undertilde is only used if you use the math frame decoration 'utilde' " ) ;
2012-01-03 20:51:07 +00:00
}
return packages ;
}
2003-09-09 17:00:19 +00:00
AuthorList & BufferParams : : authors ( )
{
return pimpl_ - > authorlist ;
}
AuthorList const & BufferParams : : authors ( ) const
{
return pimpl_ - > authorlist ;
}
2015-11-11 21:31:05 +00:00
void BufferParams : : addAuthor ( Author a )
{
author_map_ [ a . bufferId ( ) ] = pimpl_ - > authorlist . record ( a ) ;
}
2003-09-09 17:00:19 +00:00
BranchList & BufferParams : : branchlist ( )
{
return pimpl_ - > branchlist ;
}
BranchList const & BufferParams : : branchlist ( ) const
{
return pimpl_ - > branchlist ;
}
2009-04-16 07:29:01 +00:00
IndicesList & BufferParams : : indiceslist ( )
{
return pimpl_ - > indiceslist ;
}
IndicesList const & BufferParams : : indiceslist ( ) const
{
return pimpl_ - > indiceslist ;
}
2005-01-05 20:21:27 +00:00
Bullet & BufferParams : : temp_bullet ( lyx : : size_type const index )
2003-09-09 17:00:19 +00:00
{
2013-04-25 21:27:10 +00:00
LASSERT ( index < 4 , return pimpl_ - > temp_bullets [ 0 ] ) ;
2003-09-09 17:00:19 +00:00
return pimpl_ - > temp_bullets [ index ] ;
}
2005-01-05 20:21:27 +00:00
Bullet const & BufferParams : : temp_bullet ( lyx : : size_type const index ) const
2003-09-09 17:00:19 +00:00
{
2013-04-25 21:27:10 +00:00
LASSERT ( index < 4 , return pimpl_ - > temp_bullets [ 0 ] ) ;
2003-09-09 17:00:19 +00:00
return pimpl_ - > temp_bullets [ index ] ;
}
2005-01-05 20:21:27 +00:00
Bullet & BufferParams : : user_defined_bullet ( lyx : : size_type const index )
2003-09-09 17:00:19 +00:00
{
2013-04-25 21:27:10 +00:00
LASSERT ( index < 4 , return pimpl_ - > temp_bullets [ 0 ] ) ;
2003-09-09 17:00:19 +00:00
return pimpl_ - > user_defined_bullets [ index ] ;
}
2005-01-05 20:21:27 +00:00
Bullet const & BufferParams : : user_defined_bullet ( lyx : : size_type const index ) const
2003-09-09 17:00:19 +00:00
{
2013-04-25 21:27:10 +00:00
LASSERT ( index < 4 , return pimpl_ - > temp_bullets [ 0 ] ) ;
2003-09-09 17:00:19 +00:00
return pimpl_ - > user_defined_bullets [ index ] ;
}
Spacing & BufferParams : : spacing ( )
{
return pimpl_ - > spacing ;
}
Spacing const & BufferParams : : spacing ( ) const
{
return pimpl_ - > spacing ;
}
2007-09-20 22:42:16 +00:00
2007-09-20 22:31:18 +00:00
PDFOptions & BufferParams : : pdfoptions ( )
{
return pimpl_ - > pdfoptions ;
}
PDFOptions const & BufferParams : : pdfoptions ( ) const
{
return pimpl_ - > pdfoptions ;
}
2003-09-09 17:00:19 +00:00
2007-09-20 22:42:16 +00:00
2009-07-19 21:13:27 +00:00
HSpace const & BufferParams : : getIndentation ( ) const
{
return pimpl_ - > indentation ;
}
void BufferParams : : setIndentation ( HSpace const & indent )
{
pimpl_ - > indentation = indent ;
}
2003-09-09 17:00:19 +00:00
VSpace const & BufferParams : : getDefSkip ( ) const
{
return pimpl_ - > defskip ;
}
void BufferParams : : setDefSkip ( VSpace const & vs )
{
2010-11-03 20:15:04 +00:00
// DEFSKIP will cause an infinite loop
LASSERT ( vs . kind ( ) ! = VSpace : : DEFSKIP , return ) ;
2003-09-09 17:00:19 +00:00
pimpl_ - > defskip = vs ;
}
2008-03-15 00:22:54 +00:00
string BufferParams : : readToken ( Lexer & lex , string const & token ,
2008-04-20 03:08:11 +00:00
FileName const & filepath )
2003-03-12 02:39:12 +00:00
{
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
string result ;
2003-03-12 02:39:12 +00:00
if ( token = = " \\ textclass " ) {
2004-08-14 18:41:27 +00:00
lex . next ( ) ;
2003-03-12 02:39:12 +00:00
string const classname = lex . getString ( ) ;
2007-11-26 15:45:54 +00:00
// if there exists a local layout file, ignore the system one
2011-12-03 22:15:11 +00:00
// NOTE: in this case, the textclass (.cls file) is assumed to
2010-11-18 22:19:39 +00:00
// be available.
2008-02-28 21:04:55 +00:00
string tcp ;
2008-03-07 03:53:21 +00:00
LayoutFileList & bcl = LayoutFileList : : get ( ) ;
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
if ( ! filepath . empty ( ) ) {
// If classname is an absolute path, the document is
// using a local layout file which could not be accessed
// by a relative path. In this case the path is correct
// even if the document was moved to a different
// location. However, we will have a problem if the
// document was generated on a different platform.
bool isabsolute = FileName : : isAbsolute ( classname ) ;
string const classpath = onlyPath ( classname ) ;
string const path = isabsolute ? classpath
: FileName ( addPath ( filepath . absFileName ( ) ,
classpath ) ) . realPath ( ) ;
string const oldpath = isabsolute ? string ( )
: FileName ( addPath ( origin , classpath ) ) . realPath ( ) ;
tcp = bcl . addLocalLayout ( onlyFileName ( classname ) , path , oldpath ) ;
}
2013-04-12 01:43:01 +00:00
// that returns non-empty if a "local" layout file is found.
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
if ( ! tcp . empty ( ) ) {
result = to_utf8 ( makeRelPath ( from_utf8 ( onlyPath ( tcp ) ) ,
from_utf8 ( filepath . absFileName ( ) ) ) ) ;
if ( result . empty ( ) )
result = " . " ;
setBaseClass ( onlyFileName ( tcp ) ) ;
} else
setBaseClass ( onlyFileName ( classname ) ) ;
2011-12-03 22:15:11 +00:00
// We assume that a tex class exists for local or unknown
2010-11-18 22:19:39 +00:00
// layouts so this warning, will only be given for system layouts.
This is the last of the commits that hopes to enforce the distinction between "layout files" and "document classes" that was introduced by the modules code. For the most part, these changes just refactor code from TextClass between: (a) a TextClass base class; (b) a LayoutFile subclass, which represents the information in a .layout file; and (c) a DocumentClass subclass, which represents the layout information associated with a Buffer---a LayoutFile plus Modules. Methods from TextClass have been apportioned between the three classes depending upon what is needed where, and signatures have been changed where necessary so that the right kind of class is required.
At this point, there are no simple TextClass objects in the main LyX code, and it is impossible to create them, since the TextClass constructor is protected. Only LayoutFile and DocumentClass objects can be constructed, and for the most part these are constructed only by their respective containers: BaseClassList and DocumentClassBundle. There is an exception: LayoutFile does have a public default constructor, but if anyone knows how to make it go away, please do.
There will be one or two more commits along these lines, but these will be simple renamings. For example, BaseClassList should be LayoutFileList.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23343 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-29 02:45:33 +00:00
if ( ! baseClass ( ) - > isTeXClassAvailable ( ) ) {
2011-12-03 22:15:11 +00:00
docstring const desc =
2010-03-25 15:25:14 +00:00
translateIfPossible ( from_utf8 ( baseClass ( ) - > description ( ) ) ) ;
2011-12-03 22:15:11 +00:00
docstring const prereqs =
2010-11-18 22:19:39 +00:00
from_utf8 ( baseClass ( ) - > prerequisites ( ) ) ;
2006-09-11 08:54:10 +00:00
docstring const msg =
2010-07-12 18:11:26 +00:00
bformat ( _ ( " The selected document class \n "
2010-03-25 00:44:15 +00:00
" \t %1$s \n "
" requires external files that are not available. \n "
2010-08-05 20:15:29 +00:00
" The document class can still be used, but the \n "
" document cannot be compiled until the following \n "
" prerequisites are installed: \n "
2010-03-25 00:44:15 +00:00
" \t %2$s \n "
2010-12-26 23:42:22 +00:00
" See section 3.1.2.2 (Class Availability) of the \n "
" User's Guide for more information. " ) , desc , prereqs ) ;
2007-04-30 21:01:24 +00:00
frontend : : Alert : : warning ( _ ( " Document class not available " ) ,
2015-03-16 19:34:32 +00:00
msg , true ) ;
2010-03-22 12:25:16 +00:00
}
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
} else if ( token = = " \\ origin " ) {
lex . eatLine ( ) ;
origin = lex . getString ( ) ;
2015-05-25 22:29:46 +00:00
string const sysdirprefix = " /systemlyxdir/ " ;
if ( prefixIs ( origin , sysdirprefix ) ) {
origin . replace ( 0 , sysdirprefix . length ( ) - 1 ,
package ( ) . system_support ( ) . absFileName ( ) ) ;
}
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ begin_preamble " ) {
readPreamble ( lex ) ;
2008-03-24 12:31:07 +00:00
} else if ( token = = " \\ begin_local_layout " ) {
2013-05-15 05:19:49 +00:00
readLocalLayout ( lex , false ) ;
} else if ( token = = " \\ begin_forced_local_layout " ) {
readLocalLayout ( lex , true ) ;
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
} else if ( token = = " \\ begin_modules " ) {
readModules ( lex ) ;
2008-07-27 17:46:27 +00:00
} else if ( token = = " \\ begin_removed_modules " ) {
readRemovedModules ( lex ) ;
2010-01-07 10:01:26 +00:00
} else if ( token = = " \\ begin_includeonly " ) {
readIncludeonly ( lex ) ;
2010-01-10 13:25:41 +00:00
} else if ( token = = " \\ maintain_unincluded_children " ) {
lex > > maintain_unincluded_children ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ options " ) {
lex . eatLine ( ) ;
options = lex . getString ( ) ;
2008-10-12 09:36:00 +00:00
} else if ( token = = " \\ use_default_options " ) {
lex > > use_default_options ;
2008-04-28 16:38:56 +00:00
} else if ( token = = " \\ master " ) {
lex . eatLine ( ) ;
master = lex . getString ( ) ;
Correctly load documents moved elsewhere after save.
It is now possible opening documents that where manually moved to a
different location after they were saved and still produce an output.
Indeed, (hopefully) all needed included files are now still found.
When the moved document is saved again, all paths are accordingly updated.
Of course, for this to work, a document has to be saved in Format 490,
at least.
As an example, after converting the user guide to the last format, it can
be copied anywhere and opened without the need of adapting the paths of
included files or moving them to a proper place.
There is one glitch I am aware of. When moving a child document (but not
the master) the path to the master is correctly updated but it won't be
recognized as such. This is because LyX checks that the parent actually
includes this document but, of course, being the parent document not
touched, it appears not including this child. Anyway, it will also occur
when saving the child to a different location and the user is warned
on the terminal about this fact when the moved child is loaded.
However, there is no problem when it is the master that has been moved.
2015-05-16 17:51:53 +00:00
if ( ! filepath . empty ( ) & & FileName : : isAbsolute ( origin ) ) {
bool const isabs = FileName : : isAbsolute ( master ) ;
FileName const abspath ( isabs ? master : origin + master ) ;
bool const moved = filepath ! = FileName ( origin ) ;
if ( moved & & abspath . exists ( ) ) {
docstring const path = isabs
? from_utf8 ( master )
: from_utf8 ( abspath . realPath ( ) ) ;
docstring const refpath =
from_utf8 ( filepath . absFileName ( ) ) ;
master = to_utf8 ( makeRelPath ( path , refpath ) ) ;
}
}
2009-08-14 00:52:33 +00:00
} else if ( token = = " \\ suppress_date " ) {
lex > > suppress_date ;
2011-12-07 22:33:25 +00:00
} else if ( token = = " \\ justification " ) {
lex > > justification ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ language " ) {
readLanguage ( lex ) ;
2011-02-03 14:17:31 +00:00
} else if ( token = = " \\ language_package " ) {
lex . eatLine ( ) ;
lang_package = lex . getString ( ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ inputencoding " ) {
2004-10-05 13:18:28 +00:00
lex > > inputenc ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ graphics " ) {
readGraphicsDriver ( lex ) ;
2009-04-10 11:06:53 +00:00
} else if ( token = = " \\ default_output_format " ) {
2010-11-26 18:42:53 +00:00
lex > > default_output_format ;
2009-05-22 07:20:00 +00:00
} else if ( token = = " \\ bibtex_command " ) {
lex . eatLine ( ) ;
bibtex_command = lex . getString ( ) ;
} else if ( token = = " \\ index_command " ) {
lex . eatLine ( ) ;
index_command = lex . getString ( ) ;
2009-11-29 14:43:00 +00:00
} else if ( token = = " \\ fontencoding " ) {
lex . eatLine ( ) ;
fontenc = lex . getString ( ) ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_roman " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_roman [ 0 ] ;
lex > > fonts_roman [ 1 ] ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_sans " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_sans [ 0 ] ;
lex > > fonts_sans [ 1 ] ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_typewriter " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_typewriter [ 0 ] ;
lex > > fonts_typewriter [ 1 ] ;
2012-09-22 15:44:00 +00:00
} else if ( token = = " \\ font_math " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_math [ 0 ] ;
lex > > fonts_math [ 1 ] ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_default_family " ) {
2010-11-26 18:32:29 +00:00
lex > > fonts_default_family ;
2010-11-26 09:42:03 +00:00
} else if ( token = = " \\ use_non_tex_fonts " ) {
lex > > useNonTeXFonts ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_sc " ) {
2010-11-26 18:32:29 +00:00
lex > > fonts_expert_sc ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_osf " ) {
2010-11-26 18:32:29 +00:00
lex > > fonts_old_figures ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_sf_scale " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_sans_scale [ 0 ] ;
lex > > fonts_sans_scale [ 1 ] ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
} else if ( token = = " \\ font_tt_scale " ) {
2015-11-09 06:33:57 +00:00
lex > > fonts_typewriter_scale [ 0 ] ;
lex > > fonts_typewriter_scale [ 1 ] ;
2008-06-05 06:18:34 +00:00
} else if ( token = = " \\ font_cjk " ) {
2010-11-26 18:32:29 +00:00
lex > > fonts_cjk ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paragraph_separation " ) {
2004-10-05 13:18:28 +00:00
string parsep ;
lex > > parsep ;
paragraph_separation = parseptranslator ( ) . find ( parsep ) ;
2009-07-19 21:13:27 +00:00
} else if ( token = = " \\ paragraph_indentation " ) {
lex . next ( ) ;
string indentation = lex . getString ( ) ;
pimpl_ - > indentation = HSpace ( indentation ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ defskip " ) {
2004-08-14 18:41:27 +00:00
lex . next ( ) ;
2010-11-03 20:12:18 +00:00
string const defskip = lex . getString ( ) ;
2008-02-15 14:13:05 +00:00
pimpl_ - > defskip = VSpace ( defskip ) ;
2010-11-03 20:12:18 +00:00
if ( pimpl_ - > defskip . kind ( ) = = VSpace : : DEFSKIP )
// that is invalid
pimpl_ - > defskip = VSpace ( VSpace : : MEDSKIP ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ quotes_language " ) {
2004-10-05 13:18:28 +00:00
string quotes_lang ;
lex > > quotes_lang ;
quotes_language = quoteslangtranslator ( ) . find ( quotes_lang ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ papersize " ) {
2004-10-05 13:18:28 +00:00
string ppsize ;
lex > > ppsize ;
2005-07-16 16:57:55 +00:00
papersize = papersizetranslator ( ) . find ( ppsize ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ use_geometry " ) {
2004-10-05 13:18:28 +00:00
lex > > use_geometry ;
2012-01-03 21:26:09 +00:00
} else if ( token = = " \\ use_package " ) {
string package ;
int use ;
lex > > package ;
lex > > use ;
use_package ( package , packagetranslator ( ) . find ( use ) ) ;
2004-05-13 20:44:35 +00:00
} else if ( token = = " \\ cite_engine " ) {
2012-03-01 00:41:30 +00:00
lex . eatLine ( ) ;
vector < string > engine = getVectorFromString ( lex . getString ( ) ) ;
setCiteEngine ( engine ) ;
2012-01-09 13:16:38 +00:00
} else if ( token = = " \\ cite_engine_type " ) {
string engine_type ;
lex > > engine_type ;
cite_engine_type_ = citeenginetypetranslator ( ) . find ( engine_type ) ;
2011-12-12 14:40:34 +00:00
} else if ( token = = " \\ biblio_style " ) {
lex . eatLine ( ) ;
biblio_style = lex . getString ( ) ;
2004-03-29 13:17:25 +00:00
} else if ( token = = " \\ use_bibtopic " ) {
2004-10-05 13:18:28 +00:00
lex > > use_bibtopic ;
2009-04-16 07:29:01 +00:00
} else if ( token = = " \\ use_indices " ) {
lex > > use_indices ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ tracking_changes " ) {
2014-03-29 22:52:36 +00:00
lex > > track_changes ;
2005-01-24 17:12:19 +00:00
} else if ( token = = " \\ output_changes " ) {
2014-03-29 22:52:36 +00:00
lex > > output_changes ;
2003-08-17 11:28:23 +00:00
} else if ( token = = " \\ branch " ) {
2009-02-26 00:24:12 +00:00
lex . eatLine ( ) ;
2006-11-03 15:16:45 +00:00
docstring branch = lex . getDocString ( ) ;
2003-09-09 17:00:19 +00:00
branchlist ( ) . add ( branch ) ;
2003-08-17 11:28:23 +00:00
while ( true ) {
2004-08-14 18:41:27 +00:00
lex . next ( ) ;
2003-08-17 11:28:23 +00:00
string const tok = lex . getString ( ) ;
if ( tok = = " \\ end_branch " )
break ;
2003-12-14 16:33:56 +00:00
Branch * branch_ptr = branchlist ( ) . find ( branch ) ;
2003-08-17 11:28:23 +00:00
if ( tok = = " \\ selected " ) {
2004-08-14 18:41:27 +00:00
lex . next ( ) ;
2003-12-14 16:33:56 +00:00
if ( branch_ptr )
branch_ptr - > setSelected ( lex . getInteger ( ) ) ;
2003-08-17 11:28:23 +00:00
}
2009-07-13 14:30:08 +00:00
if ( tok = = " \\ filename_suffix " ) {
lex . next ( ) ;
if ( branch_ptr )
2010-04-21 01:19:35 +00:00
branch_ptr - > setFileNameSuffix ( lex . getInteger ( ) ) ;
2009-07-13 14:30:08 +00:00
}
2003-08-17 11:28:23 +00:00
if ( tok = = " \\ color " ) {
2004-08-14 18:41:27 +00:00
lex . eatLine ( ) ;
2003-08-17 11:28:23 +00:00
string color = lex . getString ( ) ;
2003-12-14 16:33:56 +00:00
if ( branch_ptr )
branch_ptr - > setColor ( color ) ;
2007-04-26 17:34:20 +00:00
// Update also the Color table:
2003-09-09 17:25:35 +00:00
if ( color = = " none " )
2007-10-25 12:41:02 +00:00
color = lcolor . getX11Name ( Color_background ) ;
2006-11-03 15:16:45 +00:00
// FIXME UNICODE
lcolor . setColor ( to_utf8 ( branch ) , color ) ;
2003-08-17 11:28:23 +00:00
}
}
2009-04-16 07:29:01 +00:00
} else if ( token = = " \\ index " ) {
lex . eatLine ( ) ;
docstring index = lex . getDocString ( ) ;
2009-08-17 08:01:35 +00:00
docstring shortcut ;
2009-04-16 07:29:01 +00:00
indiceslist ( ) . add ( index ) ;
while ( true ) {
lex . next ( ) ;
string const tok = lex . getString ( ) ;
if ( tok = = " \\ end_index " )
break ;
Index * index_ptr = indiceslist ( ) . find ( index ) ;
if ( tok = = " \\ shortcut " ) {
lex . next ( ) ;
2009-08-17 08:01:35 +00:00
shortcut = lex . getDocString ( ) ;
2009-04-16 07:29:01 +00:00
if ( index_ptr )
2009-08-17 08:01:35 +00:00
index_ptr - > setShortcut ( shortcut ) ;
2009-04-16 07:29:01 +00:00
}
if ( tok = = " \\ color " ) {
lex . eatLine ( ) ;
string color = lex . getString ( ) ;
if ( index_ptr )
index_ptr - > setColor ( color ) ;
// Update also the Color table:
if ( color = = " none " )
color = lcolor . getX11Name ( Color_background ) ;
// FIXME UNICODE
2009-08-17 08:01:35 +00:00
if ( ! shortcut . empty ( ) )
lcolor . setColor ( to_utf8 ( shortcut ) , color ) ;
2009-04-16 07:29:01 +00:00
}
}
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ author " ) {
2004-08-23 11:02:20 +00:00
lex . eatLine ( ) ;
2003-09-15 11:00:00 +00:00
istringstream ss ( lex . getString ( ) ) ;
2003-03-12 02:39:12 +00:00
Author a ;
ss > > a ;
2015-11-11 21:31:05 +00:00
addAuthor ( a ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paperorientation " ) {
2004-10-05 13:18:28 +00:00
string orient ;
lex > > orient ;
orientation = paperorientationtranslator ( ) . find ( orient ) ;
2009-04-11 21:40:11 +00:00
} else if ( token = = " \\ backgroundcolor " ) {
lex . eatLine ( ) ;
backgroundcolor = lyx : : rgbFromHexName ( lex . getString ( ) ) ;
2010-04-05 20:31:10 +00:00
isbackgroundcolor = true ;
2010-04-02 23:39:36 +00:00
} else if ( token = = " \\ fontcolor " ) {
lex . eatLine ( ) ;
fontcolor = lyx : : rgbFromHexName ( lex . getString ( ) ) ;
isfontcolor = true ;
2010-03-31 00:46:50 +00:00
} else if ( token = = " \\ notefontcolor " ) {
lex . eatLine ( ) ;
string color = lex . getString ( ) ;
notefontcolor = lyx : : rgbFromHexName ( color ) ;
2012-12-02 09:41:49 +00:00
lcolor . setColor ( " notefontcolor " , color ) ;
2010-04-08 00:14:08 +00:00
} else if ( token = = " \\ boxbgcolor " ) {
lex . eatLine ( ) ;
string color = lex . getString ( ) ;
boxbgcolor = lyx : : rgbFromHexName ( color ) ;
2012-11-30 16:11:07 +00:00
lcolor . setColor ( " boxbgcolor " , color ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paperwidth " ) {
2004-10-05 13:18:28 +00:00
lex > > paperwidth ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paperheight " ) {
2004-10-05 13:18:28 +00:00
lex > > paperheight ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ leftmargin " ) {
2004-10-05 13:18:28 +00:00
lex > > leftmargin ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ topmargin " ) {
2004-10-05 13:18:28 +00:00
lex > > topmargin ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ rightmargin " ) {
2004-10-05 13:18:28 +00:00
lex > > rightmargin ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ bottommargin " ) {
2004-10-05 13:18:28 +00:00
lex > > bottommargin ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ headheight " ) {
2004-10-05 13:18:28 +00:00
lex > > headheight ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ headsep " ) {
2004-10-05 13:18:28 +00:00
lex > > headsep ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ footskip " ) {
2004-10-05 13:18:28 +00:00
lex > > footskip ;
2008-02-19 05:24:48 +00:00
} else if ( token = = " \\ columnsep " ) {
lex > > columnsep ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paperfontsize " ) {
2004-10-05 13:18:28 +00:00
lex > > fontsize ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ papercolumns " ) {
2004-10-05 13:18:28 +00:00
lex > > columns ;
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
} else if ( token = = " \\ listings_params " ) {
string par ;
lex > > par ;
2007-06-12 17:10:28 +00:00
listings_params = InsetListingsParams ( par ) . params ( ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ papersides " ) {
2004-10-05 13:18:28 +00:00
int psides ;
lex > > psides ;
sides = sidestranslator ( ) . find ( psides ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ paperpagestyle " ) {
2004-10-05 13:18:28 +00:00
lex > > pagestyle ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ bullet " ) {
2004-10-05 13:18:28 +00:00
readBullets ( lex ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ bulletLaTeX " ) {
2004-10-05 13:18:28 +00:00
readBulletsLaTeX ( lex ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ secnumdepth " ) {
2004-10-05 13:18:28 +00:00
lex > > secnumdepth ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ tocdepth " ) {
2004-10-05 13:18:28 +00:00
lex > > tocdepth ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ spacing " ) {
2004-10-05 13:18:28 +00:00
string nspacing ;
lex > > nspacing ;
2005-01-06 13:48:13 +00:00
string tmp_val ;
2004-10-05 13:18:28 +00:00
if ( nspacing = = " other " ) {
lex > > tmp_val ;
2003-03-12 02:39:12 +00:00
}
2004-10-05 13:18:28 +00:00
spacing ( ) . set ( spacetranslator ( ) . find ( nspacing ) , tmp_val ) ;
2003-03-12 02:39:12 +00:00
} else if ( token = = " \\ float_placement " ) {
2004-10-05 13:18:28 +00:00
lex > > float_placement ;
2007-09-20 22:31:18 +00:00
} else if ( prefixIs ( token , " \\ pdf_ " ) | | token = = " \\ use_hyperref " ) {
2007-09-20 22:42:16 +00:00
string toktmp = pdfoptions ( ) . readToken ( lex , token ) ;
2007-09-20 22:31:18 +00:00
if ( ! toktmp . empty ( ) ) {
lyxerr < < " PDFOptions::readToken(): Unknown token: " < <
toktmp < < endl ;
return toktmp ;
}
2010-03-18 20:35:08 +00:00
} else if ( token = = " \\ html_math_output " ) {
int temp ;
lex > > temp ;
html_math_output = static_cast < MathOutput > ( temp ) ;
2009-12-30 22:22:33 +00:00
} else if ( token = = " \\ html_be_strict " ) {
lex > > html_be_strict ;
2011-02-15 17:44:17 +00:00
} else if ( token = = " \\ html_css_as_file " ) {
lex > > html_css_as_file ;
2010-04-21 15:18:25 +00:00
} else if ( token = = " \\ html_math_img_scale " ) {
lex > > html_math_img_scale ;
} else if ( token = = " \\ html_latex_start " ) {
2010-05-24 19:34:43 +00:00
lex . eatLine ( ) ;
html_latex_start = lex . getString ( ) ;
2010-04-21 15:18:25 +00:00
} else if ( token = = " \\ html_latex_end " ) {
2010-05-24 19:34:43 +00:00
lex . eatLine ( ) ;
html_latex_end = lex . getString ( ) ;
2010-05-25 11:36:00 +00:00
} else if ( token = = " \\ output_sync " ) {
lex > > output_sync ;
} else if ( token = = " \\ output_sync_macro " ) {
lex > > output_sync_macro ;
2010-10-13 12:36:53 +00:00
} else if ( token = = " \\ use_refstyle " ) {
lex > > use_refstyle ;
2003-03-12 02:39:12 +00:00
} else {
2011-12-03 22:15:11 +00:00
lyxerr < < " BufferParams::readToken(): Unknown token: " < <
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
token < < endl ;
2003-03-12 02:39:12 +00:00
return token ;
}
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
return result ;
2003-03-12 02:39:12 +00:00
}
2015-08-15 16:32:41 +00:00
namespace {
// Quote argument if it contains spaces
string quoteIfNeeded ( string const & str ) {
if ( contains ( str , ' ' ) )
return " \" " + str + " \" " ;
return str ;
}
}
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
void BufferParams : : writeFile ( ostream & os , Buffer const * buf ) const
1999-09-27 18:44:28 +00:00
{
// The top of the file is written by the buffer.
// Prints out the buffer info into the .lyx file given by file
2016-01-10 22:17:59 +00:00
// the document directory (must end with a path separator)
// realPath() is used to resolve symlinks, while addPath(..., "")
// ensures a trailing path separator.
string filepath = addPath ( buf - > fileName ( ) . onlyPath ( ) . realPath ( ) , " " ) ;
string const sysdir = addPath ( package ( ) . system_support ( ) . realPath ( ) , " " ) ;
2015-12-18 19:20:04 +00:00
string const relpath =
to_utf8 ( makeRelPath ( from_utf8 ( filepath ) , from_utf8 ( sysdir ) ) ) ;
if ( ! prefixIs ( relpath , " ../ " ) & & ! FileName : : isAbsolute ( relpath ) )
filepath = addPath ( " /systemlyxdir " , relpath ) ;
2015-05-25 22:29:46 +00:00
else if ( ! lyxrc . save_origin )
filepath = " unavailable " ;
2015-08-15 16:32:41 +00:00
os < < " \\ origin " < < quoteIfNeeded ( filepath ) < < ' \n ' ;
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
2002-03-21 17:27:08 +00:00
// the textclass
2015-08-15 16:32:41 +00:00
os < < " \\ textclass "
< < quoteIfNeeded ( buf - > includedFilePath ( addName ( buf - > layoutPos ( ) ,
baseClass ( ) - > name ( ) ) , " layout " ) )
Fix bug #4812 (Layout in local directory lost on Save As, Copying)
The "save-as" part of the bug is fixed by extending the \textclass tag
such that, if a local layout file is used, its path relative to the
document directory is now stored together with the name. If a relative
path cannot be used, an absolute one is used but, in this case, the
document is not usable on a different platform.
The "copy" part is fixed by introducing a new \origin tag, which is
written when the file is saved. This tag stores the absolute path of
the document directory. If the document is manually copied to a
different location, the local layout file is retrivied by using
\origin (which is only updated on save).
This new tag may prove useful also for locating other files when the
document is manually moved to a different directory.
As in the original implementation the files needed for the layout
(for example, a latex class) had to be in the same directory as the
layout file, this directory has also to be added to TEXINPUTS.
2015-05-13 19:40:51 +00:00
< < ' \n ' ;
2002-03-21 17:27:08 +00:00
2007-03-12 15:15:21 +00:00
// then the preamble
1999-09-27 18:44:28 +00:00
if ( ! preamble . empty ( ) ) {
1999-12-07 00:44:53 +00:00
// remove '\n' from the end of preamble
2002-07-28 22:50:13 +00:00
string const tmppreamble = rtrim ( preamble , " \n " ) ;
1999-12-07 00:44:53 +00:00
os < < " \\ begin_preamble \n "
2000-02-22 00:36:17 +00:00
< < tmppreamble
1999-12-07 00:44:53 +00:00
< < " \n \\ end_preamble \n " ;
1999-09-27 18:44:28 +00:00
}
2002-03-21 17:27:08 +00:00
2005-01-05 20:21:27 +00:00
// the options
1999-09-27 18:44:28 +00:00
if ( ! options . empty ( ) ) {
1999-12-07 00:44:53 +00:00
os < < " \\ options " < < options < < ' \n ' ;
1999-09-27 18:44:28 +00:00
}
2008-04-28 16:38:56 +00:00
2008-10-12 09:36:00 +00:00
// use the class options defined in the layout?
2011-12-03 22:15:11 +00:00
os < < " \\ use_default_options "
2008-10-12 09:36:00 +00:00
< < convert < string > ( use_default_options ) < < " \n " ;
2008-04-28 16:38:56 +00:00
// the master document
if ( ! master . empty ( ) ) {
os < < " \\ master " < < master < < ' \n ' ;
}
2011-12-03 22:15:11 +00:00
2008-07-27 17:46:27 +00:00
// removed modules
2010-11-26 18:42:53 +00:00
if ( ! removed_modules_ . empty ( ) ) {
2008-07-27 17:46:27 +00:00
os < < " \\ begin_removed_modules " < < ' \n ' ;
2010-11-26 18:42:53 +00:00
list < string > : : const_iterator it = removed_modules_ . begin ( ) ;
list < string > : : const_iterator en = removed_modules_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = en ; + + it )
2008-07-27 17:46:27 +00:00
os < < * it < < ' \n ' ;
os < < " \\ end_removed_modules " < < ' \n ' ;
}
// the modules
2010-11-26 18:42:53 +00:00
if ( ! layout_modules_ . empty ( ) ) {
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
os < < " \\ begin_modules " < < ' \n ' ;
2010-11-26 18:42:53 +00:00
LayoutModuleList : : const_iterator it = layout_modules_ . begin ( ) ;
LayoutModuleList : : const_iterator en = layout_modules_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = en ; + + it )
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
os < < * it < < ' \n ' ;
os < < " \\ end_modules " < < ' \n ' ;
}
2010-01-07 10:01:26 +00:00
// includeonly
2010-11-26 18:42:53 +00:00
if ( ! included_children_ . empty ( ) ) {
2010-01-07 10:01:26 +00:00
os < < " \\ begin_includeonly " < < ' \n ' ;
2010-11-26 18:42:53 +00:00
list < string > : : const_iterator it = included_children_ . begin ( ) ;
list < string > : : const_iterator en = included_children_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = en ; + + it )
2010-01-07 10:01:26 +00:00
os < < * it < < ' \n ' ;
os < < " \\ end_includeonly " < < ' \n ' ;
}
2010-01-10 13:25:41 +00:00
os < < " \\ maintain_unincluded_children "
< < convert < string > ( maintain_unincluded_children ) < < ' \n ' ;
2010-01-07 10:01:26 +00:00
2008-03-24 12:31:07 +00:00
// local layout information
2013-05-15 05:19:49 +00:00
string const local_layout = getLocalLayout ( false ) ;
2008-03-24 12:31:07 +00:00
if ( ! local_layout . empty ( ) ) {
2011-12-03 22:15:11 +00:00
// remove '\n' from the end
2008-03-24 12:31:07 +00:00
string const tmplocal = rtrim ( local_layout , " \n " ) ;
os < < " \\ begin_local_layout \n "
< < tmplocal
< < " \n \\ end_local_layout \n " ;
}
2013-05-15 05:19:49 +00:00
string const forced_local_layout = getLocalLayout ( true ) ;
if ( ! forced_local_layout . empty ( ) ) {
// remove '\n' from the end
string const tmplocal = rtrim ( forced_local_layout , " \n " ) ;
os < < " \\ begin_forced_local_layout \n "
< < tmplocal
< < " \n \\ end_forced_local_layout \n " ;
}
2008-03-24 12:31:07 +00:00
2005-01-05 20:21:27 +00:00
// then the text parameters
2001-07-27 12:03:36 +00:00
if ( language ! = ignore_language )
os < < " \\ language " < < language - > lang ( ) < < ' \n ' ;
2011-02-03 14:17:31 +00:00
os < < " \\ language_package " < < lang_package
< < " \n \\ inputencoding " < < inputenc
2009-11-29 14:43:00 +00:00
< < " \n \\ fontencoding " < < fontenc
2015-11-09 06:33:57 +00:00
< < " \n \\ font_roman \" " < < fonts_roman [ 0 ]
< < " \" \" " < < fonts_roman [ 1 ] < < ' " '
< < " \n \\ font_sans \" " < < fonts_sans [ 0 ]
< < " \" \" " < < fonts_sans [ 1 ] < < ' " '
< < " \n \\ font_typewriter \" " < < fonts_typewriter [ 0 ]
< < " \" \" " < < fonts_typewriter [ 1 ] < < ' " '
2015-11-09 19:06:36 +00:00
< < " \n \\ font_math \" " < < fonts_math [ 0 ]
2015-11-09 06:33:57 +00:00
< < " \" \" " < < fonts_math [ 1 ] < < ' " '
2010-11-26 18:32:29 +00:00
< < " \n \\ font_default_family " < < fonts_default_family
2010-11-26 09:42:03 +00:00
< < " \n \\ use_non_tex_fonts " < < convert < string > ( useNonTeXFonts )
2010-11-26 18:32:29 +00:00
< < " \n \\ font_sc " < < convert < string > ( fonts_expert_sc )
< < " \n \\ font_osf " < < convert < string > ( fonts_old_figures )
2015-11-09 06:33:57 +00:00
< < " \n \\ font_sf_scale " < < fonts_sans_scale [ 0 ]
< < ' ' < < fonts_sans_scale [ 1 ]
< < " \n \\ font_tt_scale " < < fonts_typewriter_scale [ 0 ]
< < ' ' < < fonts_typewriter_scale [ 1 ]
2008-06-05 06:18:34 +00:00
< < ' \n ' ;
2010-11-26 18:32:29 +00:00
if ( ! fonts_cjk . empty ( ) ) {
os < < " \\ font_cjk " < < fonts_cjk < < ' \n ' ;
2008-06-05 06:18:34 +00:00
}
2012-06-25 09:24:04 +00:00
os < < " \\ graphics " < < graphics_driver < < ' \n ' ;
2010-11-26 18:42:53 +00:00
os < < " \\ default_output_format " < < default_output_format < < ' \n ' ;
2010-05-25 11:36:00 +00:00
os < < " \\ output_sync " < < output_sync < < ' \n ' ;
if ( ! output_sync_macro . empty ( ) )
os < < " \\ output_sync_macro \" " < < output_sync_macro < < " \" \n " ;
2009-05-22 07:20:00 +00:00
os < < " \\ bibtex_command " < < bibtex_command < < ' \n ' ;
os < < " \\ index_command " < < index_command < < ' \n ' ;
1999-09-27 18:44:28 +00:00
if ( ! float_placement . empty ( ) ) {
1999-12-07 00:44:53 +00:00
os < < " \\ float_placement " < < float_placement < < ' \n ' ;
1999-09-27 18:44:28 +00:00
}
1999-12-07 00:44:53 +00:00
os < < " \\ paperfontsize " < < fontsize < < ' \n ' ;
1999-09-27 18:44:28 +00:00
2003-09-09 17:00:19 +00:00
spacing ( ) . writeFile ( os ) ;
2007-09-20 22:31:18 +00:00
pdfoptions ( ) . writeFile ( os ) ;
1999-09-27 18:44:28 +00:00
2005-07-16 16:57:55 +00:00
os < < " \\ papersize " < < string_papersize [ papersize ]
2012-01-03 21:26:09 +00:00
< < " \n \\ use_geometry " < < convert < string > ( use_geometry ) ;
2013-03-01 14:59:37 +00:00
map < string , string > const & packages = auto_packages ( ) ;
for ( map < string , string > : : const_iterator it = packages . begin ( ) ;
it ! = packages . end ( ) ; + + it )
os < < " \n \\ use_package " < < it - > first < < ' '
< < use_package ( it - > first ) ;
2012-03-01 00:41:30 +00:00
os < < " \n \\ cite_engine " ;
if ( ! cite_engine_ . empty ( ) ) {
LayoutModuleList : : const_iterator be = cite_engine_ . begin ( ) ;
LayoutModuleList : : const_iterator en = cite_engine_ . end ( ) ;
for ( LayoutModuleList : : const_iterator it = be ; it ! = en ; + + it ) {
if ( it ! = be )
os < < ' , ' ;
os < < * it ;
}
} else {
os < < " basic " ;
}
os < < " \n \\ cite_engine_type " < < citeenginetypetranslator ( ) . find ( cite_engine_type_ )
2011-12-12 14:40:34 +00:00
< < " \n \\ biblio_style " < < biblio_style
2005-01-06 15:40:49 +00:00
< < " \n \\ use_bibtopic " < < convert < string > ( use_bibtopic )
2009-04-16 07:29:01 +00:00
< < " \n \\ use_indices " < < convert < string > ( use_indices )
1999-12-07 00:44:53 +00:00
< < " \n \\ paperorientation " < < string_orientation [ orientation ]
2009-08-14 00:52:33 +00:00
< < " \n \\ suppress_date " < < convert < string > ( suppress_date )
2011-12-07 22:33:25 +00:00
< < " \n \\ justification " < < convert < string > ( justification )
2011-12-08 20:05:51 +00:00
< < " \n \\ use_refstyle " < < use_refstyle
1999-12-07 00:44:53 +00:00
< < ' \n ' ;
2010-04-05 20:31:10 +00:00
if ( isbackgroundcolor = = true )
2009-05-18 10:53:02 +00:00
os < < " \\ backgroundcolor " < < lyx : : X11hexname ( backgroundcolor ) < < ' \n ' ;
2010-04-02 23:59:42 +00:00
if ( isfontcolor = = true )
2010-04-02 23:39:36 +00:00
os < < " \\ fontcolor " < < lyx : : X11hexname ( fontcolor ) < < ' \n ' ;
2010-04-02 23:59:42 +00:00
if ( notefontcolor ! = lyx : : rgbFromHexName ( " #cccccc " ) )
2010-03-31 00:46:50 +00:00
os < < " \\ notefontcolor " < < lyx : : X11hexname ( notefontcolor ) < < ' \n ' ;
2010-04-08 00:14:08 +00:00
if ( boxbgcolor ! = lyx : : rgbFromHexName ( " #ff0000 " ) )
os < < " \\ boxbgcolor " < < lyx : : X11hexname ( boxbgcolor ) < < ' \n ' ;
2003-08-17 11:28:23 +00:00
2005-10-25 15:21:49 +00:00
BranchList : : const_iterator it = branchlist ( ) . begin ( ) ;
BranchList : : const_iterator end = branchlist ( ) . end ( ) ;
2003-08-17 11:28:23 +00:00
for ( ; it ! = end ; + + it ) {
2008-09-21 19:27:20 +00:00
os < < " \\ branch " < < to_utf8 ( it - > branch ( ) )
< < " \n \\ selected " < < it - > isSelected ( )
2010-04-21 01:19:35 +00:00
< < " \n \\ filename_suffix " < < it - > hasFileNameSuffix ( )
2008-09-21 19:27:20 +00:00
< < " \n \\ color " < < lyx : : X11hexname ( it - > color ( ) )
2003-09-09 17:25:35 +00:00
< < " \n \\ end_branch "
2003-08-17 11:28:23 +00:00
< < " \n " ;
}
2009-04-16 07:29:01 +00:00
IndicesList : : const_iterator iit = indiceslist ( ) . begin ( ) ;
IndicesList : : const_iterator iend = indiceslist ( ) . end ( ) ;
for ( ; iit ! = iend ; + + iit ) {
os < < " \\ index " < < to_utf8 ( iit - > index ( ) )
< < " \n \\ shortcut " < < to_utf8 ( iit - > shortcut ( ) )
< < " \n \\ color " < < lyx : : X11hexname ( iit - > color ( ) )
< < " \n \\ end_index "
< < " \n " ;
}
2002-03-21 17:27:08 +00:00
if ( ! paperwidth . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ paperwidth "
< < VSpace ( paperwidth ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! paperheight . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ paperheight "
< < VSpace ( paperheight ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! leftmargin . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ leftmargin "
< < VSpace ( leftmargin ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! topmargin . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ topmargin "
< < VSpace ( topmargin ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! rightmargin . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ rightmargin "
< < VSpace ( rightmargin ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! bottommargin . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ bottommargin "
< < VSpace ( bottommargin ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! headheight . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ headheight "
< < VSpace ( headheight ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! headsep . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ headsep "
< < VSpace ( headsep ) . asLyXCommand ( ) < < ' \n ' ;
2002-03-21 17:27:08 +00:00
if ( ! footskip . empty ( ) )
1999-12-07 00:44:53 +00:00
os < < " \\ footskip "
< < VSpace ( footskip ) . asLyXCommand ( ) < < ' \n ' ;
2008-02-19 05:24:48 +00:00
if ( ! columnsep . empty ( ) )
2011-12-03 22:15:11 +00:00
os < < " \\ columnsep "
2008-02-19 05:24:48 +00:00
< < VSpace ( columnsep ) . asLyXCommand ( ) < < ' \n ' ;
1999-12-07 00:44:53 +00:00
os < < " \\ secnumdepth " < < secnumdepth
< < " \n \\ tocdepth " < < tocdepth
< < " \n \\ paragraph_separation "
2009-07-19 21:13:27 +00:00
< < string_paragraph_separation [ paragraph_separation ] ;
if ( ! paragraph_separation )
os < < " \n \\ paragraph_indentation " < < getIndentation ( ) . asLyXCommand ( ) ;
else
os < < " \n \\ defskip " < < getDefSkip ( ) . asLyXCommand ( ) ;
os < < " \n \\ quotes_language "
2005-10-13 10:59:39 +00:00
< < string_quotes_language [ quotes_language ]
2004-10-05 13:18:28 +00:00
< < " \n \\ papercolumns " < < columns
1999-12-07 00:44:53 +00:00
< < " \n \\ papersides " < < sides
< < " \n \\ paperpagestyle " < < pagestyle < < ' \n ' ;
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
if ( ! listings_params . empty ( ) )
2007-05-28 22:27:45 +00:00
os < < " \\ listings_params \" " < <
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
InsetListingsParams ( listings_params ) . encodedString ( ) < < " \" \n " ;
1999-09-27 18:44:28 +00:00
for ( int i = 0 ; i < 4 ; + + i ) {
2003-09-09 17:00:19 +00:00
if ( user_defined_bullet ( i ) ! = ITEMIZE_DEFAULTS [ i ] ) {
if ( user_defined_bullet ( i ) . getFont ( ) ! = - 1 ) {
2004-08-14 18:41:27 +00:00
os < < " \\ bullet " < < i < < " "
< < user_defined_bullet ( i ) . getFont ( ) < < " "
< < user_defined_bullet ( i ) . getCharacter ( ) < < " "
< < user_defined_bullet ( i ) . getSize ( ) < < " \n " ;
1999-09-27 18:44:28 +00:00
}
else {
2006-10-20 19:26:23 +00:00
// FIXME UNICODE
2004-08-14 18:41:27 +00:00
os < < " \\ bulletLaTeX " < < i < < " \" "
2006-10-20 19:26:23 +00:00
< < lyx : : to_ascii ( user_defined_bullet ( i ) . getText ( ) )
2004-08-14 18:41:27 +00:00
< < " \" \n " ;
1999-09-27 18:44:28 +00:00
}
}
}
2003-02-08 19:18:01 +00:00
2014-03-29 22:52:36 +00:00
os < < " \\ tracking_changes " < < convert < string > ( track_changes ) < < ' \n '
2015-12-20 13:08:49 +00:00
< < " \\ output_changes " < < convert < string > ( output_changes ) < < ' \n '
2011-02-15 17:44:17 +00:00
< < " \\ html_math_output " < < html_math_output < < ' \n '
2011-02-16 14:54:06 +00:00
< < " \\ html_css_as_file " < < html_css_as_file < < ' \n '
2011-02-15 17:44:17 +00:00
< < " \\ html_be_strict " < < convert < string > ( html_be_strict ) < < ' \n ' ;
2011-12-03 22:15:11 +00:00
2010-05-24 19:38:14 +00:00
if ( html_math_img_scale ! = 1.0 )
os < < " \\ html_math_img_scale " < < convert < string > ( html_math_img_scale ) < < ' \n ' ;
if ( ! html_latex_start . empty ( ) )
os < < " \\ html_latex_start " < < html_latex_start < < ' \n ' ;
if ( ! html_latex_end . empty ( ) )
os < < " \\ html_latex_end " < < html_latex_end < < ' \n ' ;
2003-03-12 02:39:12 +00:00
2009-07-23 20:08:05 +00:00
os < < pimpl_ - > authorlist ;
1999-09-27 18:44:28 +00:00
}
2007-12-14 14:51:47 +00:00
void BufferParams : : validate ( LaTeXFeatures & features ) const
{
2008-02-28 01:42:02 +00:00
features . require ( documentClass ( ) . requires ( ) ) ;
2008-01-07 16:59:10 +00:00
2012-09-22 21:14:34 +00:00
if ( columns > 1 & & language - > rightToLeft ( ) )
features . require ( " rtloutputdblcol " ) ;
2014-03-29 22:52:36 +00:00
if ( output_changes ) {
2007-12-14 14:51:47 +00:00
bool dvipost = LaTeXFeatures : : isAvailable ( " dvipost " ) ;
2009-01-12 08:01:28 +00:00
bool xcolorulem = LaTeXFeatures : : isAvailable ( " ulem " ) & &
2007-12-14 14:51:47 +00:00
LaTeXFeatures : : isAvailable ( " xcolor " ) ;
switch ( features . runparams ( ) . flavor ) {
case OutputParams : : LATEX :
2011-08-10 02:23:44 +00:00
case OutputParams : : DVILUATEX :
2007-12-14 14:51:47 +00:00
if ( dvipost ) {
features . require ( " ct-dvipost " ) ;
features . require ( " dvipost " ) ;
2009-01-12 08:01:28 +00:00
} else if ( xcolorulem ) {
features . require ( " ct-xcolor-ulem " ) ;
features . require ( " ulem " ) ;
2007-12-14 14:51:47 +00:00
features . require ( " xcolor " ) ;
} else {
features . require ( " ct-none " ) ;
}
break ;
2010-11-23 16:07:42 +00:00
case OutputParams : : LUATEX :
2007-12-14 14:51:47 +00:00
case OutputParams : : PDFLATEX :
2009-04-06 06:58:30 +00:00
case OutputParams : : XETEX :
2009-01-12 08:01:28 +00:00
if ( xcolorulem ) {
features . require ( " ct-xcolor-ulem " ) ;
features . require ( " ulem " ) ;
2007-12-14 14:51:47 +00:00
features . require ( " xcolor " ) ;
// improves color handling in PDF output
2011-12-03 22:15:11 +00:00
features . require ( " pdfcolmk " ) ;
2007-12-14 14:51:47 +00:00
} else {
features . require ( " ct-none " ) ;
}
break ;
default :
break ;
}
}
// Floats with 'Here definitely' as default setting.
if ( float_placement . find ( ' H ' ) ! = string : : npos )
features . require ( " float " ) ;
2012-01-03 20:51:07 +00:00
for ( PackageMap : : const_iterator it = use_packages . begin ( ) ;
it ! = use_packages . end ( ) ; + + it ) {
if ( it - > first = = " amsmath " ) {
// AMS Style is at document level
if ( it - > second = = package_on | |
2012-09-19 13:46:19 +00:00
features . isProvided ( " amsmath " ) )
2012-01-03 20:51:07 +00:00
features . require ( it - > first ) ;
} else if ( it - > second = = package_on )
features . require ( it - > first ) ;
}
2007-12-14 14:51:47 +00:00
2008-01-22 08:41:45 +00:00
// Document-level line spacing
if ( spacing ( ) . getSpace ( ) ! = Spacing : : Single & & ! spacing ( ) . isDefault ( ) )
features . require ( " setspace " ) ;
2007-12-14 14:51:47 +00:00
// the bullet shapes are buffer level not paragraph level
// so they are tested here
for ( int i = 0 ; i < 4 ; + + i ) {
2011-12-03 22:15:11 +00:00
if ( user_defined_bullet ( i ) = = ITEMIZE_DEFAULTS [ i ] )
2007-12-14 14:51:47 +00:00
continue ;
int const font = user_defined_bullet ( i ) . getFont ( ) ;
if ( font = = 0 ) {
int const c = user_defined_bullet ( i ) . getCharacter ( ) ;
if ( c = = 16
| | c = = 17
| | c = = 25
| | c = = 26
| | c = = 31 ) {
features . require ( " latexsym " ) ;
}
} else if ( font = = 1 ) {
features . require ( " amssymb " ) ;
} else if ( font > = 2 & & font < = 5 ) {
features . require ( " pifont " ) ;
}
}
2008-01-19 11:17:12 +00:00
2008-09-29 19:18:00 +00:00
if ( pdfoptions ( ) . use_hyperref ) {
2008-01-19 11:17:12 +00:00
features . require ( " hyperref " ) ;
2008-09-29 19:18:00 +00:00
// due to interferences with babel and hyperref, the color package has to
// be loaded after hyperref when hyperref is used with the colorlinks
2009-12-11 00:59:10 +00:00
// option, see http://www.lyx.org/trac/ticket/5291
2008-09-29 19:18:00 +00:00
if ( pdfoptions ( ) . colorlinks )
features . require ( " color " ) ;
}
2014-02-26 19:43:04 +00:00
if ( ! listings_params . empty ( ) ) {
// do not test validity because listings_params is
// supposed to be valid
string par =
InsetListingsParams ( listings_params ) . separatedParams ( true ) ;
// we can't support all packages, but we should load the color package
if ( par . find ( " \\ color " , 0 ) ! = string : : npos )
features . require ( " color " ) ;
}
2008-07-15 13:08:27 +00:00
2012-06-08 00:37:36 +00:00
// some languages are only available via polyglossia
2016-01-08 21:51:58 +00:00
if ( features . hasPolyglossiaExclusiveLanguages ( ) )
features . require ( " polyglossia " ) ;
2009-04-06 06:58:30 +00:00
2015-11-09 06:33:57 +00:00
if ( useNonTeXFonts & & fontsMath ( ) ! = " auto " )
2012-09-24 11:56:37 +00:00
features . require ( " unicode-math " ) ;
2012-06-09 09:32:34 +00:00
if ( ! language - > requires ( ) . empty ( ) )
features . require ( language - > requires ( ) ) ;
2007-12-14 14:51:47 +00:00
}
2011-02-13 21:41:44 +00:00
bool BufferParams : : writeLaTeX ( otexstream & os , LaTeXFeatures & features ,
FileName const & filepath ) const
2003-02-16 00:54:43 +00:00
{
2011-01-28 10:04:52 +00:00
// http://www.tug.org/texmf-dist/doc/latex/base/fixltx2e.pdf
// !! To use the Fix-cm package, load it before \documentclass, and use the command
// \RequirePackage to do so, rather than the normal \usepackage
2011-09-22 16:03:48 +00:00
// Do not try to load any other package before the document class, unless you
2011-01-28 10:04:52 +00:00
// have a thorough understanding of the LATEX internals and know exactly what you
// are doing!
2011-02-13 21:41:44 +00:00
if ( features . mustProvide ( " fix-cm " ) )
2011-01-28 10:04:52 +00:00
os < < " \\ RequirePackage{fix-cm} \n " ;
2015-03-17 09:24:16 +00:00
// Likewise for fixltx2e. If other packages conflict with this policy,
// treat it as a package bug (and report it!)
// See http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/4407
if ( features . mustProvide ( " fixltx2e " ) )
os < < " \\ RequirePackage{fixltx2e} \n " ;
2011-01-28 10:04:52 +00:00
2003-02-16 00:54:43 +00:00
os < < " \\ documentclass " ;
2008-02-28 01:42:02 +00:00
DocumentClass const & tclass = documentClass ( ) ;
2008-02-24 14:59:23 +00:00
2003-02-16 00:54:43 +00:00
ostringstream clsoptions ; // the document class options.
if ( tokenPos ( tclass . opt_fontsize ( ) ,
' | ' , fontsize ) > = 0 ) {
// only write if existing in list (and not default)
clsoptions < < fontsize < < " pt, " ;
}
2010-05-18 01:22:08 +00:00
// all paper sizes except of A4, A5, B5 and the US sizes need the
// geometry package
2010-05-21 01:33:50 +00:00
bool nonstandard_papersize = papersize ! = PAPER_DEFAULT
& & papersize ! = PAPER_USLETTER
2010-05-18 01:22:08 +00:00
& & papersize ! = PAPER_USLEGAL
& & papersize ! = PAPER_USEXECUTIVE
& & papersize ! = PAPER_A4
& & papersize ! = PAPER_A5
& & papersize ! = PAPER_B5 ;
2003-02-16 00:54:43 +00:00
2005-07-17 11:17:13 +00:00
if ( ! use_geometry ) {
2003-02-16 00:54:43 +00:00
switch ( papersize ) {
2005-07-16 16:57:55 +00:00
case PAPER_A4 :
2003-02-16 00:54:43 +00:00
clsoptions < < " a4paper, " ;
break ;
case PAPER_USLETTER :
clsoptions < < " letterpaper, " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_A5 :
2003-02-16 00:54:43 +00:00
clsoptions < < " a5paper, " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_B5 :
2003-02-16 00:54:43 +00:00
clsoptions < < " b5paper, " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_USEXECUTIVE :
2003-02-16 00:54:43 +00:00
clsoptions < < " executivepaper, " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_USLEGAL :
2003-02-16 00:54:43 +00:00
clsoptions < < " legalpaper, " ;
break ;
2003-06-10 14:39:45 +00:00
case PAPER_DEFAULT :
2010-05-18 01:22:08 +00:00
case PAPER_A0 :
case PAPER_A1 :
case PAPER_A2 :
2005-07-16 16:57:55 +00:00
case PAPER_A3 :
2010-05-18 01:22:08 +00:00
case PAPER_A6 :
case PAPER_B0 :
case PAPER_B1 :
case PAPER_B2 :
2005-07-16 16:57:55 +00:00
case PAPER_B3 :
case PAPER_B4 :
2010-05-18 01:22:08 +00:00
case PAPER_B6 :
2010-07-13 01:06:20 +00:00
case PAPER_C0 :
case PAPER_C1 :
case PAPER_C2 :
case PAPER_C3 :
case PAPER_C4 :
case PAPER_C5 :
case PAPER_C6 :
2010-05-18 01:22:08 +00:00
case PAPER_JISB0 :
case PAPER_JISB1 :
case PAPER_JISB2 :
case PAPER_JISB3 :
case PAPER_JISB4 :
case PAPER_JISB5 :
case PAPER_JISB6 :
2005-07-16 16:57:55 +00:00
case PAPER_CUSTOM :
2003-06-10 14:39:45 +00:00
break ;
2003-02-16 00:54:43 +00:00
}
}
// if needed
if ( sides ! = tclass . sides ( ) ) {
switch ( sides ) {
2007-11-07 23:25:08 +00:00
case OneSide :
2003-02-16 00:54:43 +00:00
clsoptions < < " oneside, " ;
break ;
2007-11-07 23:25:08 +00:00
case TwoSides :
2003-02-16 00:54:43 +00:00
clsoptions < < " twoside, " ;
break ;
}
}
// if needed
if ( columns ! = tclass . columns ( ) ) {
if ( columns = = 2 )
clsoptions < < " twocolumn, " ;
else
clsoptions < < " onecolumn, " ;
}
if ( ! use_geometry
& & orientation = = ORIENTATION_LANDSCAPE )
clsoptions < < " landscape, " ;
// language should be a parameter to \documentclass
if ( language - > babel ( ) = = " hebrew "
& & default_language - > babel ( ) ! = " hebrew " )
// This seems necessary
features . useLanguage ( default_language ) ;
2003-05-23 11:18:43 +00:00
ostringstream language_options ;
2012-09-19 13:46:19 +00:00
bool const use_babel = features . useBabel ( ) & & ! features . isProvided ( " babel " ) ;
2010-11-22 12:10:16 +00:00
bool const use_polyglossia = features . usePolyglossia ( ) ;
bool const global = lyxrc . language_global_options ;
if ( use_babel | | ( use_polyglossia & & global ) ) {
2012-06-23 11:50:40 +00:00
language_options < < features . getBabelLanguages ( ) ;
2007-05-05 19:18:34 +00:00
if ( ! language - > babel ( ) . empty ( ) ) {
if ( ! language_options . str ( ) . empty ( ) )
language_options < < ' , ' ;
language_options < < language - > babel ( ) ;
}
2012-06-08 17:48:24 +00:00
if ( global & & ! features . needBabelLangOptions ( )
& & ! language_options . str ( ) . empty ( ) )
2003-02-16 00:54:43 +00:00
clsoptions < < language_options . str ( ) < < ' , ' ;
}
2008-10-12 09:36:00 +00:00
// the predefined options from the layout
if ( use_default_options & & ! tclass . options ( ) . empty ( ) )
clsoptions < < tclass . options ( ) < < ' , ' ;
2003-02-16 00:54:43 +00:00
// the user-defined options
if ( ! options . empty ( ) ) {
clsoptions < < options < < ' , ' ;
}
2003-09-15 11:00:00 +00:00
string strOptions ( clsoptions . str ( ) ) ;
2003-02-16 00:54:43 +00:00
if ( ! strOptions . empty ( ) ) {
strOptions = rtrim ( strOptions , " , " ) ;
2006-10-19 16:51:30 +00:00
// FIXME UNICODE
2006-10-21 00:16:43 +00:00
os < < ' [ ' < < from_utf8 ( strOptions ) < < ' ] ' ;
2003-02-16 00:54:43 +00:00
}
2006-10-21 00:16:43 +00:00
os < < ' { ' < < from_ascii ( tclass . latexname ( ) ) < < " } \n " ;
2003-02-16 00:54:43 +00:00
// end of \documentclass defs
2013-09-01 08:21:21 +00:00
// if we use fontspec or newtxmath, we have to load the AMS packages here
2010-12-08 18:42:10 +00:00
string const ams = features . loadAMSPackages ( ) ;
2013-09-01 08:21:21 +00:00
bool const ot1 = ( font_encoding ( ) = = " default " | | font_encoding ( ) = = " OT1 " ) ;
bool const use_newtxmath =
2015-11-09 06:33:57 +00:00
theLaTeXFonts ( ) . getLaTeXFont ( from_ascii ( fontsMath ( ) ) ) . getUsedPackage (
2013-09-01 08:21:21 +00:00
ot1 , false , false ) = = " newtxmath " ;
if ( ( useNonTeXFonts | | use_newtxmath ) & & ! ams . empty ( ) )
2010-12-08 18:42:10 +00:00
os < < from_ascii ( ams ) ;
2012-09-24 11:19:25 +00:00
if ( useNonTeXFonts ) {
2009-04-06 06:58:30 +00:00
os < < " \\ usepackage{fontspec} \n " ;
2012-09-24 11:56:37 +00:00
if ( features . mustProvide ( " unicode-math " )
& & features . isAvailable ( " unicode-math " ) )
2012-09-24 11:19:25 +00:00
os < < " \\ usepackage{unicode-math} \n " ;
}
2009-04-06 06:58:30 +00:00
2003-02-16 00:54:43 +00:00
// font selection must be done before loading fontenc.sty
2012-09-22 10:14:24 +00:00
string const fonts = loadFonts ( features ) ;
2011-02-13 21:41:44 +00:00
if ( ! fonts . empty ( ) )
2011-05-23 17:14:29 +00:00
os < < from_utf8 ( fonts ) ;
2011-02-13 21:41:44 +00:00
2010-11-26 18:32:29 +00:00
if ( fonts_default_family ! = " default " )
2006-09-09 15:27:44 +00:00
os < < " \\ renewcommand{ \\ familydefault}{ \\ "
2010-11-26 18:32:29 +00:00
< < from_ascii ( fonts_default_family ) < < " } \n " ;
2007-06-22 22:23:37 +00:00
// set font encoding
2015-01-24 13:02:16 +00:00
// XeTeX and LuaTeX (with OS fonts) do not need fontenc
if ( ! useNonTeXFonts & & ! features . isProvided ( " fontenc " )
& & font_encoding ( ) ! = " default " ) {
2015-04-02 15:13:45 +00:00
// get main font encodings
vector < string > fontencs = font_encodings ( ) ;
2015-01-24 13:02:16 +00:00
// get font encodings of secondary languages
features . getFontEncodings ( fontencs ) ;
if ( ! fontencs . empty ( ) ) {
os < < " \\ usepackage[ "
< < from_ascii ( getStringFromVector ( fontencs ) )
2007-06-22 22:31:49 +00:00
< < " ]{fontenc} \n " ;
}
2003-02-16 00:54:43 +00:00
}
2007-05-28 07:43:15 +00:00
// handle inputenc etc.
2011-02-13 21:41:44 +00:00
writeEncodingPreamble ( os , features ) ;
2007-05-01 17:48:04 +00:00
2010-01-07 10:01:26 +00:00
// includeonly
2010-11-26 18:42:53 +00:00
if ( ! features . runparams ( ) . includeall & & ! included_children_ . empty ( ) ) {
2010-01-07 10:01:26 +00:00
os < < " \\ includeonly{ " ;
2010-11-26 18:42:53 +00:00
list < string > : : const_iterator it = included_children_ . begin ( ) ;
list < string > : : const_iterator en = included_children_ . end ( ) ;
2010-01-07 10:01:26 +00:00
bool first = true ;
2010-11-26 18:42:53 +00:00
for ( ; it ! = en ; + + it ) {
2010-01-07 10:01:26 +00:00
string incfile = * it ;
2010-04-21 01:19:09 +00:00
FileName inc = makeAbsPath ( incfile , filepath . absFileName ( ) ) ;
string mangled = DocFileName ( changeExtension ( inc . absFileName ( ) , " .tex " ) ) .
2010-04-21 01:19:23 +00:00
mangledFileName ( ) ;
2010-01-07 10:01:26 +00:00
if ( ! features . runparams ( ) . nice )
incfile = mangled ;
2011-12-03 22:15:11 +00:00
// \includeonly doesn't want an extension
2010-01-07 10:01:26 +00:00
incfile = changeExtension ( incfile , string ( ) ) ;
2010-03-06 16:18:16 +00:00
incfile = support : : latex_path ( incfile ) ;
2010-01-07 10:01:26 +00:00
if ( ! incfile . empty ( ) ) {
if ( ! first )
os < < " , " ;
os < < from_utf8 ( incfile ) ;
}
first = false ;
}
os < < " } \n " ;
}
2012-09-19 13:46:19 +00:00
if ( ! features . isProvided ( " geometry " )
2010-05-18 18:10:54 +00:00
& & ( use_geometry | | nonstandard_papersize ) ) {
2008-12-19 09:32:04 +00:00
odocstringstream ods ;
if ( ! getGraphicsDriver ( " geometry " ) . empty ( ) )
ods < < getGraphicsDriver ( " geometry " ) ;
2003-02-16 00:54:43 +00:00
if ( orientation = = ORIENTATION_LANDSCAPE )
2008-12-19 09:32:04 +00:00
ods < < " ,landscape " ;
2005-07-16 16:57:55 +00:00
switch ( papersize ) {
case PAPER_CUSTOM :
2003-02-16 00:54:43 +00:00
if ( ! paperwidth . empty ( ) )
2008-12-19 09:32:04 +00:00
ods < < " ,paperwidth= "
2006-10-21 00:16:43 +00:00
< < from_ascii ( paperwidth ) ;
2003-02-16 00:54:43 +00:00
if ( ! paperheight . empty ( ) )
2008-12-19 09:32:04 +00:00
ods < < " ,paperheight= "
2006-10-21 00:16:43 +00:00
< < from_ascii ( paperheight ) ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_USLETTER :
2008-12-19 09:32:04 +00:00
ods < < " ,letterpaper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_USLEGAL :
2008-12-19 09:32:04 +00:00
ods < < " ,legalpaper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_USEXECUTIVE :
2008-12-19 09:32:04 +00:00
ods < < " ,executivepaper " ;
2003-02-16 00:54:43 +00:00
break ;
2010-05-18 01:22:08 +00:00
case PAPER_A0 :
ods < < " ,a0paper " ;
break ;
case PAPER_A1 :
ods < < " ,a1paper " ;
break ;
case PAPER_A2 :
ods < < " ,a2paper " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_A3 :
2008-12-19 09:32:04 +00:00
ods < < " ,a3paper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_A4 :
2008-12-19 09:32:04 +00:00
ods < < " ,a4paper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_A5 :
2008-12-19 09:32:04 +00:00
ods < < " ,a5paper " ;
2003-02-16 00:54:43 +00:00
break ;
2010-05-18 01:22:08 +00:00
case PAPER_A6 :
ods < < " ,a6paper " ;
break ;
case PAPER_B0 :
ods < < " ,b0paper " ;
break ;
case PAPER_B1 :
ods < < " ,b1paper " ;
break ;
case PAPER_B2 :
ods < < " ,b2paper " ;
break ;
2005-07-16 16:57:55 +00:00
case PAPER_B3 :
2008-12-19 09:32:04 +00:00
ods < < " ,b3paper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_B4 :
2008-12-19 09:32:04 +00:00
ods < < " ,b4paper " ;
2003-02-16 00:54:43 +00:00
break ;
2005-07-16 16:57:55 +00:00
case PAPER_B5 :
2008-12-19 09:32:04 +00:00
ods < < " ,b5paper " ;
2003-02-16 00:54:43 +00:00
break ;
2010-05-18 01:22:08 +00:00
case PAPER_B6 :
ods < < " ,b6paper " ;
break ;
2010-07-13 01:06:20 +00:00
case PAPER_C0 :
ods < < " ,c0paper " ;
break ;
case PAPER_C1 :
ods < < " ,c1paper " ;
break ;
case PAPER_C2 :
ods < < " ,c2paper " ;
break ;
case PAPER_C3 :
ods < < " ,c3paper " ;
break ;
case PAPER_C4 :
ods < < " ,c4paper " ;
break ;
case PAPER_C5 :
ods < < " ,c5paper " ;
break ;
case PAPER_C6 :
ods < < " ,c6paper " ;
break ;
2010-05-18 01:22:08 +00:00
case PAPER_JISB0 :
ods < < " ,b0j " ;
break ;
case PAPER_JISB1 :
ods < < " ,b1j " ;
break ;
case PAPER_JISB2 :
ods < < " ,b2j " ;
break ;
case PAPER_JISB3 :
ods < < " ,b3j " ;
break ;
case PAPER_JISB4 :
ods < < " ,b4j " ;
break ;
case PAPER_JISB5 :
ods < < " ,b5j " ;
break ;
case PAPER_JISB6 :
ods < < " ,b6j " ;
break ;
2011-10-27 11:48:16 +00:00
case PAPER_DEFAULT :
break ;
2003-02-16 00:54:43 +00:00
}
2008-12-19 09:32:04 +00:00
docstring const g_options = trim ( ods . str ( ) , " , " ) ;
os < < " \\ usepackage " ;
if ( ! g_options . empty ( ) )
os < < ' [ ' < < g_options < < ' ] ' ;
os < < " {geometry} \n " ;
2010-06-26 17:03:47 +00:00
// output this only if use_geometry is true
2010-05-18 02:56:36 +00:00
if ( use_geometry ) {
os < < " \\ geometry{verbose " ;
if ( ! topmargin . empty ( ) )
os < < " ,tmargin= " < < from_ascii ( Length ( topmargin ) . asLatexString ( ) ) ;
if ( ! bottommargin . empty ( ) )
os < < " ,bmargin= " < < from_ascii ( Length ( bottommargin ) . asLatexString ( ) ) ;
if ( ! leftmargin . empty ( ) )
os < < " ,lmargin= " < < from_ascii ( Length ( leftmargin ) . asLatexString ( ) ) ;
if ( ! rightmargin . empty ( ) )
os < < " ,rmargin= " < < from_ascii ( Length ( rightmargin ) . asLatexString ( ) ) ;
if ( ! headheight . empty ( ) )
os < < " ,headheight= " < < from_ascii ( Length ( headheight ) . asLatexString ( ) ) ;
if ( ! headsep . empty ( ) )
os < < " ,headsep= " < < from_ascii ( Length ( headsep ) . asLatexString ( ) ) ;
if ( ! footskip . empty ( ) )
os < < " ,footskip= " < < from_ascii ( Length ( footskip ) . asLatexString ( ) ) ;
if ( ! columnsep . empty ( ) )
os < < " ,columnsep= " < < from_ascii ( Length ( columnsep ) . asLatexString ( ) ) ;
os < < " } \n " ;
}
2010-05-18 18:10:54 +00:00
} else if ( orientation = = ORIENTATION_LANDSCAPE
| | papersize ! = PAPER_DEFAULT ) {
2008-07-01 12:46:46 +00:00
features . require ( " papersize " ) ;
2003-02-16 00:54:43 +00:00
}
2011-02-13 21:41:44 +00:00
if ( tokenPos ( tclass . opt_pagestyle ( ) , ' | ' , pagestyle ) > = 0 ) {
if ( pagestyle = = " fancy " )
2003-02-16 00:54:43 +00:00
os < < " \\ usepackage{fancyhdr} \n " ;
2006-10-21 00:16:43 +00:00
os < < " \\ pagestyle{ " < < from_ascii ( pagestyle ) < < " } \n " ;
2003-02-16 00:54:43 +00:00
}
2010-04-05 20:31:10 +00:00
// only output when the background color is not default
if ( isbackgroundcolor = = true ) {
2009-04-11 21:40:11 +00:00
// only require color here, the background color will be defined
// in LaTeXFeatures.cpp to avoid interferences with the LaTeX
2011-12-03 22:15:11 +00:00
// package pdfpages
2009-04-11 21:40:11 +00:00
features . require ( " color " ) ;
features . require ( " pagecolor " ) ;
}
2010-04-02 23:59:42 +00:00
// only output when the font color is not default
2010-04-02 23:39:36 +00:00
if ( isfontcolor = = true ) {
// only require color here, the font color will be defined
// in LaTeXFeatures.cpp to avoid interferences with the LaTeX
2011-12-03 22:15:11 +00:00
// package pdfpages
2010-04-02 23:39:36 +00:00
features . require ( " color " ) ;
features . require ( " fontcolor " ) ;
}
2006-03-24 11:57:19 +00:00
// Only if class has a ToC hierarchy
if ( tclass . hasTocLevels ( ) ) {
if ( secnumdepth ! = tclass . secnumdepth ( ) ) {
os < < " \\ setcounter{secnumdepth}{ "
< < secnumdepth
< < " } \n " ;
}
if ( tocdepth ! = tclass . tocdepth ( ) ) {
os < < " \\ setcounter{tocdepth}{ "
< < tocdepth
< < " } \n " ;
}
2003-02-16 00:54:43 +00:00
}
if ( paragraph_separation ) {
2009-07-19 21:13:27 +00:00
// when skip separation
2003-09-09 17:00:19 +00:00
switch ( getDefSkip ( ) . kind ( ) ) {
2003-02-16 00:54:43 +00:00
case VSpace : : SMALLSKIP :
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parskip}{ \\ smallskipamount} \n " ;
2003-02-16 00:54:43 +00:00
break ;
case VSpace : : MEDSKIP :
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parskip}{ \\ medskipamount} \n " ;
2003-02-16 00:54:43 +00:00
break ;
case VSpace : : BIGSKIP :
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parskip}{ \\ bigskipamount} \n " ;
2003-02-16 00:54:43 +00:00
break ;
case VSpace : : LENGTH :
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parskip}{ "
2006-10-22 10:15:23 +00:00
< < from_utf8 ( getDefSkip ( ) . length ( ) . asLatexString ( ) )
2003-02-16 00:54:43 +00:00
< < " } \n " ;
break ;
default : // should never happen // Then delete it.
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parskip}{ \\ medskipamount} \n " ;
2003-02-16 00:54:43 +00:00
break ;
}
2007-01-03 10:40:12 +00:00
os < < " \\ setlength{ \\ parindent}{0pt} \n " ;
2009-07-19 21:13:27 +00:00
} else {
// when separation by indentation
// only output something when a width is given
if ( getIndentation ( ) . asLyXCommand ( ) ! = " default " ) {
os < < " \\ setlength{ \\ parindent}{ "
2011-02-13 21:41:44 +00:00
< < from_utf8 ( getIndentation ( ) . asLatexCommand ( ) )
2009-07-19 21:13:27 +00:00
< < " } \n " ;
}
2003-02-16 00:54:43 +00:00
}
2008-09-29 19:18:00 +00:00
// Now insert the LyX specific LaTeX commands...
docstring lyxpreamble ;
2011-10-18 19:32:02 +00:00
features . resolveAlternatives ( ) ;
2008-09-29 19:18:00 +00:00
2010-05-25 11:36:00 +00:00
if ( output_sync ) {
if ( ! output_sync_macro . empty ( ) )
lyxpreamble + = from_utf8 ( output_sync_macro ) + " \n " ;
else if ( features . runparams ( ) . flavor = = OutputParams : : LATEX )
lyxpreamble + = " \\ usepackage[active]{srcltx} \n " ;
else if ( features . runparams ( ) . flavor = = OutputParams : : PDFLATEX )
lyxpreamble + = " \\ synctex=-1 \n " ;
}
2014-12-21 11:10:06 +00:00
// The package options (via \PassOptionsToPackage)
lyxpreamble + = from_ascii ( features . getPackageOptions ( ) ) ;
2008-09-29 19:18:00 +00:00
// due to interferences with babel and hyperref, the color package has to
// be loaded (when it is not already loaded) before babel when hyperref
// is used with the colorlinks option, see
2009-12-11 00:59:10 +00:00
// http://www.lyx.org/trac/ticket/5291
2008-09-29 19:18:00 +00:00
// we decided therefore to load color always before babel, see
// http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg144349.html
lyxpreamble + = from_ascii ( features . getColorOptions ( ) ) ;
2011-12-03 22:15:11 +00:00
2013-04-02 21:53:27 +00:00
// If we use hyperref, jurabib, japanese, varioref or vietnamese,
// we have to call babel before
2008-07-18 22:22:17 +00:00
if ( use_babel
2010-11-22 12:10:16 +00:00
& & ( features . isRequired ( " jurabib " )
| | features . isRequired ( " hyperref " )
2013-04-02 21:53:27 +00:00
| | features . isRequired ( " varioref " )
2010-11-22 12:10:16 +00:00
| | features . isRequired ( " vietnamese " )
| | features . isRequired ( " japanese " ) ) ) {
// FIXME UNICODE
lyxpreamble + = from_utf8 ( features . getBabelPresettings ( ) ) ;
lyxpreamble + = from_utf8 ( babelCall ( language_options . str ( ) ,
features . needBabelLangOptions ( ) ) ) + ' \n ' ;
lyxpreamble + = from_utf8 ( features . getBabelPostsettings ( ) ) ;
2004-03-07 14:33:17 +00:00
}
2004-04-03 08:37:12 +00:00
2003-02-16 00:54:43 +00:00
// The optional packages;
2008-09-29 19:18:00 +00:00
lyxpreamble + = from_ascii ( features . getPackages ( ) ) ;
2003-02-16 00:54:43 +00:00
2009-04-16 07:29:01 +00:00
// Additional Indices
if ( features . isRequired ( " splitidx " ) ) {
IndicesList : : const_iterator iit = indiceslist ( ) . begin ( ) ;
IndicesList : : const_iterator iend = indiceslist ( ) . end ( ) ;
for ( ; iit ! = iend ; + + iit ) {
2012-06-30 11:34:49 +00:00
pair < docstring , docstring > indexname_latex =
2012-07-01 06:38:54 +00:00
features . runparams ( ) . encoding - > latexString ( iit - > index ( ) ,
features . runparams ( ) . dryrun ) ;
2012-06-30 11:34:49 +00:00
if ( ! indexname_latex . second . empty ( ) ) {
// issue a warning about omitted characters
// FIXME: should be passed to the error dialog
frontend : : Alert : : warning ( _ ( " Uncodable characters " ) ,
bformat ( _ ( " The following characters that are used in an index name are not \n "
2012-07-01 06:38:54 +00:00
" representable in the current encoding and therefore have been omitted: \n %1$s. " ) ,
indexname_latex . second ) ) ;
2012-06-30 11:34:49 +00:00
}
2009-04-16 07:29:01 +00:00
lyxpreamble + = " \\ newindex[ " ;
2012-06-30 11:34:49 +00:00
lyxpreamble + = indexname_latex . first ;
2009-04-16 07:29:01 +00:00
lyxpreamble + = " ]{ " ;
2012-06-30 11:34:49 +00:00
lyxpreamble + = escape ( iit - > shortcut ( ) ) ;
2009-04-16 07:29:01 +00:00
lyxpreamble + = " } \n " ;
}
}
2008-01-22 08:41:45 +00:00
// Line spacing
2012-09-19 13:46:19 +00:00
lyxpreamble + = from_utf8 ( spacing ( ) . writePreamble ( features . isProvided ( " SetSpace " ) ) ) ;
2008-01-22 08:41:45 +00:00
2007-09-25 21:20:57 +00:00
// PDF support.
// * Hyperref manual: "Make sure it comes last of your loaded
// packages, to give it a fighting chance of not being over-written,
2008-10-11 12:47:51 +00:00
// since its job is to redefine many LaTeX commands."
2007-09-25 21:20:57 +00:00
// * Email from Heiko Oberdiek: "It is usually better to load babel
// before hyperref. Then hyperref has a chance to detect babel.
// * Has to be loaded before the "LyX specific LaTeX commands" to
// avoid errors with algorithm floats.
2010-03-01 17:39:41 +00:00
// use hyperref explicitly if it is required
2008-01-24 01:20:51 +00:00
if ( features . isRequired ( " hyperref " ) ) {
2011-12-03 22:15:11 +00:00
// pass what we have to stream here, since we need
2010-03-01 17:39:41 +00:00
// to access the stream itself in PDFOptions.
os < < lyxpreamble ;
OutputParams tmp_params = features . runparams ( ) ;
2011-02-13 21:41:44 +00:00
pdfoptions ( ) . writeLaTeX ( tmp_params , os ,
2012-09-19 13:46:19 +00:00
features . isProvided ( " hyperref " ) ) ;
2010-03-01 17:39:41 +00:00
// set back for the rest
lyxpreamble . clear ( ) ;
2010-12-13 07:58:07 +00:00
// correctly break URLs with hyperref and dvi output
if ( features . runparams ( ) . flavor = = OutputParams : : LATEX
& & features . isAvailable ( " breakurl " ) )
lyxpreamble + = " \\ usepackage{breakurl} \n " ;
2010-07-13 03:23:29 +00:00
} else if ( features . isRequired ( " nameref " ) )
// hyperref loads this automatically
lyxpreamble + = " \\ usepackage{nameref} \n " ;
2010-03-01 17:39:41 +00:00
2012-05-29 11:25:30 +00:00
// bibtopic needs to be loaded after hyperref.
// the dot provides the aux file naming which LyX can detect.
if ( features . mustProvide ( " bibtopic " ) )
lyxpreamble + = " \\ usepackage[dot]{bibtopic} \n " ;
2009-05-26 17:38:27 +00:00
// Will be surrounded by \makeatletter and \makeatother when not empty
2008-05-10 22:35:17 +00:00
docstring atlyxpreamble ;
2003-02-16 00:54:43 +00:00
// Some macros LyX will need
2009-06-09 18:16:43 +00:00
docstring tmppreamble ( features . getMacros ( ) ) ;
2003-02-16 00:54:43 +00:00
2008-05-10 22:35:17 +00:00
if ( ! tmppreamble . empty ( ) )
atlyxpreamble + = " \n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
2003-02-16 00:54:43 +00:00
" LyX specific LaTeX commands. \n "
+ tmppreamble + ' \n ' ;
// the text class specific preamble
tmppreamble = features . getTClassPreamble ( ) ;
2008-05-10 22:35:17 +00:00
if ( ! tmppreamble . empty ( ) )
atlyxpreamble + = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
2003-02-16 00:54:43 +00:00
" Textclass specific LaTeX commands. \n "
+ tmppreamble + ' \n ' ;
2009-08-15 23:43:59 +00:00
// suppress date if selected
// use \@ifundefined because we cannot be sure that every document class
// has a \date command
if ( suppress_date )
atlyxpreamble + = " \\ @ifundefined{date}{}{ \\ date{}} \n " ;
2003-02-16 00:54:43 +00:00
/* the user-defined preamble */
2015-06-15 19:08:40 +00:00
if ( ! containsOnly ( preamble , " \n \t " ) ) {
2006-11-08 17:22:44 +00:00
// FIXME UNICODE
2009-05-26 17:38:27 +00:00
atlyxpreamble + = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
2015-06-15 19:08:40 +00:00
" User specified LaTeX commands. \n " ;
// Check if the user preamble contains uncodable glyphs
docstring const u_preamble = from_utf8 ( preamble ) ;
odocstringstream user_preamble ;
docstring uncodable_glyphs ;
Encoding const * const enc = features . runparams ( ) . encoding ;
if ( enc ) {
for ( size_t n = 0 ; n < u_preamble . size ( ) ; + + n ) {
char_type c = u_preamble [ n ] ;
if ( ! enc - > encodable ( c ) ) {
docstring const glyph ( 1 , c ) ;
LYXERR0 ( " Uncodable character ' "
< < glyph
< < " ' in user preamble! " ) ;
uncodable_glyphs + = glyph ;
if ( features . runparams ( ) . dryrun ) {
user_preamble < < " < " < < _ ( " LyX Warning: " )
< < _ ( " uncodable character " ) < < " ' " ;
user_preamble . put ( c ) ;
user_preamble < < " '> " ;
}
} else
2015-06-17 08:22:46 +00:00
user_preamble . put ( c ) ;
2015-06-15 19:08:40 +00:00
}
} else
user_preamble < < u_preamble ;
// On BUFFER_VIEW|UPDATE, warn user if we found uncodable glyphs
if ( ! features . runparams ( ) . dryrun & & ! uncodable_glyphs . empty ( ) ) {
frontend : : Alert : : warning (
_ ( " Uncodable character in user preamble " ) ,
support : : bformat (
_ ( " The user preamble of your document contains glyphs "
" that are unknown in the current document encoding "
" (namely %1$s). \n These glyphs are omitted "
" from the output, which may result in "
" incomplete output. "
" \n \n Please select an appropriate "
" document encoding \n "
" (such as utf8) or change the "
" preamble code accordingly. " ) ,
uncodable_glyphs ) ) ;
}
atlyxpreamble + = user_preamble . str ( ) + ' \n ' ;
}
2003-02-16 00:54:43 +00:00
2014-11-14 19:20:35 +00:00
// footmisc must be loaded after setspace
// Load it here to avoid clashes with footmisc loaded in the user
// preamble. For that reason we also pass the options via
// \PassOptionsToPackage in getPreamble() and not here.
if ( features . mustProvide ( " footmisc " ) )
atlyxpreamble + = " \\ usepackage{footmisc} \n " ;
2008-06-30 11:02:21 +00:00
// subfig loads internally the LaTeX package "caption". As
// caption is a very popular package, users will load it in
// the preamble. Therefore we must load subfig behind the
// user-defined preamble and check if the caption package was
// loaded or not. For the case that caption is loaded before
// subfig, there is the subfig option "caption=false". This
// option also works when a koma-script class is used and
// koma's own caption commands are used instead of caption. We
// use \PassOptionsToPackage here because the user could have
// already loaded subfig in the preamble.
2008-05-13 01:23:50 +00:00
if ( features . isRequired ( " subfig " ) ) {
atlyxpreamble + = " \\ @ifundefined{showcaptionsetup}{}{% \n "
2008-05-13 20:46:49 +00:00
" \\ PassOptionsToPackage{caption=false}{subfig}} \n "
" \\ usepackage{subfig} \n " ;
2008-05-13 01:23:50 +00:00
}
2003-02-16 00:54:43 +00:00
// Itemize bullet settings need to be last in case the user
// defines their own bullets that use a package included
// in the user-defined preamble -- ARRae
// Actually it has to be done much later than that
// since some packages like frenchb make modifications
// at \begin{document} time -- JMarc
2006-11-08 17:22:44 +00:00
docstring bullets_def ;
2003-02-16 00:54:43 +00:00
for ( int i = 0 ; i < 4 ; + + i ) {
2003-09-09 17:00:19 +00:00
if ( user_defined_bullet ( i ) ! = ITEMIZE_DEFAULTS [ i ] ) {
2003-02-16 00:54:43 +00:00
if ( bullets_def . empty ( ) )
2006-11-08 17:22:44 +00:00
bullets_def + = " \\ AtBeginDocument{ \n " ;
2006-03-10 16:25:20 +00:00
bullets_def + = " \\ def \\ labelitemi " ;
2003-02-16 00:54:43 +00:00
switch ( i ) {
// `i' is one less than the item to modify
case 0 :
break ;
case 1 :
bullets_def + = ' i ' ;
break ;
case 2 :
bullets_def + = " ii " ;
break ;
case 3 :
bullets_def + = ' v ' ;
break ;
}
2006-03-10 16:25:20 +00:00
bullets_def + = ' { ' +
2006-11-08 17:22:44 +00:00
user_defined_bullet ( i ) . getText ( )
2003-02-16 00:54:43 +00:00
+ " } \n " ;
}
}
2008-05-10 22:35:17 +00:00
if ( ! bullets_def . empty ( ) )
atlyxpreamble + = bullets_def + " } \n \n " ;
2003-02-16 00:54:43 +00:00
2009-05-26 17:38:27 +00:00
if ( ! atlyxpreamble . empty ( ) )
lyxpreamble + = " \n \\ makeatletter \n "
2008-05-10 22:35:17 +00:00
+ atlyxpreamble + " \\ makeatother \n \n " ;
2003-02-16 00:54:43 +00:00
2008-09-29 19:18:00 +00:00
// We try to load babel late, in case it interferes with other packages.
2015-03-16 19:31:38 +00:00
// Jurabib, hyperref, varioref, bicaption and listings (bug 8995) have to be
2014-02-26 19:43:04 +00:00
// called after babel, though.
2008-07-15 13:08:27 +00:00
if ( use_babel & & ! features . isRequired ( " jurabib " )
& & ! features . isRequired ( " hyperref " )
2013-04-02 21:53:27 +00:00
& & ! features . isRequired ( " varioref " )
2008-07-15 13:08:27 +00:00
& & ! features . isRequired ( " vietnamese " )
& & ! features . isRequired ( " japanese " ) ) {
// FIXME UNICODE
2010-11-14 09:54:24 +00:00
lyxpreamble + = from_utf8 ( features . getBabelPresettings ( ) ) ;
2010-11-14 10:35:35 +00:00
lyxpreamble + = from_utf8 ( babelCall ( language_options . str ( ) ,
features . needBabelLangOptions ( ) ) ) + ' \n ' ;
2010-11-14 09:54:24 +00:00
lyxpreamble + = from_utf8 ( features . getBabelPostsettings ( ) ) ;
2008-07-15 13:08:27 +00:00
}
2015-03-16 19:31:38 +00:00
if ( features . isRequired ( " bicaption " ) )
lyxpreamble + = " \\ usepackage{bicaption} \n " ;
2014-02-26 19:43:04 +00:00
if ( ! listings_params . empty ( ) | | features . isRequired ( " listings " ) )
lyxpreamble + = " \\ usepackage{listings} \n " ;
if ( ! listings_params . empty ( ) ) {
lyxpreamble + = " \\ lstset{ " ;
// do not test validity because listings_params is
// supposed to be valid
string par =
InsetListingsParams ( listings_params ) . separatedParams ( true ) ;
lyxpreamble + = from_utf8 ( par ) ;
lyxpreamble + = " } \n " ;
}
2008-07-15 13:08:27 +00:00
2010-11-27 13:43:13 +00:00
// xunicode needs to be loaded at least after amsmath, amssymb,
// esint and the other packages that provide special glyphs
2013-12-05 16:39:16 +00:00
if ( features . runparams ( ) . flavor = = OutputParams : : XETEX
& & useNonTeXFonts )
2010-12-08 12:10:22 +00:00
lyxpreamble + = " \\ usepackage{xunicode} \n " ;
2010-11-27 13:43:13 +00:00
// Polyglossia must be loaded last
2010-11-22 12:10:16 +00:00
if ( use_polyglossia ) {
// call the package
2010-12-08 12:10:22 +00:00
lyxpreamble + = " \\ usepackage{polyglossia} \n " ;
2010-11-22 12:10:16 +00:00
// set the main language
2010-12-08 12:10:22 +00:00
lyxpreamble + = " \\ setdefaultlanguage " ;
2010-11-22 12:10:16 +00:00
if ( ! language - > polyglossiaOpts ( ) . empty ( ) )
2010-12-08 12:10:22 +00:00
lyxpreamble + = " [ " + from_ascii ( language - > polyglossiaOpts ( ) ) + " ] " ;
lyxpreamble + = " { " + from_ascii ( language - > polyglossia ( ) ) + " } \n " ;
2010-11-22 12:10:16 +00:00
// now setup the other languages
2011-12-03 22:15:11 +00:00
std : : map < std : : string , std : : string > const polylangs =
2010-11-22 12:10:16 +00:00
features . getPolyglossiaLanguages ( ) ;
for ( std : : map < std : : string , std : : string > : : const_iterator mit = polylangs . begin ( ) ;
mit ! = polylangs . end ( ) ; + + mit ) {
2010-12-08 12:10:22 +00:00
lyxpreamble + = " \\ setotherlanguage " ;
2010-11-22 12:10:16 +00:00
if ( ! mit - > second . empty ( ) )
2010-12-08 12:10:22 +00:00
lyxpreamble + = " [ " + from_ascii ( mit - > second ) + " ] " ;
lyxpreamble + = " { " + from_ascii ( mit - > first ) + " } \n " ;
2010-11-22 12:10:16 +00:00
}
}
2010-12-08 12:10:22 +00:00
2012-07-23 12:34:24 +00:00
// Load custom language package here
if ( features . langPackage ( ) = = LaTeXFeatures : : LANG_PACK_CUSTOM ) {
if ( lang_package = = " default " )
lyxpreamble + = from_utf8 ( lyxrc . language_custom_package ) ;
else
lyxpreamble + = from_utf8 ( lang_package ) ;
lyxpreamble + = ' \n ' ;
}
2010-12-08 12:10:22 +00:00
docstring const i18npreamble =
features . getTClassI18nPreamble ( use_babel , use_polyglossia ) ;
if ( ! i18npreamble . empty ( ) )
lyxpreamble + = i18npreamble + ' \n ' ;
os < < lyxpreamble ;
2003-05-22 22:44:30 +00:00
return use_babel ;
2003-02-16 00:54:43 +00:00
}
2005-01-05 20:21:27 +00:00
2001-09-17 15:39:58 +00:00
void BufferParams : : useClassDefaults ( )
{
2008-02-28 21:04:55 +00:00
DocumentClass const & tclass = documentClass ( ) ;
1999-11-04 01:40:20 +00:00
sides = tclass . sides ( ) ;
columns = tclass . columns ( ) ;
pagestyle = tclass . pagestyle ( ) ;
2008-10-12 09:36:00 +00:00
use_default_options = true ;
2006-03-24 11:57:19 +00:00
// Only if class has a ToC hierarchy
if ( tclass . hasTocLevels ( ) ) {
secnumdepth = tclass . secnumdepth ( ) ;
tocdepth = tclass . tocdepth ( ) ;
}
1999-09-27 18:44:28 +00:00
}
2001-09-17 15:39:58 +00:00
bool BufferParams : : hasClassDefaults ( ) const
{
2008-02-28 21:04:55 +00:00
DocumentClass const & tclass = documentClass ( ) ;
2002-03-21 17:27:08 +00:00
2008-02-24 15:44:11 +00:00
return sides = = tclass . sides ( )
2001-09-17 15:39:58 +00:00
& & columns = = tclass . columns ( )
& & pagestyle = = tclass . pagestyle ( )
2008-10-12 09:36:00 +00:00
& & use_default_options
2001-09-17 15:39:58 +00:00
& & secnumdepth = = tclass . secnumdepth ( )
2008-02-24 15:44:11 +00:00
& & tocdepth = = tclass . tocdepth ( ) ;
2001-09-17 15:39:58 +00:00
}
2008-02-28 01:42:02 +00:00
DocumentClass const & BufferParams : : documentClass ( ) const
2002-07-21 21:21:06 +00:00
{
2012-03-13 16:13:31 +00:00
return * doc_class_ . get ( ) ;
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This first patch does some reworking of the infrastructrue. We need to distinguish between the TextClass that a particular document is using and the layout of that document, since modules, in particular, can modify the layout. The solution adopted here is to add a TextClass pointer to BufferParams, which will hold the layout. The layout itself is then constructed from the TextClass the document is using. At present, this is completely trivial, but that will change when modules are added.
The pointer in question is a boost::shared_ptr. This is needed because CutAndPaste saves a copy of the layout with each cut or copied selection. We cannot assume the selection vanishes when the document is closed, so there are two options: (i) keep a list of all the layouts that have ever been used by any document; (ii) used some kind of smart pointer. The latter seems preferable, as the former would waste memory. More importantly, the use of a smart pointer allows modules to be modified on disk and then reloaded while LyX is running, and it will eventually allow the same for layout files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19756 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-23 16:41:13 +00:00
}
2012-03-13 16:13:31 +00:00
DocumentClassConstPtr BufferParams : : documentClassPtr ( ) const
2010-10-18 14:20:03 +00:00
{
2008-02-28 01:42:02 +00:00
return doc_class_ ;
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This first patch does some reworking of the infrastructrue. We need to distinguish between the TextClass that a particular document is using and the layout of that document, since modules, in particular, can modify the layout. The solution adopted here is to add a TextClass pointer to BufferParams, which will hold the layout. The layout itself is then constructed from the TextClass the document is using. At present, this is completely trivial, but that will change when modules are added.
The pointer in question is a boost::shared_ptr. This is needed because CutAndPaste saves a copy of the layout with each cut or copied selection. We cannot assume the selection vanishes when the document is closed, so there are two options: (i) keep a list of all the layouts that have ever been used by any document; (ii) used some kind of smart pointer. The latter seems preferable, as the former would waste memory. More importantly, the use of a smart pointer allows modules to be modified on disk and then reloaded while LyX is running, and it will eventually allow the same for layout files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19756 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-23 16:41:13 +00:00
}
2012-03-13 16:13:31 +00:00
void BufferParams : : setDocumentClass ( DocumentClassConstPtr tc )
2010-10-18 14:20:03 +00:00
{
2008-02-28 01:42:02 +00:00
// evil, but this function is evil
2012-03-13 16:13:31 +00:00
doc_class_ = const_pointer_cast < DocumentClass > ( tc ) ;
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This first patch does some reworking of the infrastructrue. We need to distinguish between the TextClass that a particular document is using and the layout of that document, since modules, in particular, can modify the layout. The solution adopted here is to add a TextClass pointer to BufferParams, which will hold the layout. The layout itself is then constructed from the TextClass the document is using. At present, this is completely trivial, but that will change when modules are added.
The pointer in question is a boost::shared_ptr. This is needed because CutAndPaste saves a copy of the layout with each cut or copied selection. We cannot assume the selection vanishes when the document is closed, so there are two options: (i) keep a list of all the layouts that have ever been used by any document; (ii) used some kind of smart pointer. The latter seems preferable, as the former would waste memory. More importantly, the use of a smart pointer allows modules to be modified on disk and then reloaded while LyX is running, and it will eventually allow the same for layout files.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19756 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-23 16:41:13 +00:00
}
2008-10-16 17:14:46 +00:00
bool BufferParams : : setBaseClass ( string const & classname )
{
LYXERR ( Debug : : TCLASS , " setBaseClass: " < < classname ) ;
LayoutFileList & bcl = LayoutFileList : : get ( ) ;
if ( ! bcl . haveClass ( classname ) ) {
2011-12-03 22:15:11 +00:00
docstring s =
2010-04-07 16:15:26 +00:00
bformat ( _ ( " The layout file: \n "
" %1$s \n "
" could not be found. A default textclass with default \n "
" layouts will be used. LyX will not be able to produce \n "
" correct output. " ) ,
2008-10-16 17:14:46 +00:00
from_utf8 ( classname ) ) ;
frontend : : Alert : : error ( _ ( " Document class not found " ) , s ) ;
bcl . addEmptyClass ( classname ) ;
}
bool const success = bcl [ classname ] . load ( ) ;
if ( ! success ) {
2011-12-03 22:15:11 +00:00
docstring s =
2010-04-07 16:15:26 +00:00
bformat ( _ ( " Due to some error in it, the layout file: \n "
" %1$s \n "
" could not be loaded. A default textclass with default \n "
" layouts will be used. LyX will not be able to produce \n "
" correct output. " ) ,
2008-10-16 17:14:46 +00:00
from_utf8 ( classname ) ) ;
frontend : : Alert : : error ( _ ( " Could not load class " ) , s ) ;
2010-04-07 16:15:26 +00:00
bcl . addEmptyClass ( classname ) ;
2008-10-16 17:14:46 +00:00
}
pimpl_ - > baseClass_ = classname ;
2010-11-26 18:42:53 +00:00
layout_modules_ . adaptToBaseClass ( baseClass ( ) , removed_modules_ ) ;
2008-07-25 16:48:48 +00:00
return true ;
}
LayoutFile const * BufferParams : : baseClass ( ) const
{
if ( LayoutFileList : : get ( ) . haveClass ( pimpl_ - > baseClass_ ) )
return & ( LayoutFileList : : get ( ) [ pimpl_ - > baseClass_ ] ) ;
2011-12-03 22:15:11 +00:00
else
2008-07-25 16:48:48 +00:00
return 0 ;
}
LayoutFileIndex const & BufferParams : : baseClassID ( ) const
{
return pimpl_ - > baseClass_ ;
}
2014-02-09 10:15:57 +00:00
void BufferParams : : makeDocumentClass ( bool const clone )
2008-07-25 16:48:48 +00:00
{
if ( ! baseClass ( ) )
return ;
2012-03-01 00:41:30 +00:00
LayoutModuleList mods ;
2012-12-05 15:49:35 +00:00
LayoutModuleList : : iterator it = layout_modules_ . begin ( ) ;
LayoutModuleList : : iterator en = layout_modules_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = en ; + + it )
2012-03-01 00:41:30 +00:00
mods . push_back ( * it ) ;
2012-12-05 15:49:35 +00:00
2012-03-01 00:41:30 +00:00
it = cite_engine_ . begin ( ) ;
en = cite_engine_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = en ; + + it )
2012-03-01 00:41:30 +00:00
mods . push_back ( * it ) ;
2012-12-05 15:49:35 +00:00
2014-02-09 10:15:57 +00:00
doc_class_ = getDocumentClass ( * baseClass ( ) , mods , clone ) ;
2008-07-25 16:48:48 +00:00
2013-05-15 05:19:49 +00:00
TextClass : : ReturnValues success = TextClass : : OK ;
if ( ! forced_local_layout_ . empty ( ) )
success = doc_class_ - > read ( forced_local_layout_ , TextClass : : MODULE ) ;
if ( ! local_layout_ . empty ( ) & &
( success = = TextClass : : OK | | success = = TextClass : : OK_OLDFORMAT ) )
success = doc_class_ - > read ( local_layout_ , TextClass : : MODULE ) ;
if ( success ! = TextClass : : OK & & success ! = TextClass : : OK_OLDFORMAT ) {
docstring const msg = _ ( " Error reading internal layout information " ) ;
frontend : : Alert : : warning ( _ ( " Read Error " ) , msg ) ;
2008-03-24 12:31:07 +00:00
}
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
}
2010-04-07 13:21:10 +00:00
2012-12-05 16:16:21 +00:00
bool BufferParams : : layoutModuleCanBeAdded ( string const & modName ) const
2008-10-20 19:48:32 +00:00
{
2012-12-05 16:16:21 +00:00
return layout_modules_ . moduleCanBeAdded ( modName , baseClass ( ) ) ;
}
bool BufferParams : : citationModuleCanBeAdded ( string const & modName ) const
{
return cite_engine_ . moduleCanBeAdded ( modName , baseClass ( ) ) ;
2008-10-20 19:48:32 +00:00
}
2013-05-15 05:19:49 +00:00
std : : string BufferParams : : getLocalLayout ( bool forced ) const
{
if ( forced )
return doc_class_ - > forcedLayouts ( ) ;
else
return local_layout_ ;
}
void BufferParams : : setLocalLayout ( string const & layout , bool forced )
{
if ( forced )
forced_local_layout_ = layout ;
else
local_layout_ = layout ;
}
2008-10-20 19:48:32 +00:00
bool BufferParams : : addLayoutModule ( string const & modName )
2008-02-24 15:44:11 +00:00
{
2010-11-26 18:42:53 +00:00
LayoutModuleList : : const_iterator it = layout_modules_ . begin ( ) ;
LayoutModuleList : : const_iterator end = layout_modules_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; it ! = end ; + + it )
2011-12-03 22:15:11 +00:00
if ( * it = = modName )
2008-04-20 15:00:11 +00:00
return false ;
2010-11-26 18:42:53 +00:00
layout_modules_ . push_back ( modName ) ;
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
return true ;
}
2011-05-13 19:39:56 +00:00
string BufferParams : : bufferFormat ( ) const
{
string format = documentClass ( ) . outputFormat ( ) ;
if ( format = = " latex " ) {
if ( useNonTeXFonts )
2015-11-10 23:10:06 +00:00
return " xetex " ; // actually "xetex or luatex"
2011-05-13 19:39:56 +00:00
if ( encoding ( ) . package ( ) = = Encoding : : japanese )
return " platex " ;
}
return format ;
}
bool BufferParams : : isExportable ( string const & format ) const
{
vector < string > backs = backends ( ) ;
for ( vector < string > : : const_iterator it = backs . begin ( ) ;
it ! = backs . end ( ) ; + + it )
if ( theConverters ( ) . isReachable ( * it , format ) )
return true ;
return false ;
}
vector < Format const * > BufferParams : : exportableFormats ( bool only_viewable ) const
{
vector < string > const backs = backends ( ) ;
set < string > excludes ;
if ( useNonTeXFonts ) {
excludes . insert ( " latex " ) ;
excludes . insert ( " pdflatex " ) ;
}
vector < Format const * > result =
theConverters ( ) . getReachable ( backs [ 0 ] , only_viewable , true , excludes ) ;
for ( vector < string > : : const_iterator it = backs . begin ( ) + 1 ;
it ! = backs . end ( ) ; + + it ) {
vector < Format const * > r =
theConverters ( ) . getReachable ( * it , only_viewable , false , excludes ) ;
result . insert ( result . end ( ) , r . begin ( ) , r . end ( ) ) ;
}
return result ;
}
bool BufferParams : : isExportableFormat ( string const & format ) const
{
2011-11-23 18:23:11 +00:00
typedef vector < Format const * > Formats ;
Formats formats ;
formats = exportableFormats ( true ) ;
Formats : : const_iterator fit = formats . begin ( ) ;
Formats : : const_iterator end = formats . end ( ) ;
for ( ; fit ! = end ; + + fit ) {
if ( ( * fit ) - > name ( ) = = format )
return true ;
}
return false ;
2011-05-13 19:39:56 +00:00
}
vector < string > BufferParams : : backends ( ) const
{
vector < string > v ;
2012-03-09 22:24:17 +00:00
string const buffmt = bufferFormat ( ) ;
2011-05-13 19:39:56 +00:00
// FIXME: Don't hardcode format names here, but use a flag
2012-03-09 22:24:17 +00:00
if ( buffmt = = " latex " ) {
if ( ! useNonTeXFonts ) {
v . push_back ( " pdflatex " ) ;
v . push_back ( " latex " ) ;
}
2011-05-13 19:39:56 +00:00
v . push_back ( " luatex " ) ;
2011-08-10 02:23:44 +00:00
v . push_back ( " dviluatex " ) ;
2011-05-13 19:39:56 +00:00
v . push_back ( " xetex " ) ;
2012-03-09 22:24:17 +00:00
} else if ( buffmt = = " xetex " ) {
v . push_back ( " xetex " ) ;
2013-03-31 21:48:05 +00:00
// FIXME: need to test all languages (bug 8205)
if ( ! language | | ! language - > isPolyglossiaExclusive ( ) ) {
v . push_back ( " luatex " ) ;
v . push_back ( " dviluatex " ) ;
}
2012-03-09 22:24:17 +00:00
} else
v . push_back ( buffmt ) ;
2011-05-13 19:39:56 +00:00
v . push_back ( " xhtml " ) ;
v . push_back ( " text " ) ;
v . push_back ( " lyx " ) ;
return v ;
}
2014-07-05 17:13:10 +00:00
OutputParams : : FLAVOR BufferParams : : getOutputFlavor ( string const & format ) const
2011-05-13 19:39:56 +00:00
{
string const dformat = ( format . empty ( ) | | format = = " default " ) ?
getDefaultOutputFormat ( ) : format ;
DefaultFlavorCache : : const_iterator it =
default_flavors_ . find ( dformat ) ;
if ( it ! = default_flavors_ . end ( ) )
return it - > second ;
OutputParams : : FLAVOR result = OutputParams : : LATEX ;
2012-06-09 13:11:34 +00:00
// FIXME It'd be better not to hardcode this, but to do
// something with formats.
2011-05-13 19:39:56 +00:00
if ( dformat = = " xhtml " )
result = OutputParams : : HTML ;
2012-03-09 22:24:20 +00:00
else if ( dformat = = " text " )
result = OutputParams : : TEXT ;
2012-06-05 02:01:26 +00:00
else if ( dformat = = " lyx " )
result = OutputParams : : LYX ;
2012-06-09 13:11:34 +00:00
else if ( dformat = = " pdflatex " )
2015-05-17 15:27:12 +00:00
result = OutputParams : : PDFLATEX ;
2012-06-09 13:11:34 +00:00
else if ( dformat = = " xetex " )
result = OutputParams : : XETEX ;
else if ( dformat = = " luatex " )
result = OutputParams : : LUATEX ;
else if ( dformat = = " dviluatex " )
result = OutputParams : : DVILUATEX ;
2011-05-13 19:39:56 +00:00
else {
// Try to determine flavor of default output format
vector < string > backs = backends ( ) ;
if ( find ( backs . begin ( ) , backs . end ( ) , dformat ) = = backs . end ( ) ) {
// Get shortest path to format
Graph : : EdgePath path ;
for ( vector < string > : : const_iterator it = backs . begin ( ) ;
it ! = backs . end ( ) ; + + it ) {
Graph : : EdgePath p = theConverters ( ) . getPath ( * it , dformat ) ;
if ( ! p . empty ( ) & & ( path . empty ( ) | | p . size ( ) < path . size ( ) ) ) {
path = p ;
}
}
if ( ! path . empty ( ) )
result = theConverters ( ) . getFlavor ( path ) ;
}
}
// cache this flavor
default_flavors_ [ dformat ] = result ;
return result ;
}
string BufferParams : : getDefaultOutputFormat ( ) const
{
if ( ! default_output_format . empty ( )
& & default_output_format ! = " default " )
return default_output_format ;
if ( isDocBook ( )
| | encoding ( ) . package ( ) = = Encoding : : japanese ) {
vector < Format const * > const formats = exportableFormats ( true ) ;
if ( formats . empty ( ) )
return string ( ) ;
// return the first we find
return formats . front ( ) - > name ( ) ;
}
2013-06-01 14:58:34 +00:00
if ( useNonTeXFonts )
return lyxrc . default_otf_view_format ;
2011-05-13 19:39:56 +00:00
return lyxrc . default_view_format ;
}
2007-04-29 18:17:15 +00:00
Font const BufferParams : : getFont ( ) const
2006-02-05 13:20:16 +00:00
{
2008-02-28 01:42:02 +00:00
FontInfo f = documentClass ( ) . defaultfont ( ) ;
2010-11-26 18:32:29 +00:00
if ( fonts_default_family = = " rmdefault " )
2007-10-28 18:51:54 +00:00
f . setFamily ( ROMAN_FAMILY ) ;
2010-11-26 18:32:29 +00:00
else if ( fonts_default_family = = " sfdefault " )
2007-10-28 18:51:54 +00:00
f . setFamily ( SANS_FAMILY ) ;
2010-11-26 18:32:29 +00:00
else if ( fonts_default_family = = " ttdefault " )
2007-10-28 18:51:54 +00:00
f . setFamily ( TYPEWRITER_FAMILY ) ;
return Font ( f , language ) ;
2006-02-05 13:20:16 +00:00
}
2014-07-05 17:13:10 +00:00
InsetQuotes : : QuoteLanguage BufferParams : : getQuoteStyle ( string const & qs ) const
2012-07-01 09:27:42 +00:00
{
return quoteslangtranslator ( ) . find ( qs ) ;
}
2011-05-13 19:39:56 +00:00
bool BufferParams : : isLatex ( ) const
{
return documentClass ( ) . outputType ( ) = = LATEX ;
}
bool BufferParams : : isLiterate ( ) const
{
return documentClass ( ) . outputType ( ) = = LITERATE ;
}
bool BufferParams : : isDocBook ( ) const
{
return documentClass ( ) . outputType ( ) = = DOCBOOK ;
}
2007-04-26 11:30:54 +00:00
void BufferParams : : readPreamble ( Lexer & lex )
1999-09-27 18:44:28 +00:00
{
2001-08-06 19:12:46 +00:00
if ( lex . getString ( ) ! = " \\ begin_preamble " )
1999-10-07 18:44:17 +00:00
lyxerr < < " Error (BufferParams::readPreamble): "
" consistency check failed. " < < endl ;
1999-09-27 18:44:28 +00:00
preamble = lex . getLongString ( " \\ end_preamble " ) ;
}
2013-05-15 05:19:49 +00:00
void BufferParams : : readLocalLayout ( Lexer & lex , bool forced )
2008-03-24 12:31:07 +00:00
{
2013-05-15 05:19:49 +00:00
string const expected = forced ? " \\ begin_forced_local_layout " :
" \\ begin_local_layout " ;
if ( lex . getString ( ) ! = expected )
2008-03-24 12:31:07 +00:00
lyxerr < < " Error (BufferParams::readLocalLayout): "
" consistency check failed. " < < endl ;
2013-05-15 05:19:49 +00:00
if ( forced )
forced_local_layout_ =
lex . getLongString ( " \\ end_forced_local_layout " ) ;
else
local_layout_ = lex . getLongString ( " \\ end_local_layout " ) ;
2008-03-24 12:31:07 +00:00
}
2011-05-08 23:51:44 +00:00
bool BufferParams : : setLanguage ( string const & lang )
{
Language const * new_language = languages . getLanguage ( lang ) ;
if ( ! new_language ) {
// Language lang was not found
return false ;
}
language = new_language ;
return true ;
}
2007-04-26 11:30:54 +00:00
void BufferParams : : readLanguage ( Lexer & lex )
1999-09-27 18:44:28 +00:00
{
if ( ! lex . next ( ) ) return ;
2002-03-21 17:27:08 +00:00
2001-08-06 19:12:46 +00:00
string const tmptok = lex . getString ( ) ;
2000-03-12 10:35:05 +00:00
1999-09-27 18:44:28 +00:00
// check if tmptok is part of tex_babel in tex-defs.h
2011-05-08 23:51:44 +00:00
if ( ! setLanguage ( tmptok ) ) {
2000-10-10 12:36:36 +00:00
// Language tmptok was not found
language = default_language ;
2000-11-28 06:46:06 +00:00
lyxerr < < " Warning: Setting language ` "
< < tmptok < < " ' to ` " < < language - > lang ( )
2000-10-10 12:36:36 +00:00
< < " '. " < < endl ;
1999-09-27 18:44:28 +00:00
}
}
2007-04-26 11:30:54 +00:00
void BufferParams : : readGraphicsDriver ( Lexer & lex )
1999-09-27 18:44:28 +00:00
{
2011-12-03 22:15:11 +00:00
if ( ! lex . next ( ) )
2008-02-24 15:44:11 +00:00
return ;
2002-03-21 17:27:08 +00:00
2001-08-06 19:12:46 +00:00
string const tmptok = lex . getString ( ) ;
1999-09-27 18:44:28 +00:00
// check if tmptok is part of tex_graphics in tex_defs.h
2000-11-21 15:46:13 +00:00
int n = 0 ;
1999-09-27 18:44:28 +00:00
while ( true ) {
2000-11-21 15:46:13 +00:00
string const test = tex_graphics [ n + + ] ;
2002-03-21 17:27:08 +00:00
if ( test = = tmptok ) {
2010-11-26 18:42:53 +00:00
graphics_driver = tmptok ;
1999-09-27 18:44:28 +00:00
break ;
2008-04-05 21:24:57 +00:00
}
if ( test . empty ( ) ) {
1999-09-27 18:44:28 +00:00
lex . printError (
" Warning: graphics driver `$$Token' not recognized! \n "
" Setting graphics driver to `default'. \n " ) ;
2010-11-26 18:42:53 +00:00
graphics_driver = " default " ;
1999-09-27 18:44:28 +00:00
break ;
2002-03-21 17:27:08 +00:00
}
1999-09-27 18:44:28 +00:00
}
}
2003-07-17 08:23:33 +00:00
2007-04-26 11:30:54 +00:00
void BufferParams : : readBullets ( Lexer & lex )
2004-10-05 13:18:28 +00:00
{
2011-12-03 22:15:11 +00:00
if ( ! lex . next ( ) )
2008-02-24 15:44:11 +00:00
return ;
2004-10-05 13:18:28 +00:00
int const index = lex . getInteger ( ) ;
lex . next ( ) ;
int temp_int = lex . getInteger ( ) ;
user_defined_bullet ( index ) . setFont ( temp_int ) ;
temp_bullet ( index ) . setFont ( temp_int ) ;
lex > > temp_int ;
user_defined_bullet ( index ) . setCharacter ( temp_int ) ;
temp_bullet ( index ) . setCharacter ( temp_int ) ;
lex > > temp_int ;
user_defined_bullet ( index ) . setSize ( temp_int ) ;
2004-10-26 21:16:44 +00:00
temp_bullet ( index ) . setSize ( temp_int ) ;
2004-10-05 13:18:28 +00:00
}
2007-04-26 11:30:54 +00:00
void BufferParams : : readBulletsLaTeX ( Lexer & lex )
2004-10-05 13:18:28 +00:00
{
// The bullet class should be able to read this.
2011-12-03 22:15:11 +00:00
if ( ! lex . next ( ) )
2008-02-24 15:44:11 +00:00
return ;
2004-10-05 13:18:28 +00:00
int const index = lex . getInteger ( ) ;
lex . next ( true ) ;
2006-10-20 19:26:23 +00:00
docstring const temp_str = lex . getDocString ( ) ;
2004-10-05 13:18:28 +00:00
user_defined_bullet ( index ) . setText ( temp_str ) ;
temp_bullet ( index ) . setText ( temp_str ) ;
}
This is one of a series of patches that will merge the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the backend. The ModuleList class holds a list of the available modules, which are retrieved from lyxmodules.lst, itself generated by configure.py. There are two LFUNs available: modules-clear and module-add, which do the obvious thing; you can test by typing these into the minibuffer, along with the name of one of the available modules: URL (a CharStyle), Endnote (a Custom Inset), and---with the spaces---End To Foot (View>LaTeX and look at the user preamble), which are themselves in lib/layouts. There are some others, too, that allow theorems to be added to classes like article and book.
The GUI will come next.
Issues: (i) The configure.py script could be improved. It'd be nice, for example, if it tested for the presence of the LaTeX packages a particular module needs. But this would mean re-working the LaTeX script, and I don't know how to do that. Note that at present, the packages are ignored. This will change shortly. (ii) I've used std::string in LyXModule, following what seemed to be a precedent in TextClass. If some of these should be docstrings, please let me know, and I'll change them. (iii) There is at present no distinction between LaTeX and DocBook modules. Should there be? That is: Should there be modules that are available when the document class is a LaTeX class and others that are available only when it is DocBook? Or should there just be one set of modules? Each module can of course indicate for what it is suitable in its description.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19893 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-29 17:59:49 +00:00
void BufferParams : : readModules ( Lexer & lex )
{
if ( ! lex . eatLine ( ) ) {
lyxerr < < " Error (BufferParams::readModules): "
" Unexpected end of input. " < < endl ;
return ;
}
while ( true ) {
string mod = lex . getString ( ) ;
if ( mod = = " \\ end_modules " )
break ;
addLayoutModule ( mod ) ;
lex . eatLine ( ) ;
}
}
2008-07-27 17:46:27 +00:00
void BufferParams : : readRemovedModules ( Lexer & lex )
{
if ( ! lex . eatLine ( ) ) {
lyxerr < < " Error (BufferParams::readRemovedModules): "
" Unexpected end of input. " < < endl ;
return ;
}
while ( true ) {
string mod = lex . getString ( ) ;
if ( mod = = " \\ end_removed_modules " )
break ;
2010-11-26 18:42:53 +00:00
removed_modules_ . push_back ( mod ) ;
2008-07-27 17:46:27 +00:00
lex . eatLine ( ) ;
}
2011-12-03 22:15:11 +00:00
// now we want to remove any removed modules that were previously
// added. normally, that will be because default modules were added in
// setBaseClass(), which gets called when \textclass is read at the
2008-07-27 17:46:27 +00:00
// start of the read.
2010-11-26 18:42:53 +00:00
list < string > : : const_iterator rit = removed_modules_ . begin ( ) ;
list < string > : : const_iterator const ren = removed_modules_ . end ( ) ;
2012-05-28 20:41:32 +00:00
for ( ; rit ! = ren ; + + rit ) {
2010-11-26 18:42:53 +00:00
LayoutModuleList : : iterator const mit = layout_modules_ . begin ( ) ;
LayoutModuleList : : iterator const men = layout_modules_ . end ( ) ;
2008-07-27 17:46:27 +00:00
LayoutModuleList : : iterator found = find ( mit , men , * rit ) ;
if ( found = = men )
continue ;
2010-11-26 18:42:53 +00:00
layout_modules_ . erase ( found ) ;
2008-07-27 17:46:27 +00:00
}
}
2010-01-07 10:01:26 +00:00
void BufferParams : : readIncludeonly ( Lexer & lex )
{
if ( ! lex . eatLine ( ) ) {
lyxerr < < " Error (BufferParams::readIncludeonly): "
" Unexpected end of input. " < < endl ;
return ;
}
while ( true ) {
string child = lex . getString ( ) ;
if ( child = = " \\ end_includeonly " )
break ;
2010-11-26 18:42:53 +00:00
included_children_ . push_back ( child ) ;
2010-01-07 10:01:26 +00:00
lex . eatLine ( ) ;
}
}
2008-03-15 00:22:54 +00:00
string BufferParams : : paperSizeName ( PapersizePurpose purpose ) const
2003-07-17 08:23:33 +00:00
{
2011-10-27 11:48:16 +00:00
switch ( papersize ) {
2008-01-25 12:54:25 +00:00
case PAPER_DEFAULT :
// could be anything, so don't guess
return string ( ) ;
case PAPER_CUSTOM : {
if ( purpose = = XDVI & & ! paperwidth . empty ( ) & &
! paperheight . empty ( ) ) {
// heightxwidth<unit>
string first = paperwidth ;
string second = paperheight ;
if ( orientation = = ORIENTATION_LANDSCAPE )
first . swap ( second ) ;
// cut off unit.
return first . erase ( first . length ( ) - 2 )
+ " x " + second ;
}
return string ( ) ;
}
2010-05-18 01:22:08 +00:00
case PAPER_A0 :
// dvips and dvipdfm do not know this
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " a0 " ;
case PAPER_A1 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " a1 " ;
case PAPER_A2 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " a2 " ;
2005-07-16 16:57:55 +00:00
case PAPER_A3 :
2003-07-17 08:23:33 +00:00
return " a3 " ;
2005-07-16 16:57:55 +00:00
case PAPER_A4 :
2003-07-17 08:23:33 +00:00
return " a4 " ;
2005-07-16 16:57:55 +00:00
case PAPER_A5 :
2003-07-17 08:23:33 +00:00
return " a5 " ;
2010-05-18 01:22:08 +00:00
case PAPER_A6 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " a6 " ;
case PAPER_B0 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " b0 " ;
case PAPER_B1 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " b1 " ;
case PAPER_B2 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " b2 " ;
2008-01-25 12:54:25 +00:00
case PAPER_B3 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " b3 " ;
case PAPER_B4 :
// dvipdfm does not know this
if ( purpose = = DVIPDFM )
return string ( ) ;
return " b4 " ;
2005-07-16 16:57:55 +00:00
case PAPER_B5 :
2008-01-25 12:54:25 +00:00
if ( purpose = = DVIPDFM )
return string ( ) ;
2003-07-17 08:23:33 +00:00
return " b5 " ;
2010-05-18 01:22:08 +00:00
case PAPER_B6 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " b6 " ;
2010-07-13 01:06:20 +00:00
case PAPER_C0 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c0 " ;
case PAPER_C1 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c1 " ;
case PAPER_C2 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c2 " ;
case PAPER_C3 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c3 " ;
case PAPER_C4 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c4 " ;
case PAPER_C5 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c5 " ;
case PAPER_C6 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " c6 " ;
2010-05-18 01:22:08 +00:00
case PAPER_JISB0 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb0 " ;
case PAPER_JISB1 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb1 " ;
case PAPER_JISB2 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb2 " ;
case PAPER_JISB3 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb3 " ;
case PAPER_JISB4 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb4 " ;
case PAPER_JISB5 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb5 " ;
case PAPER_JISB6 :
if ( purpose = = DVIPS | | purpose = = DVIPDFM )
return string ( ) ;
return " jisb6 " ;
2005-07-16 16:57:55 +00:00
case PAPER_USEXECUTIVE :
2008-01-25 12:54:25 +00:00
// dvipdfm does not know this
if ( purpose = = DVIPDFM )
return string ( ) ;
2003-07-17 08:23:33 +00:00
return " foolscap " ;
2005-07-16 16:57:55 +00:00
case PAPER_USLEGAL :
2003-07-17 08:23:33 +00:00
return " legal " ;
case PAPER_USLETTER :
default :
2008-01-25 12:54:25 +00:00
if ( purpose = = XDVI )
return " us " ;
2003-07-17 08:23:33 +00:00
return " letter " ;
}
}
string const BufferParams : : dvips_options ( ) const
{
string result ;
2012-01-08 17:00:33 +00:00
// If the class loads the geometry package, we do not know which
// paper size is used, since we do not set it (bug 7013).
// Therefore we must not specify any argument here.
// dvips gets the correct paper size via DVI specials in this case
// (if the class uses the geometry package correctly).
if ( documentClass ( ) . provides ( " geometry " ) )
return result ;
2003-07-17 08:23:33 +00:00
if ( use_geometry
2005-07-16 16:57:55 +00:00
& & papersize = = PAPER_CUSTOM
2003-07-17 08:23:33 +00:00
& & ! lyxrc . print_paper_dimension_flag . empty ( )
& & ! paperwidth . empty ( )
& & ! paperheight . empty ( ) ) {
// using a custom papersize
result = lyxrc . print_paper_dimension_flag ;
result + = ' ' + paperwidth ;
result + = ' , ' + paperheight ;
} else {
2008-01-25 12:54:25 +00:00
string const paper_option = paperSizeName ( DVIPS ) ;
if ( ! paper_option . empty ( ) & & ( paper_option ! = " letter " | |
orientation ! = ORIENTATION_LANDSCAPE ) ) {
2003-07-28 14:40:29 +00:00
// dvips won't accept -t letter -t landscape.
2003-07-17 08:23:33 +00:00
// In all other cases, include the paper size
// explicitly.
result = lyxrc . print_paper_flag ;
result + = ' ' + paper_option ;
}
}
if ( orientation = = ORIENTATION_LANDSCAPE & &
2005-07-16 16:57:55 +00:00
papersize ! = PAPER_CUSTOM )
2003-07-17 08:23:33 +00:00
result + = ' ' + lyxrc . print_landscape_flag ;
return result ;
}
2004-03-07 14:33:17 +00:00
2009-11-29 14:43:00 +00:00
string const BufferParams : : font_encoding ( ) const
{
2015-04-02 15:13:45 +00:00
return font_encodings ( ) . empty ( ) ? " default " : font_encodings ( ) . back ( ) ;
}
vector < string > const BufferParams : : font_encodings ( ) const
{
string doc_fontenc = ( fontenc = = " global " ) ? lyxrc . fontenc : fontenc ;
vector < string > fontencs ;
// "default" means "no explicit font encoding"
if ( doc_fontenc ! = " default " ) {
fontencs = getVectorFromString ( doc_fontenc ) ;
if ( ! language - > fontenc ( ) . empty ( )
& & ascii_lowercase ( language - > fontenc ( ) ) ! = " none " ) {
vector < string > fencs = getVectorFromString ( language - > fontenc ( ) ) ;
vector < string > : : const_iterator fit = fencs . begin ( ) ;
for ( ; fit ! = fencs . end ( ) ; + + fit ) {
if ( find ( fontencs . begin ( ) , fontencs . end ( ) , * fit ) = = fontencs . end ( ) )
fontencs . push_back ( * fit ) ;
}
}
}
return fontencs ;
2009-11-29 14:43:00 +00:00
}
2010-11-14 10:35:35 +00:00
string BufferParams : : babelCall ( string const & lang_opts , bool const langoptions ) const
2008-10-12 17:21:18 +00:00
{
2010-11-14 10:35:35 +00:00
// suppress the babel call if there is no BabelName defined
2008-10-12 17:21:18 +00:00
// for the document language in the lib/languages file and if no
// other languages are used (lang_opts is then empty)
if ( lang_opts . empty ( ) )
return string ( ) ;
2010-11-14 10:35:35 +00:00
// either a specific language (AsBabelOptions setting in
// lib/languages) or the prefs require the languages to
// be submitted to babel itself (not the class).
if ( langoptions )
2008-10-12 17:21:18 +00:00
return " \\ usepackage[ " + lang_opts + " ]{babel} " ;
2010-11-20 13:34:14 +00:00
return " \\ usepackage{babel} " ;
2008-10-12 17:21:18 +00:00
}
2008-12-19 09:32:04 +00:00
docstring BufferParams : : getGraphicsDriver ( string const & package ) const
{
docstring result ;
if ( package = = " geometry " ) {
2010-11-26 18:42:53 +00:00
if ( graphics_driver = = " dvips "
| | graphics_driver = = " dvipdfm "
| | graphics_driver = = " pdftex "
| | graphics_driver = = " vtex " )
result = from_ascii ( graphics_driver ) ;
else if ( graphics_driver = = " dvipdfmx " )
2008-12-19 09:32:04 +00:00
result = from_ascii ( " dvipdfm " ) ;
}
return result ;
}
2011-02-13 21:41:44 +00:00
void BufferParams : : writeEncodingPreamble ( otexstream & os ,
LaTeXFeatures & features ) const
2007-05-28 07:43:15 +00:00
{
2015-11-12 15:55:04 +00:00
// XeTeX/LuaTeX: (see also #9740)
// With Unicode fonts we use utf8-plain without encoding package.
// With TeX fonts, we cannot use utf8-plain, but "inputenc" fails.
// XeTeX must use ASCII encoding, for LuaTeX, we load
// "luainputenc" (see below).
if ( useNonTeXFonts | | features . runparams ( ) . flavor = = OutputParams : : XETEX )
2010-11-28 17:51:21 +00:00
return ;
2015-10-20 17:14:39 +00:00
2007-05-28 07:43:15 +00:00
if ( inputenc = = " auto " ) {
string const doc_encoding =
language - > encoding ( ) - > latexName ( ) ;
Encoding : : Package const package =
language - > encoding ( ) - > package ( ) ;
2015-11-12 15:55:04 +00:00
// Create list of inputenc options:
set < string > encodings ;
// luainputenc fails with more than one encoding
if ( ! features . runparams ( ) . isFullUnicode ( ) ) // if we reach this point, this means LuaTeX with TeX fonts
// list all input encodings used in the document
encodings = features . getEncodingSet ( doc_encoding ) ;
2007-05-28 07:43:15 +00:00
2008-08-19 07:48:24 +00:00
// If the "japanese" package (i.e. pLaTeX) is used,
// inputenc must be omitted.
2007-10-09 00:59:16 +00:00
// see http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129680.html
2008-08-18 17:26:09 +00:00
if ( ( ! encodings . empty ( ) | | package = = Encoding : : inputenc )
2015-03-15 09:29:07 +00:00
& & ! features . isRequired ( " japanese " )
& & ! features . isProvided ( " inputenc " ) ) {
2007-05-28 07:43:15 +00:00
os < < " \\ usepackage[ " ;
2007-12-12 19:28:07 +00:00
set < string > : : const_iterator it = encodings . begin ( ) ;
set < string > : : const_iterator const end = encodings . end ( ) ;
2007-05-28 07:43:15 +00:00
if ( it ! = end ) {
os < < from_ascii ( * it ) ;
+ + it ;
}
for ( ; it ! = end ; + + it )
os < < ' , ' < < from_ascii ( * it ) ;
if ( package = = Encoding : : inputenc ) {
if ( ! encodings . empty ( ) )
os < < ' , ' ;
os < < from_ascii ( doc_encoding ) ;
}
2015-10-20 17:14:39 +00:00
if ( features . runparams ( ) . flavor = = OutputParams : : LUATEX
| | features . runparams ( ) . flavor = = OutputParams : : DVILUATEX )
os < < " ]{luainputenc} \n " ;
else
os < < " ]{inputenc} \n " ;
2007-05-28 07:43:15 +00:00
}
2007-11-17 12:37:18 +00:00
if ( package = = Encoding : : CJK | | features . mustProvide ( " CJK " ) ) {
2009-01-14 09:26:13 +00:00
if ( language - > encoding ( ) - > name ( ) = = " utf8-cjk "
2009-03-04 17:02:22 +00:00
& & LaTeXFeatures : : isAvailable ( " CJKutf8 " ) )
2009-01-14 09:26:13 +00:00
os < < " \\ usepackage{CJKutf8} \n " ;
else
os < < " \\ usepackage{CJK} \n " ;
2007-05-28 07:43:15 +00:00
}
} else if ( inputenc ! = " default " ) {
2007-07-23 16:46:26 +00:00
switch ( encoding ( ) . package ( ) ) {
2007-05-28 07:43:15 +00:00
case Encoding : : none :
2008-08-18 17:26:09 +00:00
case Encoding : : japanese :
2007-05-28 07:43:15 +00:00
break ;
case Encoding : : inputenc :
2008-08-18 17:26:09 +00:00
// do not load inputenc if japanese is used
2015-03-15 09:29:07 +00:00
// or if the class provides inputenc
if ( features . isRequired ( " japanese " )
2015-03-15 09:38:37 +00:00
| | features . isProvided ( " inputenc " ) )
2008-08-18 17:26:09 +00:00
break ;
2015-10-20 17:14:39 +00:00
os < < " \\ usepackage[ " < < from_ascii ( encoding ( ) . latexName ( ) ) ;
if ( features . runparams ( ) . flavor = = OutputParams : : LUATEX
| | features . runparams ( ) . flavor = = OutputParams : : DVILUATEX )
os < < " ]{luainputenc} \n " ;
else
os < < " ]{inputenc} \n " ;
2007-05-28 07:43:15 +00:00
break ;
case Encoding : : CJK :
2009-01-14 09:26:13 +00:00
if ( encoding ( ) . name ( ) = = " utf8-cjk "
2009-03-04 17:02:22 +00:00
& & LaTeXFeatures : : isAvailable ( " CJKutf8 " ) )
2009-01-14 09:26:13 +00:00
os < < " \\ usepackage{CJKutf8} \n " ;
else
os < < " \\ usepackage{CJK} \n " ;
2007-05-28 07:43:15 +00:00
break ;
}
2013-12-01 09:57:13 +00:00
// Load the CJK package if needed by a secondary language.
// If the main encoding is some variant of UTF8, use CJKutf8.
if ( encoding ( ) . package ( ) ! = Encoding : : CJK & & features . mustProvide ( " CJK " ) ) {
if ( encoding ( ) . iconvName ( ) = = " UTF-8 "
& & LaTeXFeatures : : isAvailable ( " CJKutf8 " ) )
os < < " \\ usepackage{CJKutf8} \n " ;
else
os < < " \\ usepackage{CJK} \n " ;
}
2007-05-28 07:43:15 +00:00
}
}
2009-04-06 06:58:30 +00:00
string const BufferParams : : parseFontName ( string const & name ) const
{
string mangled = name ;
size_t const idx = mangled . find ( ' [ ' ) ;
if ( idx = = string : : npos | | idx = = 0 )
return mangled ;
else
return mangled . substr ( 0 , idx - 1 ) ;
}
2012-09-22 10:14:24 +00:00
string const BufferParams : : loadFonts ( LaTeXFeatures & features ) const
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
{
2015-11-09 06:33:57 +00:00
if ( fontsRoman ( ) = = " default " & & fontsSans ( ) = = " default "
& & fontsTypewriter ( ) = = " default "
& & ( fontsMath ( ) = = " default " | | fontsMath ( ) = = " auto " ) )
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
//nothing to do
return string ( ) ;
ostringstream os ;
2010-12-12 10:15:44 +00:00
/* Fontspec (XeTeX, LuaTeX): we provide GUI support for oldstyle
2011-02-01 14:00:23 +00:00
* numbers ( Numbers = OldStyle ) and sf / tt scaling . The Ligatures = TeX /
* Mapping = tex - text option assures TeX ligatures ( such as " -- " )
* are resolved . Note that tt does not use these ligatures .
2010-12-12 10:15:44 +00:00
* TODO :
* - - add more GUI options ?
* - - add more fonts ( fonts for other scripts )
* - - if there ' s a way to find out if a font really supports
2011-12-03 22:15:11 +00:00
* OldStyle , enable / disable the widget accordingly .
2010-12-12 10:15:44 +00:00
*/
2012-09-22 10:14:24 +00:00
if ( useNonTeXFonts & & features . isAvailable ( " fontspec " ) ) {
2011-02-01 14:00:23 +00:00
// "Mapping=tex-text" and "Ligatures=TeX" are equivalent.
// However, until v.2 (2010/07/11) fontspec only knew
// Mapping=tex-text (for XeTeX only); then "Ligatures=TeX"
// was introduced for both XeTeX and LuaTeX (LuaTeX
// didn't understand "Mapping=tex-text", while XeTeX
// understood both. With most recent versions, both
// variants are understood by both engines. However,
2011-03-23 14:15:46 +00:00
// we want to provide support for at least TeXLive 2009
// (for XeTeX; LuaTeX is only supported as of v.2)
2011-02-01 14:00:23 +00:00
string const texmapping =
( features . runparams ( ) . flavor = = OutputParams : : XETEX ) ?
" Mapping=tex-text " : " Ligatures=TeX " ;
2015-11-09 06:33:57 +00:00
if ( fontsRoman ( ) ! = " default " ) {
2011-02-01 14:00:23 +00:00
os < < " \\ setmainfont[ " < < texmapping ;
2012-09-22 10:14:24 +00:00
if ( fonts_old_figures )
2010-11-20 14:53:34 +00:00
os < < " ,Numbers=OldStyle " ;
2015-11-09 06:33:57 +00:00
os < < " ]{ " < < parseFontName ( fontsRoman ( ) ) < < " } \n " ;
2010-11-20 14:53:34 +00:00
}
2015-11-09 06:33:57 +00:00
if ( fontsSans ( ) ! = " default " ) {
string const sans = parseFontName ( fontsSans ( ) ) ;
if ( fontsSansScale ( ) ! = 100 )
2011-12-03 22:15:11 +00:00
os < < " \\ setsansfont[Scale= "
2015-11-09 06:33:57 +00:00
< < float ( fontsSansScale ( ) ) / 100
2011-02-01 14:00:23 +00:00
< < " , " < < texmapping < < " ]{ "
2009-04-06 06:58:30 +00:00
< < sans < < " } \n " ;
else
2011-02-01 14:00:23 +00:00
os < < " \\ setsansfont[ " < < texmapping < < " ]{ "
2009-04-06 06:58:30 +00:00
< < sans < < " } \n " ;
}
2015-11-09 06:33:57 +00:00
if ( fontsTypewriter ( ) ! = " default " ) {
string const mono = parseFontName ( fontsTypewriter ( ) ) ;
if ( fontsTypewriterScale ( ) ! = 100 )
2011-12-03 22:15:11 +00:00
os < < " \\ setmonofont[Scale= "
2015-11-09 06:33:57 +00:00
< < float ( fontsTypewriterScale ( ) ) / 100
2009-04-06 06:58:30 +00:00
< < " ]{ "
< < mono < < " } \n " ;
else
2010-12-12 10:15:44 +00:00
os < < " \\ setmonofont{ "
2009-04-06 06:58:30 +00:00
< < mono < < " } \n " ;
}
return os . str ( ) ;
}
2012-08-16 11:23:39 +00:00
// Tex Fonts
bool const ot1 = ( font_encoding ( ) = = " default " | | font_encoding ( ) = = " OT1 " ) ;
2012-08-18 07:58:19 +00:00
bool const dryrun = features . runparams ( ) . dryrun ;
2015-11-09 06:33:57 +00:00
bool const complete = ( fontsSans ( ) = = " default " & & fontsTypewriter ( ) = = " default " ) ;
bool const nomath = ( fontsMath ( ) = = " default " ) ;
2012-08-16 11:23:39 +00:00
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
// ROMAN FONTS
2015-11-09 06:33:57 +00:00
os < < theLaTeXFonts ( ) . getLaTeXFont ( from_ascii ( fontsRoman ( ) ) ) . getLaTeXCode (
2012-09-22 15:44:00 +00:00
dryrun , ot1 , complete , fonts_expert_sc , fonts_old_figures ,
nomath ) ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
// SANS SERIF
2015-11-09 06:33:57 +00:00
os < < theLaTeXFonts ( ) . getLaTeXFont ( from_ascii ( fontsSans ( ) ) ) . getLaTeXCode (
2012-09-22 15:44:00 +00:00
dryrun , ot1 , complete , fonts_expert_sc , fonts_old_figures ,
2015-11-09 06:33:57 +00:00
nomath , fontsSansScale ( ) ) ;
2012-08-16 11:23:39 +00:00
// MONOSPACED/TYPEWRITER
2015-11-09 06:33:57 +00:00
os < < theLaTeXFonts ( ) . getLaTeXFont ( from_ascii ( fontsTypewriter ( ) ) ) . getLaTeXCode (
2012-09-22 15:44:00 +00:00
dryrun , ot1 , complete , fonts_expert_sc , fonts_old_figures ,
2015-11-09 06:33:57 +00:00
nomath , fontsTypewriterScale ( ) ) ;
2012-09-22 15:44:00 +00:00
// MATH
2015-11-09 06:33:57 +00:00
os < < theLaTeXFonts ( ) . getLaTeXFont ( from_ascii ( fontsMath ( ) ) ) . getLaTeXCode (
2012-09-22 15:44:00 +00:00
dryrun , ot1 , complete , fonts_expert_sc , fonts_old_figures ,
nomath ) ;
The Grand Font Selection Redesign:
* lib/lyx2lyx/LyX.py (format_relation): add file format 247 (from Georg BAUM).
* lib/lyx2lyx/lyx_1_5.py: add convert_font_settings, revert_font_settings (from Georg BAUM).
* lib/chkconfig.ltx: Test for newly supported font packages
* lib/doc/LaTeXConfig.lyx.in: document newly supported font packages
* lib/doc/UserGuide.lyx: document new UI.
* lib/doc/Extended.lyx: update PostScript font documentation
* development/FORMAT: document file format change 246->247.
* src/tex-strings.[Ch]: new strings tex_fonts_roman, tex_fonts_sans,
tex_fonts_monospaced (with GUI equivalents).
* src/buffer.C: Format up to 247.
* src/bufferparams.C:
new params fontsRoman, fontsSans, fontsTypewriter, fontsDefaultFamily,
fontsSC, fontsOSF, fontsSansScale and fontsTypewriterScale
(LyXFont const BufferParams::getFont): consider switch of default family.
(string const BufferParams::loadFonts): new method to get all the LaTeX
font stuff done.
* src/paragraph.C
(LyXFont const Paragraph::getFont):
(LyXFont const Paragraph::getLabelFont):
(LyXFont const Paragraph::getLayoutFont): user buffer's not textclass's
default font
* src/text.C
(int LyXText::leftMargin):
(int LyXText::rightMargin): user buffer's not textclass's default font
* src/text2.C
(LyXFont LyXText::getFont):
(LyXFont LyXText::getLayoutFont):
(LyXFont LyXText::getLabelFont): check if the family of the default document
font has been customized.
* src/frontends/gtk/GDocument.[Ch]: implement new font ui (from Georg BAUM).
* src/frontends/gtk/glade/document.glade: implement new font ui (from Georg BAUM).
* src/frontends/qt3/Makefile.dialogs: add new FontModuleBase
* src/frontends/qt3/ui/FontModuleBase.ui: new File
* src/frontends/qt3/ui/TextLayoutModuleBase.ui: remove font widgets
* src/frontends/qt3/QDocument.C
* src/frontends/qt3/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/Makefile.dialogs: add new FontUi
* src/frontends/qt4/QDocumentDialog.[Ch]: implement new font ui
* src/frontends/qt4/ui/FontUi.ui: new File
* src/frontends/qt4/ui/TextLayoutUi.ui: remove font widgets
* src/frontends/qt4/ui/compile_uic.sh: add new FontUi
* src/frontends/xforms/FormDocument.[Ch]: implement new font ui
* src/frontends/xforms/forms/form_document.fd: add new font tab.
* src/frontends/controllers/ControlDocument.[Ch]
(char ControlDocument::fontfamilies):
(char ControlDocument::fontfamilies_gui):
(bool ControlDocument::isFontAvailable):
(bool ControlDocument::providesSC):
(bool ControlDocument::providesOSF):
(bool ControlDocument::providesScale): new methods, providing font info.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14143 a592a061-630c-0410-9148-cb99ea01b6c8
2006-06-19 08:10:17 +00:00
return os . str ( ) ;
}
2006-10-21 00:16:43 +00:00
2006-12-10 16:08:52 +00:00
Encoding const & BufferParams : : encoding ( ) const
{
2015-11-13 12:59:17 +00:00
// Main encoding for LaTeX output.
//
// Exception: XeTeX with 8-bit TeX fonts requires ASCII (see #9740).
// As the "flavor" is only known once export started, this
// cannot be handled here. Instead, runparams.encoding is set
// to ASCII in Buffer::makeLaTeXFile (for export)
// and Buffer::writeLaTeXSource (for preview).
2010-11-26 09:42:03 +00:00
if ( useNonTeXFonts )
2013-01-20 00:52:30 +00:00
return * ( encodings . fromLyXName ( " utf8-plain " ) ) ;
2007-01-13 14:36:54 +00:00
if ( inputenc = = " auto " | | inputenc = = " default " )
2008-03-21 21:47:37 +00:00
return * language - > encoding ( ) ;
2013-01-20 00:52:30 +00:00
Encoding const * const enc = encodings . fromLyXName ( inputenc ) ;
2006-12-10 16:08:52 +00:00
if ( enc )
return * enc ;
2008-03-21 21:47:37 +00:00
LYXERR0 ( " Unknown inputenc value ` " < < inputenc
< < " '. Using `auto' instead. " ) ;
return * language - > encoding ( ) ;
2006-12-10 16:08:52 +00:00
}
2007-03-22 07:22:16 +00:00
2012-03-01 00:41:30 +00:00
bool BufferParams : : addCiteEngine ( string const & engine )
{
LayoutModuleList : : const_iterator it = cite_engine_ . begin ( ) ;
LayoutModuleList : : const_iterator en = cite_engine_ . end ( ) ;
for ( ; it ! = en ; + + it )
if ( * it = = engine )
return false ;
cite_engine_ . push_back ( engine ) ;
return true ;
}
bool BufferParams : : addCiteEngine ( vector < string > const & engine )
{
vector < string > : : const_iterator it = engine . begin ( ) ;
vector < string > : : const_iterator en = engine . end ( ) ;
bool ret = true ;
for ( ; it ! = en ; + + it )
if ( ! addCiteEngine ( * it ) )
ret = false ;
return ret ;
}
string const & BufferParams : : defaultBiblioStyle ( ) const
{
return documentClass ( ) . defaultBiblioStyle ( ) ;
}
bool const & BufferParams : : fullAuthorList ( ) const
{
return documentClass ( ) . fullAuthorList ( ) ;
}
void BufferParams : : setCiteEngine ( string const & engine )
{
clearCiteEngine ( ) ;
addCiteEngine ( engine ) ;
}
void BufferParams : : setCiteEngine ( vector < string > const & engine )
{
clearCiteEngine ( ) ;
addCiteEngine ( engine ) ;
}
vector < string > BufferParams : : citeCommands ( ) const
2007-03-22 07:22:16 +00:00
{
2012-03-01 00:41:30 +00:00
static CitationStyle const default_style ;
vector < string > commands =
documentClass ( ) . citeCommands ( citeEngineType ( ) ) ;
if ( commands . empty ( ) )
commands . push_back ( default_style . cmd ) ;
return commands ;
2007-03-25 01:12:38 +00:00
}
2012-03-01 00:41:30 +00:00
vector < CitationStyle > BufferParams : : citeStyles ( ) const
2007-03-25 01:12:38 +00:00
{
2012-03-01 00:41:30 +00:00
static CitationStyle const default_style ;
vector < CitationStyle > styles =
documentClass ( ) . citeStyles ( citeEngineType ( ) ) ;
if ( styles . empty ( ) )
styles . push_back ( default_style ) ;
return styles ;
2007-03-22 07:22:16 +00:00
}
2006-10-21 00:16:43 +00:00
} // namespace lyx