#include "insets/InsetFloatList.h"
#include "insets/InsetGraphics.h"
#include "insets/InsetGraphicsParams.h"
+#include "insets/InsetIPAMacro.h"
#include "insets/InsetNewline.h"
#include "insets/InsetQuotes.h"
#include "insets/InsetSpecialChar.h"
}
+static void ipaChar(Cursor & cur, InsetIPAChar::Kind kind)
+{
+ cur.recordUndo();
+ cap::replaceSelection(cur);
+ cur.insert(new InsetIPAChar(kind));
+ cur.posForward();
+}
+
+
static bool doInsertInset(Cursor & cur, Text * text,
FuncRequest const & cmd, bool edit, bool pastesel)
{
// Merge multiple paragraphs -- hack
while (cur.lastpit() > 0)
mergeParagraph(bparams, cur.text()->paragraphs(), 0);
+ Cursor old = cur;
cur.leaveInset(*inset);
+ if (cmd.action() == LFUN_PREVIEW_INSERT
+ || cmd.action() == LFUN_IPA_INSERT)
+ // trigger preview
+ notifyCursorLeavesOrEnters(old, cur);
}
} else {
cur.leaveInset(*inset);
}
break;
- case LFUN_BREAK_PARAGRAPH:
+ case LFUN_PARAGRAPH_BREAK:
cap::replaceSelection(cur);
breakParagraph(cur, cmd.argument() == "inverse");
cur.resetAnchor();
break;
}
+ case LFUN_IPAMACRO_INSERT: {
+ string const arg = cmd.getArg(0);
+ if (arg == "deco") {
+ // Open the inset, and move the current selection
+ // inside it.
+ doInsertInset(cur, this, cmd, true, true);
+ cur.posForward();
+ // Some insets are numbered, others are shown in the outline pane so
+ // let's update the labels and the toc backend.
+ cur.forceBufferUpdate();
+ break;
+ }
+ if (arg == "tone-falling")
+ ipaChar(cur, InsetIPAChar::TONE_FALLING);
+ else if (arg == "tone-rising")
+ ipaChar(cur, InsetIPAChar::TONE_RISING);
+ else if (arg == "tone-high-rising")
+ ipaChar(cur, InsetIPAChar::TONE_HIGH_RISING);
+ else if (arg == "tone-low-rising")
+ ipaChar(cur, InsetIPAChar::TONE_LOW_RISING);
+ else if (arg == "tone-high-rising-falling")
+ ipaChar(cur, InsetIPAChar::TONE_HIGH_RISING_FALLING);
+ else if (arg.empty())
+ lyxerr << "LyX function 'ipamacro-insert' needs an argument." << endl;
+ else
+ lyxerr << "Wrong argument for LyX function 'ipamacro-insert'." << endl;
+ break;
+ }
+
case LFUN_WORD_UPCASE:
changeCase(cur, text_uppercase);
break;
}
case LFUN_LANGUAGE: {
- Language const * lang = languages.getLanguage(to_utf8(cmd.argument()));
- if (!lang)
+ string const lang_arg = cmd.getArg(0);
+ bool const reset = (lang_arg.empty() || lang_arg == "reset");
+ Language const * lang =
+ reset ? reset_language
+ : languages.getLanguage(lang_arg);
+ // we allow reset_language, which is 0, but only if it
+ // was requested via empty or "reset" arg.
+ if (!lang && !reset)
break;
+ bool const toggle = (cmd.getArg(1) != "set");
selectWordWhenUnderCursor(cur, WHOLE_WORD_STRICT);
Font font(ignore_font, lang);
- toggleAndShow(cur, this, font, false);
+ toggleAndShow(cur, this, font, toggle);
break;
}
break;
case LFUN_APPENDIX:
+ // FIXME We really should not allow this to be put, e.g.,
+ // in a footnote, or in ERT. But it would make sense in a
+ // branch, so I'm not sure what to do.
flag.setOnOff(cur.paragraph().params().startOfAppendix());
break;
}
code = HYPERLINK_CODE;
break;
+ case LFUN_IPAMACRO_INSERT: {
+ string const arg = cmd.getArg(0);
+ if (arg == "deco")
+ code = IPADECO_CODE;
+ else
+ code = IPACHAR_CODE;
+ break;
+ }
case LFUN_QUOTE_INSERT:
// always allow this, since we will inset a raw quote
// if an inset is not allowed.
case LFUN_LANGUAGE:
enable = !cur.paragraph().isPassThru();
- flag.setOnOff(to_utf8(cmd.argument()) == cur.real_current_font.language()->lang());
+ flag.setOnOff(cmd.getArg(0) == cur.real_current_font.language()->lang());
break;
- case LFUN_BREAK_PARAGRAPH:
+ case LFUN_PARAGRAPH_BREAK:
enable = cur.inset().getLayout().isMultiPar();
break;