mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-05 13:26:21 +00:00
Enable tex2lyx to read the LyX textclass and to use this info a little.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7362 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
c7f1fcdc65
commit
812b659d89
@ -5,3 +5,11 @@ Makefile.in
|
||||
*.lo
|
||||
libtexparser.la
|
||||
tex2lyx
|
||||
FloatList.C
|
||||
Floating.C
|
||||
boost.C
|
||||
counters.C
|
||||
lyxlayout.[Ch]
|
||||
lyxtextclass.[Ch]
|
||||
lyxlex.C
|
||||
lyxlex_pimpl.C
|
||||
|
@ -1,3 +1,34 @@
|
||||
2003-07-26 Angus Leeming <leeming@lyx.org>
|
||||
|
||||
* Spacing.h:
|
||||
* lyxfont.[Ch]:
|
||||
* gettext.[Ch]: minimal (near empty) analogues of the real LyX
|
||||
files; enough to get LyXTextClass and LyXLayout to compile without
|
||||
needing to store any real information about Spacing or Font.
|
||||
|
||||
* Makefile.am: add these files above and also include a minimal
|
||||
chunk of the main lyx source tree as soft links in order to add in
|
||||
LyXTextClass and LyXLayout.
|
||||
|
||||
* .cvsignore: add all these soft links.
|
||||
|
||||
* preamble.C (end_preamble): passed a LyXTextClass arg.
|
||||
(parse_preamble): returns the document LyXTextClass.
|
||||
|
||||
* tabular.C (handle_tabular): passed a LyXTextClass arg. In turn
|
||||
pass it to parse_text.
|
||||
|
||||
* tex2lyx.C: add some global vars, build_lyxdir et al. For now,
|
||||
give them some horrible hard-coded value.
|
||||
(main): receive a LyXTextClass var from parse_preamble and pass it
|
||||
on to parse_text.
|
||||
|
||||
* text.C (parse_text): receives a LyXTextClass arg. Use it to
|
||||
remove the hard-coded handling of floats and instead check the
|
||||
textclass for its existence. Also handle wide floats naturally.
|
||||
|
||||
* tex2lyx.h: associated changes to function declarations.
|
||||
|
||||
2003-07-18 Lars Gullik Bjønnes <larsbj@gullik.net>
|
||||
|
||||
* texparser.C (catInit): same warning avoidance as in math_parser.C
|
||||
|
@ -12,7 +12,27 @@ INCLUDES = -I$(srcdir)/../ $(BOOST_INCLUDES)
|
||||
|
||||
bin_PROGRAMS = tex2lyx
|
||||
|
||||
linked_files = \
|
||||
FloatList.C \
|
||||
Floating.C \
|
||||
boost.C \
|
||||
counters.C \
|
||||
lyxlayout.h \
|
||||
lyxlayout.C \
|
||||
lyxtextclass.C \
|
||||
lyxtextclass.h \
|
||||
lyxlex.C \
|
||||
lyxlex_pimpl.C
|
||||
|
||||
# debug.C
|
||||
|
||||
tex2lyx_SOURCES = \
|
||||
$(linked_files) \
|
||||
Spacing.h \
|
||||
gettext.C \
|
||||
gettext.h \
|
||||
lyxfont.C \
|
||||
lyxfont.h \
|
||||
texparser.C \
|
||||
texparser.h \
|
||||
tex2lyx.C \
|
||||
@ -21,3 +41,20 @@ tex2lyx_SOURCES = \
|
||||
math.C \
|
||||
table.C \
|
||||
text.C
|
||||
|
||||
tex2lyx_LDADD = \
|
||||
../support/libsupport.la \
|
||||
../../boost/libs/regex/src/libboostregex.la
|
||||
|
||||
FloatList.C: link_files
|
||||
|
||||
link_files:
|
||||
for i in $(linked_files); do \
|
||||
ln -sf "$(top_srcdir)/src/$$i" . ; \
|
||||
done ; \
|
||||
for i in $(graphics_linked_files); do \
|
||||
ln -sf "$(top_srcdir)/src/graphics/$$i" . ; \
|
||||
done
|
||||
|
||||
rm_link_files:
|
||||
rm -f $(linked_files) $(graphics_linked_files)
|
||||
|
@ -8,6 +8,11 @@
|
||||
|
||||
#include "tex2lyx.h"
|
||||
|
||||
#include "layout.h"
|
||||
#include "lyxtextclass.h"
|
||||
#include "lyxlex.h"
|
||||
#include "support/filetools.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
@ -25,6 +30,8 @@ using std::ostringstream;
|
||||
using std::string;
|
||||
using std::vector;
|
||||
|
||||
using lyx::support::LibFileSearch;
|
||||
|
||||
// special columntypes
|
||||
extern std::map<char, int> special_columns;
|
||||
|
||||
@ -128,7 +135,7 @@ void handle_package(string const & name, string const & options)
|
||||
|
||||
|
||||
|
||||
void end_preamble(ostream & os)
|
||||
void end_preamble(ostream & os, LyXTextClass const & textclass)
|
||||
{
|
||||
os << "# tex2lyx 0.0.3 created this file\n"
|
||||
<< "\\lyxformat 224\n"
|
||||
@ -165,7 +172,7 @@ void end_preamble(ostream & os)
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void parse_preamble(Parser & p, ostream & os)
|
||||
LyXTextClass const parse_preamble(Parser & p, ostream & os)
|
||||
{
|
||||
// initialize fixed types
|
||||
special_columns['D'] = 3;
|
||||
@ -334,17 +341,19 @@ void parse_preamble(Parser & p, ostream & os)
|
||||
|
||||
else if (t.cs() == "begin") {
|
||||
string const name = p.getArg('{', '}');
|
||||
if (name == "document") {
|
||||
end_preamble(os);
|
||||
return;
|
||||
}
|
||||
if (name == "document")
|
||||
break;
|
||||
h_preamble << "\\begin{" << name << "}";
|
||||
}
|
||||
|
||||
else if (t.cs().size())
|
||||
h_preamble << '\\' << t.cs() << ' ';
|
||||
}
|
||||
|
||||
LyXTextClass textclass;
|
||||
textclass.Read(LibFileSearch("layouts", h_textclass, "layout"));
|
||||
end_preamble(os, textclass);
|
||||
return textclass;
|
||||
}
|
||||
|
||||
|
||||
// }])
|
||||
|
@ -282,7 +282,8 @@ void handle_hline_below(RowInfo & ri, vector<CellInfo> & ci)
|
||||
}
|
||||
|
||||
|
||||
void handle_tabular(Parser & p, ostream & os)
|
||||
void handle_tabular(Parser & p, ostream & os,
|
||||
LyXTextClass const & textclass)
|
||||
{
|
||||
string posopts = p.getOpt();
|
||||
if (posopts.size())
|
||||
@ -397,7 +398,7 @@ void handle_tabular(Parser & p, ostream & os)
|
||||
handle_colalign(p, t);
|
||||
cellinfo[row][col].multi = 1;
|
||||
cellinfo[row][col].align = t.front().align;
|
||||
cellinfo[row][col].content = parse_text(p, FLAG_ITEM, false);
|
||||
cellinfo[row][col].content = parse_text(p, FLAG_ITEM, false, textclass);
|
||||
cellinfo[row][col].leftline |= t.front().leftline;
|
||||
cellinfo[row][col].rightline |= t.front().rightline;
|
||||
|
||||
@ -414,7 +415,7 @@ void handle_tabular(Parser & p, ostream & os)
|
||||
|
||||
} else {
|
||||
// FLAG_END is a hack, we need to read all of it
|
||||
cellinfo[row][col].content = parse_text(p, FLAG_END, false);
|
||||
cellinfo[row][col].content = parse_text(p, FLAG_END, false, textclass);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,10 @@
|
||||
|
||||
#include "tex2lyx.h"
|
||||
|
||||
#include "lyx_main.h"
|
||||
#include "debug.h"
|
||||
#include "lyxtextclass.h"
|
||||
|
||||
#include <cctype>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
@ -26,6 +30,14 @@ using std::stringstream;
|
||||
using std::string;
|
||||
using std::vector;
|
||||
|
||||
// A hack to allow the thing to link in the lyxlayout stuff
|
||||
string system_lyxdir = "../../../lib";
|
||||
string build_lyxdir = "../../lib";
|
||||
string user_lyxdir = ".";
|
||||
DebugStream lyxerr;
|
||||
|
||||
void LyX::emergencyCleanup() {}
|
||||
|
||||
|
||||
void handle_comment(Parser & p)
|
||||
{
|
||||
@ -142,9 +154,9 @@ int main(int argc, char * argv[])
|
||||
//p.dump();
|
||||
|
||||
stringstream ss;
|
||||
parse_preamble(p, ss);
|
||||
LyXTextClass textclass = parse_preamble(p, ss);
|
||||
active_environments.push_back("document");
|
||||
parse_text(p, ss, FLAG_END, true);
|
||||
parse_text(p, ss, FLAG_END, true, textclass);
|
||||
ss << "\n\\the_end\n";
|
||||
|
||||
ss.seekg(0);
|
||||
|
@ -7,19 +7,23 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class LyXTextClass;
|
||||
|
||||
void parse_preamble(Parser & p, std::ostream & os);
|
||||
LyXTextClass const parse_preamble(Parser & p, std::ostream & os);
|
||||
|
||||
void parse_text(Parser & p, std::ostream & os, unsigned flags, bool outer);
|
||||
void parse_text(Parser & p, std::ostream & os, unsigned flags,
|
||||
bool outer, LyXTextClass const & textclass);
|
||||
|
||||
void parse_table(Parser & p, std::ostream & os, unsigned flags);
|
||||
|
||||
void parse_math(Parser & p, std::ostream & os, unsigned flags, mode_type mode);
|
||||
|
||||
void handle_tabular(Parser & p, std::ostream & os);
|
||||
void handle_tabular(Parser & p, std::ostream & os,
|
||||
LyXTextClass const & textclass);
|
||||
|
||||
// Helper
|
||||
std::string parse_text(Parser & p, unsigned flags, const bool outer);
|
||||
std::string parse_text(Parser & p, unsigned flags, const bool outer,
|
||||
LyXTextClass const & textclass);
|
||||
|
||||
void handle_comment(Parser & p);
|
||||
std::string const trim(std::string const & a, char const * p = " \t\n\r");
|
||||
|
@ -7,6 +7,10 @@
|
||||
#include <config.h>
|
||||
|
||||
#include "tex2lyx.h"
|
||||
#include "FloatList.h"
|
||||
#include "lyxtextclass.h"
|
||||
#include "support/lstrings.h"
|
||||
#include "support/tostr.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
@ -21,6 +25,8 @@ using std::ostringstream;
|
||||
using std::string;
|
||||
using std::vector;
|
||||
|
||||
using lyx::support::rtrim;
|
||||
using lyx::support::suffixIs;
|
||||
|
||||
namespace {
|
||||
|
||||
@ -132,7 +138,8 @@ void handle_par(ostream & os)
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
||||
LyXTextClass const & textclass)
|
||||
{
|
||||
while (p.good()) {
|
||||
Token const & t = p.get_token();
|
||||
@ -215,7 +222,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
else if (t.cat() == catBegin) {
|
||||
// special handling of size changes
|
||||
bool const is_size = is_known(p.next_token().cs(), known_sizes);
|
||||
string const s = parse_text(p, FLAG_BRACE_LAST, outer);
|
||||
string const s = parse_text(p, FLAG_BRACE_LAST, outer, textclass);
|
||||
if (s.empty() && p.next_token().character() == '`')
|
||||
; // ignore it in {}``
|
||||
else if (is_size || s == "[" || s == "]" || s == "*")
|
||||
@ -274,22 +281,33 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
parse_math(p, os, FLAG_END, MATH_MODE);
|
||||
os << "\\end{" << name << "}";
|
||||
end_inset(os);
|
||||
} else if (name == "tabular") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (name == "tabular") {
|
||||
begin_inset(os, "Tabular ");
|
||||
handle_tabular(p, os);
|
||||
handle_tabular(p, os, textclass);
|
||||
end_inset(os);
|
||||
} else if (name == "table" || name == "figure") {
|
||||
continue;
|
||||
}
|
||||
|
||||
bool is_starred = suffixIs(name, '*');
|
||||
string unstarred_name = rtrim(name, "*");
|
||||
if (textclass.floats().typeExist(unstarred_name)) {
|
||||
string opts = p.getOpt();
|
||||
begin_inset(os, "Float " + name + "\n");
|
||||
begin_inset(os, "Float " + unstarred_name + "\n");
|
||||
if (opts.size())
|
||||
os << "placement " << opts << '\n';
|
||||
os << "wide false\ncollapsed false\n\n"
|
||||
<< "\\layout Standard\n";
|
||||
parse_text(p, os, FLAG_END, outer);
|
||||
os << "wide " << tostr(is_starred)
|
||||
<< "\ncollapsed false\n\n"
|
||||
<< "\\layout Standard\n";
|
||||
parse_text(p, os, FLAG_END, outer,
|
||||
textclass);
|
||||
end_inset(os);
|
||||
} else if (name == "center") {
|
||||
handle_par(os);
|
||||
parse_text(p, os, FLAG_END, outer);
|
||||
parse_text(p, os, FLAG_END, outer,
|
||||
textclass);
|
||||
} else if (name == "enumerate" || name == "itemize"
|
||||
|| name == "lyxlist") {
|
||||
size_t const n = active_environments.size();
|
||||
@ -301,17 +319,17 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
os << "\n\\layout " << cap(name) << "\n\n";
|
||||
if (name == "lyxlist")
|
||||
p.verbatim_item(); // swallow next arg
|
||||
parse_text(p, os, FLAG_END, outer);
|
||||
parse_text(p, os, FLAG_END, outer, textclass);
|
||||
if (deeper)
|
||||
os << "\n\\end_deeper\n";
|
||||
handle_par(os);
|
||||
} else if (name == "thebibliography") {
|
||||
p.verbatim_item(); // swallow next arg
|
||||
parse_text(p, os, FLAG_END, outer);
|
||||
parse_text(p, os, FLAG_END, outer, textclass);
|
||||
os << "\n\\layout Bibliography\n\n";
|
||||
} else {
|
||||
handle_par(os);
|
||||
parse_text(p, os, FLAG_END, outer);
|
||||
parse_text(p, os, FLAG_END, outer, textclass);
|
||||
}
|
||||
}
|
||||
|
||||
@ -334,7 +352,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
string s;
|
||||
if (p.next_token().character() == '[') {
|
||||
p.get_token(); // eat '['
|
||||
s = parse_text(p, FLAG_BRACK_LAST, outer);
|
||||
s = parse_text(p, FLAG_BRACK_LAST, outer, textclass);
|
||||
}
|
||||
handle_par(os);
|
||||
os << s << ' ';
|
||||
@ -367,7 +385,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
os << "collapsed true\n\n\\layout Standard\n\n" << opt;
|
||||
end_inset(os);
|
||||
}
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\n\\layout Standard\n\n";
|
||||
}
|
||||
|
||||
@ -386,12 +404,12 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
else if (t.cs() == "footnote") {
|
||||
begin_inset(os, "Foot\n");
|
||||
os << "collapsed true\n\n\\layout Standard\n\n";
|
||||
parse_text(p, os, FLAG_ITEM, false);
|
||||
parse_text(p, os, FLAG_ITEM, false, textclass);
|
||||
end_inset(os);
|
||||
}
|
||||
|
||||
else if (t.cs() == "ensuremath") {
|
||||
string s = parse_text(p, FLAG_ITEM, false);
|
||||
string s = parse_text(p, FLAG_ITEM, false, textclass);
|
||||
if (s == "±" || s == "³" || s == "²" || s == "µ")
|
||||
os << s;
|
||||
else
|
||||
@ -401,7 +419,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
else if (t.cs() == "marginpar") {
|
||||
begin_inset(os, "Marginal\n");
|
||||
os << "collapsed true\n\n\\layout Standard\n\n";
|
||||
parse_text(p, os, FLAG_ITEM, false);
|
||||
parse_text(p, os, FLAG_ITEM, false, textclass);
|
||||
end_inset(os);
|
||||
}
|
||||
|
||||
@ -418,49 +436,49 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
|
||||
else if (t.cs() == "textrm") {
|
||||
os << "\n\\family roman \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\family default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "textsf") {
|
||||
os << "\n\\family sans \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\family default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "texttt") {
|
||||
os << "\n\\family typewriter \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\family default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "textit") {
|
||||
os << "\n\\shape italic \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\shape default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "textsc") {
|
||||
os << "\n\\noun on \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\noun default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "textbf") {
|
||||
os << "\n\\series bold \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\series default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "underbar") {
|
||||
os << "\n\\bar under \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\bar default \n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "emph" || t.cs() == "noun") {
|
||||
os << "\n\\" << t.cs() << " on \n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\" << t.cs() << " default \n";
|
||||
}
|
||||
|
||||
@ -562,7 +580,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
|| t.cs() == "^" || t.cs() == "'" || t.cs() == "~") {
|
||||
// we need the trim as the LyX parser chokes on such spaces
|
||||
os << "\n\\i \\" << t.cs() << "{"
|
||||
<< trim(parse_text(p, FLAG_ITEM, outer), " ") << "}\n";
|
||||
<< trim(parse_text(p, FLAG_ITEM, outer, textclass), " ") << "}\n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "ss")
|
||||
@ -579,13 +597,13 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
|
||||
else if (t.cs() == "lyxrightaddress") {
|
||||
os << "\n\\layout Right Address\n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\layout Standard\n";
|
||||
}
|
||||
|
||||
else if (t.cs() == "lyxaddress") {
|
||||
os << "\n\\layout Address\n";
|
||||
parse_text(p, os, FLAG_ITEM, outer);
|
||||
parse_text(p, os, FLAG_ITEM, outer, textclass);
|
||||
os << "\n\\layout Standard\n";
|
||||
}
|
||||
|
||||
@ -625,10 +643,11 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer)
|
||||
}
|
||||
|
||||
|
||||
string parse_text(Parser & p, unsigned flags, const bool outer)
|
||||
string parse_text(Parser & p, unsigned flags, const bool outer,
|
||||
LyXTextClass const & textclass)
|
||||
{
|
||||
ostringstream os;
|
||||
parse_text(p, os, flags, outer);
|
||||
parse_text(p, os, flags, outer, textclass);
|
||||
return os.str();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user