* text.C (check_layout): \layout -> \begin_layout

(parse_text_in_inset): convenience function

	* tex2lyx.C (main): \the_end -> \end_document

	* preamble.C (end_preamble): update version number to 225

	* text.C (parse_text): replace test on "lyxcode" with test on
	LyXLayout::freespacing.
	(check_end_layout): new function, used to check whether we need to
	add an \end_layout


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7434 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2003-07-28 23:50:24 +00:00
parent 5e73ad8fbd
commit dd750828d5
6 changed files with 70 additions and 22 deletions

View File

@ -1,3 +1,17 @@
2003-07-29 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* text.C (check_layout): \layout -> \begin_layout
(parse_text_in_inset): convenience function
* tex2lyx.C (main): \the_end -> \end_document
* preamble.C (end_preamble): update version number to 225
* text.C (parse_text): replace test on "lyxcode" with test on
LyXLayout::freespacing.
(check_end_layout): new function, used to check whether we need to
add an \end_layout
2003-07-28 Jean-Marc Lasgouttes <lasgouttes@lyx.org> 2003-07-28 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* tex2lyx.C (clean_layouts): remove * tex2lyx.C (clean_layouts): remove

View File

@ -137,8 +137,8 @@ void handle_package(string const & name, string const & options)
void end_preamble(ostream & os, LyXTextClass const & /*textclass*/) void end_preamble(ostream & os, LyXTextClass const & /*textclass*/)
{ {
os << "# tex2lyx 0.0.3 created this file\n" os << "# tex2lyx 0.1.0 created this file\n"
<< "\\lyxformat 224\n" << "\\lyxformat 225\n"
<< "\\textclass " << h_textclass << "\n" << "\\textclass " << h_textclass << "\n"
<< "\\begin_preamble\n" << h_preamble.str() << "\n\\end_preamble\n"; << "\\begin_preamble\n" << h_preamble.str() << "\n\\end_preamble\n";
if (h_options.size()) if (h_options.size())

View File

@ -399,7 +399,9 @@ void handle_tabular(Parser & p, ostream & os,
handle_colalign(p, t); handle_colalign(p, t);
cellinfo[row][col].multi = 1; cellinfo[row][col].multi = 1;
cellinfo[row][col].align = t.front().align; cellinfo[row][col].align = t.front().align;
cellinfo[row][col].content = parse_text(p, FLAG_ITEM, false, textclass); ostringstream os;
parse_text_in_inset(p, os, FLAG_ITEM, false, textclass);
cellinfo[row][col].content = os.str();
cellinfo[row][col].leftline |= t.front().leftline; cellinfo[row][col].leftline |= t.front().leftline;
cellinfo[row][col].rightline |= t.front().rightline; cellinfo[row][col].rightline |= t.front().rightline;
@ -419,9 +421,9 @@ void handle_tabular(Parser & p, ostream & os,
cellinfo[row][col].leftline = colinfo[col].leftline; cellinfo[row][col].leftline = colinfo[col].leftline;
cellinfo[row][col].rightline = colinfo[col].rightline; cellinfo[row][col].rightline = colinfo[col].rightline;
cellinfo[row][col].align = colinfo[col].align; cellinfo[row][col].align = colinfo[col].align;
need_layout = true; ostringstream os;
cellinfo[row][col].content = parse_text(p, FLAG_END, false, textclass); parse_text_in_inset(p, os, FLAG_ITEM, false, textclass);
need_layout = false; cellinfo[row][col].content = os.str();
} }
} }

View File

@ -131,7 +131,8 @@ int main(int argc, char * argv[])
LyXTextClass textclass = parse_preamble(p, ss); LyXTextClass textclass = parse_preamble(p, ss);
active_environments.push_back("document"); active_environments.push_back("document");
parse_text(p, ss, FLAG_END, true, textclass); parse_text(p, ss, FLAG_END, true, textclass);
ss << "\n\\the_end\n"; check_end_layout(ss);
ss << "\n\\end_document\n";
ss.seekg(0); ss.seekg(0);
cout << ss.str(); cout << ss.str();

View File

@ -16,7 +16,9 @@ void parse_text(Parser & p, std::ostream & os, unsigned flags, bool outer,
LyXTextClass const & textclass, LyXTextClass const & textclass,
LyXLayout_ptr layout_ptr = LyXLayout_ptr()); LyXLayout_ptr layout_ptr = LyXLayout_ptr());
void parse_text_in_inset(Parser & p, std::ostream & os, unsigned flags,
bool outer, LyXTextClass const & textclass,
LyXLayout_ptr layout = LyXLayout_ptr());
void parse_table(Parser & p, std::ostream & os, unsigned flags); void parse_table(Parser & p, std::ostream & os, unsigned flags);
@ -30,6 +32,7 @@ std::string parse_text(Parser & p, unsigned flags, const bool outer,
LyXTextClass const & textclass, LyXTextClass const & textclass,
LyXLayout_ptr layout_ptr = LyXLayout_ptr()); LyXLayout_ptr layout_ptr = LyXLayout_ptr());
void check_end_layout(std::ostream & os);
void handle_comment(Parser & p); void handle_comment(Parser & p);
std::string const trim(std::string const & a, char const * p = " \t\n\r"); std::string const trim(std::string const & a, char const * p = " \t\n\r");

View File

@ -28,10 +28,21 @@ using std::vector;
using lyx::support::rtrim; using lyx::support::rtrim;
using lyx::support::suffixIs; using lyx::support::suffixIs;
// Do we need to output some \layout command before the next characters? // Do we need to output some \begin_layout command before the next characters?
bool need_layout = true; bool need_layout = true;
// We may need to add something after this \layout command // We may need to add something after this \begin_layout command
string extra_stuff; string extra_stuff;
// Do we need to output some \end_layout command
bool need_end_layout = false;
void check_end_layout(ostream & os)
{
if (need_end_layout) {
os << "\n\\end_layout\n";
need_end_layout = false;
}
}
namespace { namespace {
@ -79,7 +90,9 @@ map<string, string> split_map(string const & s)
void check_layout(ostream & os, LyXLayout_ptr layout) void check_layout(ostream & os, LyXLayout_ptr layout)
{ {
if (need_layout) { if (need_layout) {
os << "\n\\layout " << layout->name() << "\n\n"; check_end_layout(os);
os << "\n\\begin_layout " << layout->name() << "\n\n";
need_end_layout = true;
need_layout=false; need_layout=false;
if (!extra_stuff.empty()) { if (!extra_stuff.empty()) {
os << extra_stuff; os << extra_stuff;
@ -88,6 +101,7 @@ void check_layout(ostream & os, LyXLayout_ptr layout)
} }
} }
void begin_inset(ostream & os, string const & name) void begin_inset(ostream & os, string const & name)
{ {
os << "\n\\begin_inset " << name; os << "\n\\begin_inset " << name;
@ -116,13 +130,15 @@ void skip_braces(Parser & p)
void handle_ert(ostream & os, string const & s) void handle_ert(ostream & os, string const & s)
{ {
begin_inset(os, "ERT"); begin_inset(os, "ERT");
os << "\nstatus Collapsed\n\n\\layout Standard\n\n"; os << "\nstatus Collapsed\n\n\\begin_layout Standard\n\n";
for (string::const_iterator it = s.begin(), et = s.end(); it != et; ++it) { for (string::const_iterator it = s.begin(), et = s.end(); it != et; ++it) {
if (*it == '\\') if (*it == '\\')
os << "\n\\backslash \n"; os << "\n\\backslash \n";
else else
os << *it; os << *it;
} }
need_end_layout = true;
check_end_layout(os);
end_inset(os); end_inset(os);
} }
@ -158,8 +174,7 @@ void output_command_layout(ostream & os, LyXLayout_ptr const & layout,
p.get_token(); // eat '[' p.get_token(); // eat '['
begin_inset(os, "OptArg\n"); begin_inset(os, "OptArg\n");
os << "collapsed true\n"; os << "collapsed true\n";
need_layout = true; parse_text_in_inset(p, os, FLAG_BRACK_LAST, outer, textclass);
parse_text(p, os, FLAG_BRACK_LAST, outer, textclass);
end_inset(os); end_inset(os);
} }
} }
@ -199,9 +214,8 @@ void parse_environment(Parser & p, ostream & os, bool outer,
} }
os << "wide " << tostr(is_starred) os << "wide " << tostr(is_starred)
<< "\ncollapsed false\n"; << "\ncollapsed false\n";
need_layout = true; parse_text_in_inset(p, os, FLAG_END, outer, textclass);
parse_text(p, os, FLAG_END, outer, textclass); end_inset(os);
end_inset(os);
} else if (name == "center") { } else if (name == "center") {
parse_text(p, os, FLAG_END, outer, textclass); parse_text(p, os, FLAG_END, outer, textclass);
// The single '=' is meant here. // The single '=' is meant here.
@ -226,6 +240,7 @@ void parse_environment(Parser & p, ostream & os, bool outer,
} }
need_layout = true; need_layout = true;
parse_text(p, os, FLAG_END, outer, textclass, newlayout); parse_text(p, os, FLAG_END, outer, textclass, newlayout);
check_end_layout(os);
if (deeper) if (deeper)
os << "\n\\end_deeper\n"; os << "\n\\end_deeper\n";
need_layout = true; need_layout = true;
@ -340,7 +355,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
else if (t.cat() == catActive) { else if (t.cat() == catActive) {
check_layout(os, layout); check_layout(os, layout);
if (t.character() == '~') { if (t.character() == '~') {
if (active_environment() == "lyxcode") if (layout->free_spacing)
os << ' '; os << ' ';
else else
os << "\\InsetSpace ~\n"; os << "\\InsetSpace ~\n";
@ -351,8 +366,11 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
else if (t.cat() == catBegin) { else if (t.cat() == catBegin) {
// FIXME??? // FIXME???
// special handling of size changes // special handling of size changes
check_layout(os, layout);
bool const is_size = is_known(p.next_token().cs(), known_sizes); bool const is_size = is_known(p.next_token().cs(), known_sizes);
need_end_layout = false;
string const s = parse_text(p, FLAG_BRACE_LAST, outer, textclass, layout); string const s = parse_text(p, FLAG_BRACE_LAST, outer, textclass, layout);
need_end_layout = true;
if (s.empty() && p.next_token().character() == '`') if (s.empty() && p.next_token().character() == '`')
; // ignore it in {}`` ; // ignore it in {}``
else if (is_size || s == "[" || s == "]" || s == "*") else if (is_size || s == "[" || s == "]" || s == "*")
@ -365,8 +383,10 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
} }
else if (t.cat() == catEnd) { else if (t.cat() == catEnd) {
if (flags & FLAG_BRACE_LAST) if (flags & FLAG_BRACE_LAST) {
check_end_layout(os);
return; return;
}
cerr << "stray '}' in text\n"; cerr << "stray '}' in text\n";
handle_ert(os, "}"); handle_ert(os, "}");
} }
@ -475,8 +495,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
check_layout(os, layout); check_layout(os, layout);
begin_inset(os, "Foot\n"); begin_inset(os, "Foot\n");
os << "collapsed true\n"; os << "collapsed true\n";
need_layout = true; parse_text_in_inset(p, os, FLAG_ITEM, false, textclass);
parse_text(p, os, FLAG_ITEM, false, textclass);
end_inset(os); end_inset(os);
} }
@ -496,6 +515,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
need_layout = true; need_layout = true;
parse_text(p, os, FLAG_ITEM, false, textclass); parse_text(p, os, FLAG_ITEM, false, textclass);
end_inset(os); end_inset(os);
need_end_layout = true;
} }
else if (t.cs() == "hfill") { else if (t.cs() == "hfill") {
@ -769,5 +789,13 @@ string parse_text(Parser & p, unsigned flags, const bool outer,
return os.str(); return os.str();
} }
void parse_text_in_inset(Parser & p, ostream & os, unsigned flags, bool outer,
LyXTextClass const & textclass, LyXLayout_ptr layout)
{
need_layout = true;
need_end_layout = false;
parse_text(p, os, flags, outer, textclass, layout);
check_end_layout(os);
need_end_layout = true;
}
// }]) // }])