+2000-10-06 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+
+ * lib/bind/cua.bind: fix a bit.
+ * lib/bind/emacs.bind: ditto.
+
+ * lib/bind/menus.bind: remove real menu entries from there.
+
+ * src/spellchecker.C: make sure we only include strings.h when
+ _AIX is defined.
+
+2000-10-05 Dekel Tsur <dekelts@tau.ac.il>
+
+ * src/frontends/xforms/Menubar_pimpl.C (get_new_submenu): New
+ function. It enlarges the maximum number of pup when needed.
+ (add_toc2): Open a new menu if maximum number of items per menu has
+ reached.
+
+2000-10-05 John Levon <moz@compsoc.man.ac.uk>
+
+ * src/frontends/kde/FormPrint.C: fix error reporting
+
+ * src/frontends/xforms/FormDocument.C: fix compiler
+ warnings
+
+ * lib/.cvsignore: add Literate.nw
+
+2000-10-05 Dekel Tsur <dekelts@tau.ac.il>
+
+ * buffer.C
+ * bufferview_funcs.[Ch]
+ * lyxfont.[Ch]
+ * text.C
+ * text2.C: Add support for numbers in RTL text.
+
2000-10-06 Allan Rae <rae@lyx.org>
* po/Makefile.in.in (POTFILES.in, POTFILES): Fixed
packages.lst
lyxrc.defaults
listerrors
+Literate.nw
#\bind "C-j"
#\bind "C-y"
-## Documents menu
-#
-# These are now defined in cua or emacs bind files so their "standard"
-# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
-
-#\bind "M-d p" "buffer-previous"
-\bind "M-d space" "menu-open Documents"
###
# Include menu and math bindings
-#\bind_file menus.bind
+\bind_file menus.bind
\bind_file math.bind
#
# LyX, the High Level Word Processor
#
-# Copyright (C) 1995-1997 The LyX Team
+# Copyright (C) 1995-2000 The LyX Team
#
# ==================================================================
-# Key bindings for menus, both invisible and visible.
-
-#
-# Visible Menu access menu
-#
-
-\bind "F10 f" "menu-open File"
-\bind "F10 e" "menu-open Edit"
-\bind "F10 l" "menu-open Layout"
-\bind "F10 i" "menu-open Insert"
-\bind "F10 m" "menu-open Math"
-\bind "F10 o" "menu-open Options"
-\bind "F10 d" "menu-open Documents"
-\bind "F10 h" "menu-open Help"
-
-
-#
-# File menu
-#
-
-\bind "M-f n" "buffer-new"
-\bind "M-f t" "buffer-new-template"
-\bind "M-f o" "buffer-open"
-\bind "M-f c" "buffer-close"
-\bind "M-f s" "buffer-write"
-\bind "M-f a" "buffer-write-as"
-\bind "M-f r" "buffer-reload"
-\bind "M-f d" "buffer-view dvi"
-\bind "M-f w" "buffer-view ps"
-\bind "M-f v" "buffer-update dvi"
-\bind "M-f u" "buffer-update ps"
-\bind "M-f p" "buffer-print"
-\bind "M-f f" "buffer-fax"
-\bind "M-f i l" "buffer-import latex"
-\bind "M-f i a" "buffer-import ascii"
-\bind "M-f i p" "buffer-import asciiparagraph"
-\bind "M-f i n" "buffer-import noweb"
-\bind "M-f e l" "buffer-export latex"
-\bind "M-f e p" "buffer-export postscript"
-\bind "M-f e d" "buffer-export linuxdoc"
-\bind "M-f e t" "buffer-export ascii"
-\bind "M-f e h" "buffer-export html"
-\bind "M-f e m" "buffer-export custom"
-\bind "M-f x" "lyx-quit"
-\bind "M-f space" "menu-open File"
-#bind "M-f l" "file-last" # Not yet implemented.
-
-#
-# Edit menu
-#
-
-#bind "M-e b" "table" # Not yet implemented!
-\bind "M-e c" "cut"
-\bind "M-e e" "error-next"
-\bind "M-e f" "find-replace"
-\bind "M-e k" "line-delete-forward"
-\bind "M-e m" "mark-on"
-\bind "M-e S-M" "mark-off"
-\bind "M-e n" "note-next"
-\bind "M-e o" "copy"
-\bind "M-e p" "paste"
-\bind "M-e r" "redo"
-\bind "M-e s" "spellchecker"
-\bind "M-e h" "buffer-chktex"
-\bind "M-e t" "toc-view"
-\bind "M-e u" "undo"
-\bind "M-e w" "latex-view-log"
-\bind "M-e space" "menu-open Edit"
-
-#
-# TOC menu
-#
-
-\bind "M-t" "menu-open TOC"
-
-#
-# Refs menu
-#
-
-\bind "M-r" "menu-open Refs"
-
+# Key bindings for so-called "invisible" menus
#
# Layout menu
# Insert menu
#
-\bind "M-i g" "figure-insert"
-\bind "M-i b" "dialog-tabular-insert"
-\bind "M-i c" "buffer-child-insert"
-\bind "M-i a l" "file-insert-ascii line"
-\bind "M-i a p" "file-insert-ascii paragraph"
-\bind "M-i x" "file-insert"
-\bind "M-i f" "footnote-insert"
-\bind "M-i m" "marginpar-insert"
-
-# PREVIOUS PATCH
-\bind "M-i o g" "buffer-float-insert figure"
-\bind "M-i o t" "buffer-float-insert table"
-\bind "M-i o w" "buffer-float-insert wide-fig"
-\bind "M-i o d" "buffer-float-insert wide-tab"
-\bind "M-i o a" "buffer-float-insert algorithm"
-
-\bind "M-i t c" "toc-insert"
-\bind "M-i t f" "lof-insert"
-\bind "M-i t t" "lot-insert"
-\bind "M-i t i" "index-print"
-\bind "M-i t b" "bibtex-insert"
-\bind "M-i t a" "loa-insert"
-
-\bind "M-i minus" "hyphenation-point-insert"
-\bind "M-i p" "dots-insert"
-\bind "M-i e" "end-of-sentence-period-insert"
-\bind "M-i q" "quote-insert"
-\bind "M-i apostrophe" "quote-insert"
-\bind "M-i S-quotedbl" "quote-insert"
-\bind "M-i s h" "hfill-insert"
-# NOT IN MENU. (HIDDEN TO LEARNER)
-\bind "M-i s minus" "hyphenation-point-insert"
-\bind "M-i s b" "protected-space-insert"
-\bind "M-i s l" "break-line"
-\bind "M-i s i" "dots-insert"
-\bind "M-i s e" "end-of-sentence-period-insert"
-\bind "M-i s q" "quote-insert"
-\bind "M-i s m" "menu-separator-insert"
-\bind "M-i n" "note-insert"
-\bind "M-i l" "label-insert"
-\bind "M-i r" "reference-insert"
-\bind "M-i i" "citation-insert"
-\bind "M-i d" "index-insert"
-\bind "M-i w" "index-insert-last"
-\bind "M-i u" "url-insert"
-\bind "M-i space" "menu-open Insert"
-
-
-
-#
-# Math menu
-#
-
-\bind "M-m space" "menu-open Math"
-
-#
-# Options menu
-#
-
-#bind "M-o f" "screen-font-options" # Not yet implemented!
-#bind "M-o s" "spellcheck-options" # Not yet implemented!
-#bind "M-o k" "keyboard-options" # Not yet implemented!
-#bind "M-o l" "latex-options" # Not yet implemented!
-\bind "M-o space" "menu-open Options"
-
-
-#
-# Documents menu
-#
-# These are now defined in cua or emacs bind files so their "standard"
-# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
-#\bind "M-d p" "buffer-previous"
-#\bind "M-d space" "menu-open Documents"
-
-
-#
-# Help menu
-#
-
-#bind "M-h i" "help-introduction" # Not yet implemented!
-#bind "M-h t" "help-tutorial" # Not yet implemented!
-#bind "M-h u" "help-user-guide" # Not yet implemented!
-#bind "M-h r" "help-reference-guide" # Not yet implemented!
-#bind "M-h h" "help-how-do-i-" # Not yet implemented!
-#bind "M-h c" "help-customization" # Not yet implemented!
-#bind "M-h s" "help-special-tools" # Not yet implemented!
-#bind "M-h k" "help-known-bugs" # Not yet implemented!
-#bind "M-h a" "help-latex-config" # Not yet implemented!
-#bind "M-h o" "help-copyright" # Not yet implemented!
-#bind "M-h e" "help-credits" # Not yet implemented!
-#bind "M-h v" "help-version" # Not yet implemented!
-\bind "M-h space" "menu-open Help"
-
+# These ones are not supported anymore.
+#\bind "M-i minus" "hyphenation-point-insert"
+#\bind "M-i p" "dots-insert"
+#\bind "M-i e" "end-of-sentence-period-insert"
+#\bind "M-i q" "quote-insert"
+#\bind "M-i apostrophe" "quote-insert"
+#\bind "M-i S-quotedbl" "quote-insert"
+#\bind "M-i s h" "hfill-insert"
+#\bind "M-i s minus" "hyphenation-point-insert"
#
# Font size menu
font.setLanguage(params.language_info);
lex.printError("Unknown language `$$Token'");
}
+ } else if (token == "\\numeric") {
+ lex.next();
+ font.setNumber(font.setLyXMisc(lex.GetString()));
} else if (token == "\\emph") {
lex.next();
font.setEmph(font.setLyXMisc(lex.GetString()));
}
#endif
+void Number(BufferView * bv)
+{
+ LyXFont font(LyXFont::ALL_IGNORE);
+ font.setNumber(LyXFont::TOGGLE);
+ ToggleAndShow(bv, font);
+}
void Lang(BufferView * bv, string const & l)
{
bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
if (font.language() != ignore_language ||
- font.latex() != LyXFont::IGNORE) {
+ font.latex() != LyXFont::IGNORE ||
+ font.number() != LyXFont::IGNORE) {
LyXText * text = bv->text;
LyXCursor & cursor = text->cursor;
text->ComputeBidiTables(bv->buffer(), cursor.row());
extern void Table();
///
extern void Lang(BufferView *, string const &);
+///
+extern void Number(BufferView *);
#ifndef NEW_INSETS
///
extern void Melt(BufferView *);
dialog_->getWhichPages(), from, to, dialog_->getReverse(),
dialog_->getSort(), strToInt(dialog_->getCount())));
- if (retval!=0) {
+ if (!retval) {
// FIXME: should have a utility class for this
- string message(_("The error :\n\n"));
- message += strerror(retval);
- message += _("\n\noccurred while printing.\n");
+ string message(_("An error occured while printing.\n\n"));
message += _("Check the parameters are correct.\n");
KMsgBox msg(0, _("LyX: Print Error"), message.c_str(), KMsgBox::EXCLAMATION, _("&OK"));
msg.raise();
/* maybe try to support the others later */
BufferParams & param = lv_->buffer()->params;
- int data;
+ int data = 0;
if( cb == BULLETDEPTH1 )
data = 0;
else if ( cb == BULLETDEPTH2 )
/* Here we have to change the background pixmap to that selected */
/* by the user. (eg. standard.xpm, psnfss1.xpm etc...) */
- int data;
+ int data = 0;
if( cb == BULLETPANEL1 )
data = 0;
else if ( cb == BULLETPANEL2 )
return str;
}
-size_type const max_number_of_menus = 32;
+
+int get_new_submenu(vector<int> & smn, Window win)
+{
+ static size_type max_number_of_menus = 32;
+ if (smn.size() >= max_number_of_menus)
+ max_number_of_menus = fl_setpup_maxpup(2*smn.size());
+ int menu = fl_newpup(win);
+ smn.push_back(menu);
+ return menu;
+}
+
size_type const max_number_of_items = 25;
void add_toc2(int menu, string const & extra_label,
while (pos < to) {
++count;
if (count > max_number_of_items) {
- fl_addtopup(menu, ". . .%d");
+ int menu2 = get_new_submenu(smn, win);
+ add_toc2(menu2, extra_label, smn, win,
+ toc_list, pos, to, depth);
+ string label = _("More");
+ label += "...%m";
+ if (depth == 0)
+ label += extra_label;
+ fl_addtopup(menu, label.c_str(), menu2);
break;
}
size_type new_pos = pos+1;
if (new_pos == pos + 1) {
label += "%x" + tostr(action);
fl_addtopup(menu, label.c_str());
- } else if (smn.size() < max_number_of_menus) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
+ } else {
+ int menu2 = get_new_submenu(smn, win);
add_toc2(menu2, extra_label, smn, win,
toc_list, pos, new_pos, depth+1);
label += "%m";
fl_addtopup(menu, label.c_str(), menu2);
- } else {
- label += "%d";
- fl_addtopup(menu, label.c_str());
}
pos = new_pos;
}
for (int j = 1; j <= 3; ++j)
if (!toc_list[j].empty()) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
+ int menu2 = get_new_submenu(smn, win);
for (size_type i = 0; i < toc_list[j].size(); ++i) {
if (i > max_number_of_items) {
fl_addtopup(menu2, ". . .%d");
? label_list[j-1].substr(0, max_item_length2-1) + "$"
: label += label_list[j-1];
- if (smn.size() < max_number_of_menus) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
- for (size_type k = i; k < j; ++k) {
- int action = (type == "goto")
- ? lyxaction.getPseudoAction(LFUN_REF_GOTO,
- label_list[k])
- : lyxaction.getPseudoAction(LFUN_REF_INSERT,
- type + "|++||++|"
- + label_list[k]);
- string label2 = label_list[k];
- if (label2.size() > max_item_length)
- label2 = label2.substr(0, max_item_length-1) + "$";
- label2 += "%x" + tostr(action);
- fl_addtopup(menu2, label2.c_str());
- }
- label += "%m";
- fl_addtopup(menu, label.c_str(), menu2);
- } else {
- label += "%d";
- fl_addtopup(menu, label.c_str());
+ int menu2 = get_new_submenu(smn, win);
+ for (size_type k = i; k < j; ++k) {
+ int action = (type == "goto")
+ ? lyxaction.getPseudoAction(LFUN_REF_GOTO,
+ label_list[k])
+ : lyxaction.getPseudoAction(LFUN_REF_INSERT,
+ type + "|++||++|"
+ + label_list[k]);
+ string label2 = label_list[k];
+ if (label2.size() > max_item_length)
+ label2 = label2.substr(0, max_item_length-1) + "$";
+ label2 += "%x" + tostr(action);
+ fl_addtopup(menu2, label2.c_str());
}
+ label += "%m";
+ fl_addtopup(menu, label.c_str(), menu2);
}
}
}
string label = _(MenuNames[i]);
if (i == max_nonempty)
label += extra_label;
- if (smn.size() < max_number_of_menus) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
- add_references2(menu2, smn, win, label_list,
- MenuTypes[i]);
- fl_addtopup(menu, label.c_str(), menu2);
- } else {
- label += "%d";
- fl_addtopup(menu, label.c_str());
- }
+ int menu2 = get_new_submenu(smn, win);
+ add_references2(menu2, smn, win, label_list,
+ MenuTypes[i]);
+ fl_addtopup(menu, label.c_str(), menu2);
}
}
}
Menu md = Menu();
menubackend_->getMenu(menu_name).expand(md, owner_->buffer());
- int menu = fl_newpup(win);
+ int menu = get_new_submenu(smn, win);
fl_setpup_softedge(menu, true);
fl_setpup_bw(menu, -1);
lyxerr[Debug::GUI] << "Adding menu " << menu
<< " in deletion list" << endl;
- smn.push_back(menu);
// Compute the size of the largest label (because xforms is
// not able to support shortcuts correctly...)
setNoun(setMisc(newfont.noun(), noun()));
setLatex(setMisc(newfont.latex(), latex()));
+ setNumber(setMisc(newfont.number(), number()));
if (newfont.language() == language() && toggleall)
setLanguage(document_language);
else if (newfont.language() != ignore_language)
if (bits == inherit)
ost << _("Default") << ", ";
if (!params || (language() != params->language_info))
- ost << _("Language: ") << _(language()->display().c_str());
+ ost << _("Language: ") << _(language()->display().c_str()) << ", ";
+ if (number() != OFF)
+ ost << _(" Number ") << _(GUIMiscNames[number()]);
+
string buf(ost.str().c_str());
buf = strip(buf, ' ');
if (orgfont.emph() != emph()) {
os << "\\emph " << LyXMiscNames[emph()] << " \n";
}
+ if (orgfont.number() != number()) {
+ os << "\\numeric " << LyXMiscNames[number()] << " \n";
+ }
if (orgfont.underbar() != underbar()) {
// This is only for backwards compatibility
switch (underbar()) {
if (isRightToLeft()) {
os << "\\R{";
count += 3;
- env = true; //We have opened a new environment
} else {
os << "\\L{";
count += 3;
- env = true; //We have opened a new environment
}
} else {
string tmp = '{' +
"$$lang", language()->lang());
os << tmp;
count += tmp.length();
- env = true; //We have opened a new environment
}
}
+ if (number() == ON && prev.number() != ON &&
+ language()->lang() == "hebrew") {
+ os << "{\\beginL ";
+ count += 9;
+ }
+
LyXFont f = *this;
f.reduce(base);
int count = 0;
bool env = false;
- if (language() != base.language() && language() != next.language()) {
- os << "}";
- ++count;
- env = true; // Size change need not bother about closing env.
- }
-
LyXFont f = *this; // why do you need this?
f.reduce(base); // why isn't this just "reduce(base);" (Lgb)
// Because this function is const. Everything breaks if this
// method changes the font it represents. There is no speed penalty
// by using the temporary. (Asger)
+
if (f.family() != INHERIT_FAMILY) {
os << '}';
++count;
}
}
+ if (number() == ON && next.number() != ON &&
+ language()->lang() == "hebrew") {
+ os << "\\endL}";
+ count += 6;
+ }
+
+ if (language() != base.language() && language() != next.language()) {
+ os << "}";
+ ++count;
+ }
+
return count;
}
///
FONT_MISC_STATE latex() const;
+ ///
+ FONT_MISC_STATE number() const;
+
///
LColor::color color() const;
///
LyXFont & setLatex(LyXFont::FONT_MISC_STATE l);
///
+ LyXFont & setNumber(LyXFont::FONT_MISC_STATE n);
+ ///
LyXFont & setColor(LColor::color c);
///
LyXFont & setLanguage(Language const * l);
FontBits bits;
///
Language const * lang;
+ ///
+ FONT_MISC_STATE number_;
/// Sane font
static FontBits sane;
inline
bool operator==(LyXFont const & font1, LyXFont const & font2) {
return font1.bits == font2.bits &&
- font1.lang == font2.lang;
+ font1.lang == font2.lang &&
+ font1.number_ == font2.number_;
}
///
{
bits = sane;
lang = default_language;
+ number_ = OFF;
}
{
bits = x.bits;
lang = x.lang;
+ number_ = x.number_;
}
{
bits = inherit;
lang = default_language;
+ number_ = OFF;
}
{
bits = ignore;
lang = ignore_language;
+ number_ = IGNORE;
}
{
bits = sane;
lang = default_language;
+ number_ = OFF;
}
{
bits = inherit;
lang = l;
+ number_ = OFF;
}
{
bits = ignore;
lang = l;
+ number_ = IGNORE;
}
{
bits = sane;
lang = l;
+ number_ = OFF;
}
{
bits = x.bits;
lang = x.lang;
+ number_ = x.number_;
return *this;
}
}
+inline
+LyXFont::FONT_MISC_STATE LyXFont::number() const
+{
+ return number_;
+}
+
+
inline
bool LyXFont::isRightToLeft() const
{
inline
bool LyXFont::isVisibleRightToLeft() const
{
- return (lang->RightToLeft() && latex() != ON);
+ return (lang->RightToLeft() && latex() != ON && number() != ON);
}
return *this;
}
+
+inline
+LyXFont & LyXFont::setNumber(LyXFont::FONT_MISC_STATE n)
+{
+ number_ = n;
+ return *this;
+}
+
#endif
#ifdef HAVE_SYS_SELECT_H
# ifdef HAVE_STRINGS_H
// <strings.h> is needed at least on AIX because FD_ZERO uses bzero().
-# include <strings.h>
+ // BUT we cannot include both string.h and strings.h on Irix 6.5 :(
+# ifdef _AIX
+# include <strings.h>
+# endif
# endif
#include <sys/select.h>
#endif
#include "font.h"
#include "encoding.h"
#include "lyxscreen.h"
+#include "bufferview_funcs.h"
using std::max;
using std::min;
!row->par()->IsNewline(lpos + 1))
? lpos + 1 : lpos;
LyXFont font = row->par()->GetFontSettings(buf->params, pos);
+ if (pos != lpos && 0 < lpos && rtl0 && font.isRightToLeft() &&
+ font.number() == LyXFont::ON &&
+ row->par()->GetFontSettings(buf->params, lpos-1).number()
+ == LyXFont::ON) {
+ font = row->par()->GetFontSettings(buf->params, lpos);
+ is_space = false;
+ }
+
+
bool new_rtl = font.isVisibleRightToLeft();
bool new_rtl0 = font.isRightToLeft();
int new_level;
if (lpos == main_body - 1
&& row->pos() < main_body - 1
- && row->par()->IsLineSeparator(lpos)) {
+ && is_space) {
new_level = (rtl_par) ? 1 : 0;
new_rtl = new_rtl0 = rtl_par;
} else if (new_rtl0)
textclasslist.Style(bview->buffer()->params.textclass,
cursor.row()->par()->GetLayout()).free_spacing;
+
+ if (lyxrc.auto_number) {
+ if (current_font.number() == LyXFont::ON) {
+ if (!isdigit(c) && !strchr("+-/*", c) &&
+ !(strchr(".",c) &&
+ cursor.pos() >= 1 &&
+ cursor.pos() < cursor.par()->size() &&
+ GetFont(bview->buffer(),
+ cursor.par(),
+ cursor.pos()).number() == LyXFont::ON &&
+ GetFont(bview->buffer(),
+ cursor.par(),
+ cursor.pos()-1).number() == LyXFont::ON)
+ )
+ Number(bview); // Set current_font.number to OFF
+ } else if (isdigit(c) &&
+ real_current_font.isVisibleRightToLeft()) {
+ Number(bview); // Set current_font.number to ON
+
+ if (cursor.pos() > 0) {
+ char c = cursor.par()->GetChar(cursor.pos() - 1);
+ if (strchr("+-",c) &&
+ (cursor.pos() == 1 ||
+ cursor.par()->IsSeparator(cursor.pos() - 2) ||
+ cursor.par()->IsNewline(cursor.pos() - 2) )
+ ) {
+ SetCharFont(bview->buffer(),
+ cursor.par(),
+ cursor.pos() - 1,
+ current_font);
+ } else if (strchr(".", c) &&
+ cursor.pos() >= 2 &&
+ GetFont(bview->buffer(),
+ cursor.par(),
+ cursor.pos()-2).number() == LyXFont::ON) {
+ SetCharFont(bview->buffer(),
+ cursor.par(),
+ cursor.pos() - 1,
+ current_font);
+ }
+ }
+ }
+ }
+
+
/* First check, if there will be two blanks together or a blank at
the beginning of a paragraph.
I decided to handle blanks like normal characters, the main
// If there is a change in the language the implicit word selection
// is disabled.
LyXCursor resetCursor = cursor;
- bool implicitSelection = (font.language() == ignore_language)
+ bool implicitSelection = (font.language() == ignore_language
+ && font.number() == LyXFont::IGNORE)
? SelectWordWhenUnderCursor(bview) : false;
// Set font