It is attached.. I have simplified by removing \clearpage stuff, since
you have done it nicely. I hope I did not forget any files for the
patch, which is a possibility since my working version is a mess. :-)

\linebreak code is functional, but should be hidden in GUI. The reason
is I had no time to write a new draw() function for the \linebreak.
therefore I used the one written for \newline. Other than that, users
can use it from command-buffer with no problem. It would be better put
this patch now (If Jose approves), so there will be no file format
change for lyx-1.5 series.

Thanks a lot.

Ugras


On 11/27/06, Bo Peng <[EMAIL PROTECTED]> wrote:
> last and very IMPORTANT: I have sent a better patch in a separate mail
> including a new feature "\linebreak", which was also asked in the same
> mail that clearpage asked. I will be glad if you people review that
> patch, be volunteer to support this feature (so, Jose can put it for
> alpha), and commit, of course..

That patch seems to be lost in my mails. Could you please re-generate
one against the latest svn and sent it again?

Sorry for the inconvenience.

Bo

Index: src/insets/insetbase.C
===================================================================
--- src/insets/insetbase.C	(revision 16071)
+++ src/insets/insetbase.C	(working copy)
@@ -87,6 +87,7 @@
 		InsetName("environment", InsetBase::ENVIRONMENT_CODE),
 		InsetName("hfill", InsetBase::HFILL_CODE),
 		InsetName("newline", InsetBase::NEWLINE_CODE),
+		InsetName("linebreak", InsetBase::LINEBREAK_CODE),
 		InsetName("line", InsetBase::LINE_CODE),
 		InsetName("branch", InsetBase::BRANCH_CODE),
 		InsetName("box", InsetBase::BOX_CODE),
Index: src/insets/insetbase.h
===================================================================
--- src/insets/insetbase.h	(revision 16071)
+++ src/insets/insetbase.h	(working copy)
@@ -327,7 +327,9 @@
 		///
 		NOMENCL_CODE, // 45
 		///
-		NOMENCL_PRINT_CODE
+		NOMENCL_PRINT_CODE,
+		///
+		LINEBREAK_CODE
 	};
 
 	/** returns the Code corresponding to the \c name.
Index: src/insets/insetnewline.C
===================================================================
--- src/insets/insetnewline.C	(revision 16071)
+++ src/insets/insetnewline.C	(working copy)
@@ -122,6 +122,17 @@
 {
 	return true;
 }
+void InsetLineBreak::write(Buffer const &, ostream & os) const
+{
+	os << "\n\\linebreak\n";
+}
 
+int InsetLineBreak::latex(Buffer const &, odocstream & os,
+			OutputParams const &) const
+{
+	os << "\\linebreak{}";
+	return 0;
+}
 
+
 } // namespace lyx
Index: src/insets/insetnewline.h
===================================================================
--- src/insets/insetnewline.h	(revision 16071)
+++ src/insets/insetnewline.h	(working copy)
@@ -54,6 +54,23 @@
 };
 
 
+class InsetLineBreak : public InsetNewline {
+public:
+	InsetLineBreak() {}
+
+	InsetBase::Code lyxCode() const { return InsetBase::LINEBREAK_CODE; }
+
+	int latex(Buffer const &, odocstream &,
+		  OutputParams const &) const;
+	
+	void write(Buffer const & buf, std::ostream & os) const;
+private:
+	virtual std::auto_ptr<InsetBase> doClone() const
+	{
+		return std::auto_ptr<InsetBase>(new InsetLineBreak);
+	}
+};	
+
 } // namespace lyx
 
 #endif // INSET_NEWLINE_H
Index: src/insets/insetert.C
===================================================================
--- src/insets/insetert.C	(revision 16071)
+++ src/insets/insetert.C	(working copy)
@@ -285,6 +285,7 @@
 		case LFUN_ACCENT_UNDERDOT:
 		case LFUN_APPENDIX:
 		case LFUN_BREAK_LINE:
+		case LFUN_BREAK_LINEBREAK:
 		case LFUN_CAPTION_INSERT:
 		case LFUN_DEPTH_DECREMENT:
 		case LFUN_DEPTH_INCREMENT:
Index: src/lfuns.h
===================================================================
--- src/lfuns.h	(revision 16071)
+++ src/lfuns.h	(working copy)
@@ -380,6 +380,7 @@
 	LFUN_CLEARPAGE_INSERT,           // Ugras 20061125
 	//290
 	LFUN_CLEARDOUBLEPAGE_INSERT,     // ugras 20061125
+	LFUN_BREAK_LINEBREAK,
 
 	LFUN_LASTACTION                  // end of the table
 };
Index: src/LyXAction.C
===================================================================
--- src/LyXAction.C	(revision 16071)
+++ src/LyXAction.C	(working copy)
@@ -369,6 +369,7 @@
 		{ LFUN_TOOLBAR_TOGGLE_STATE, "", NoBuffer },
 		{ LFUN_NOMENCL_INSERT, "nomencl-insert", Noop },
 		{ LFUN_NOMENCL_PRINT, "nomencl-print", Noop },
+		{ LFUN_BREAK_LINEBREAK, "linebreak-insert", Noop },
 		{ LFUN_CLEARPAGE_INSERT, "clearpage-insert", Noop },
 		{ LFUN_CLEARDOUBLEPAGE_INSERT, "cleardoublepage-insert", Noop },
 
Index: src/text3.C
===================================================================
--- src/text3.C	(revision 16071)
+++ src/text3.C	(working copy)
@@ -561,6 +561,17 @@
 		break;
 	}
 
+	case LFUN_BREAK_LINEBREAK: {
+		// Not allowed by LaTeX (labels or empty par)
+		if (cur.pos() > cur.paragraph().beginOfBody()) {
+			cap::replaceSelection(cur);
+			cur.insert(new InsetLineBreak);
+			cur.posRight();
+			moveCursor(cur, false);
+		}
+		break;
+	}
+
 	case LFUN_CHAR_DELETE_FORWARD:
 		if (!cur.selection()) {
 			if (cur.pos() == cur.paragraph().size())
@@ -1850,6 +1861,7 @@
 	case LFUN_BUFFER_BEGIN_SELECT:
 	case LFUN_BUFFER_END_SELECT:
 	case LFUN_UNICODE_INSERT:
+	case LFUN_BREAK_LINEBREAK:
 		// these are handled in our dispatch()
 		enable = true;
 		break;
Index: src/text.C
===================================================================
--- src/text.C	(revision 16071)
+++ src/text.C	(working copy)
@@ -306,6 +306,10 @@
 		auto_ptr<InsetBase> inset(new InsetNewline);
 		inset->read(buf, lex);
 		par.insertInset(par.size(), inset.release(), font, change);
+	} else if (token == "\\linebreak") {
+		auto_ptr<InsetBase> inset(new InsetLineBreak);
+		inset->read(buf, lex);
+		par.insertInset(par.size(), inset.release(), font, change);
 	} else if (token == "\\LyXTable") {
 		auto_ptr<InsetBase> inset(new InsetTabular(buf));
 		inset->read(buf, lex);
Index: src/paragraph.C
===================================================================
--- src/paragraph.C	(revision 16071)
+++ src/paragraph.C	(working copy)
@@ -1259,7 +1259,8 @@
 bool Paragraph::isNewline(pos_type pos) const
 {
 	return isInset(pos)
-		&& getInset(pos)->lyxCode() == InsetBase::NEWLINE_CODE;
+		&& (getInset(pos)->lyxCode() == InsetBase::NEWLINE_CODE ||
+		    getInset(pos)->lyxCode() == InsetBase::LINEBREAK_CODE);
 }
 
 
Index: lib/lyx2lyx/lyx_1_5.py
===================================================================
--- lib/lyx2lyx/lyx_1_5.py	(revision 16071)
+++ lib/lyx2lyx/lyx_1_5.py	(working copy)
@@ -603,6 +603,25 @@
     if (use_esint == 2):
         document.preamble.append('\\usepackage{esint}')
 
+def revert_linebreak(document):
+    " linebreak -> ERT"
+    i = 0
+    while 1:
+        i = find_token(document.body, "\\linebreak", i)
+        if i == -1:
+            break
+        document.body[i:i+1] =  ['\\begin_inset ERT',
+                                'status collapsed',
+                                '',
+                                '\\begin_layout %s' % document.default_layout,
+                                '',
+                                '',
+                                '\\backslash',
+                                'linebreak',
+                                '\\end_layout',
+                                '',
+                                '\\end_inset']
+    i = i + 1
 
 def revert_clearpage(document):
     " clearpage -> ERT"
@@ -662,7 +681,7 @@
            [254, [convert_esint]],
            [255, []]]
 
-revert =  [[254, [revert_clearpage, revert_cleardoublepage]],
+revert =  [[254, [revert_clearpage, revert_cleardoublepage, revert_linebreak]],
            [253, [revert_esint]],
            [252, [revert_nomenclature, revert_printnomenclature]],
            [251, [revert_commandparams]],

Reply via email to