if (range_.first > pos) {
range_.first += offset;
range_.last += offset;
- } else if (range_.last > pos) {
+ } else if (range_.last >= pos) {
range_.last += offset;
}
}
// ArabTeX, though, cannot handle this special behavior, it seems.
bool arabtex = basefont.language()->lang() == "arabic_arabtex"
|| running_font.language()->lang() == "arabic_arabtex";
- if (open_font && inset->noFontChange()) {
+ if (open_font && !inset->inheritFont()) {
bool closeLanguage = arabtex
|| basefont.isRightToLeft() == running_font.isRightToLeft();
unsigned int count = running_font.latexWriteEndChanges(os,
int prev_rows = os.texrow().rows();
try {
+ runparams.lastid = id_;
+ runparams.lastpos = i;
inset->latex(os, runparams);
} catch (EncodingException & e) {
// add location information and throw again.
char_type const c = text_[i];
if (style.pass_thru || runparams.pass_thru) {
- if (c != '\0')
- // FIXME UNICODE: This can fail if c cannot
- // be encoded in the current encoding.
+ if (c != '\0') {
+ Encoding const * const enc = runparams.encoding;
+ if (enc && enc->latexChar(c, true).empty())
+ throw EncodingException(c);
os.put(c);
+ }
return;
}
runparams);
}
- Change const & change = runparams.inDeletedInset ? runparams.changeOfDeletedInset
- : lookupChange(i);
+ Change const & change = runparams.inDeletedInset
+ ? runparams.changeOfDeletedInset : lookupChange(i);
if (bparams.outputChanges && runningChange != change) {
if (open_font) {
if (pos == size())
return true;
char_type const c = d->text_[pos];
+ // if we have a hard hyphen (no en- or emdash),
+ // we pass this to the spell checker
+ if (c == '-') {
+ int j = pos + 1;
+ if ((j == size() || d->text_[j] != '-')
+ && (pos == 0 || d->text_[pos - 1] != '-'))
+ return false;
+ }
// We want to pass the ' and escape chars to the spellchecker
static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\'');
return (!isLetterChar(c) && !isDigitASCII(c) && !contains(quote, c));
int i = 0;
pos_type const parsize = d->text_.size();
for (i = 0; i < strsize && pos < parsize; ++i, ++pos) {
- // Ignore ligature break and hyphenation chars while searching
+ // Ignore "invisible" letters such as ligature breaks
+ // and hyphenation chars while searching
while (pos < parsize - 1 && isInset(pos)) {
- const InsetSpecialChar *isc = dynamic_cast<const InsetSpecialChar*>(getInset(pos));
- if (isc == 0
- || (isc->kind() != InsetSpecialChar::HYPHENATION
- && isc->kind() != InsetSpecialChar::LIGATURE_BREAK))
+ odocstringstream os;
+ getInset(pos)->toString(os);
+ if (!getInset(pos)->isLetter() || !os.str().empty())
break;
pos++;
}