Automatically adjust tab stop width

Extend tab stops to the same indentation point instead of a fixed number of spaces.

Fix for bug #12736
This commit is contained in:
Daniel Ramoeller 2023-04-11 13:21:23 +02:00 committed by Jean-Marc Lasgouttes
parent a487a7e250
commit bb16efc07e

View File

@ -899,10 +899,13 @@ Row TextMetrics::tokenizeParagraph(pit_type const pit) const
FontMetrics const & fm = theFontMetrics(text_->labelFont(par)); FontMetrics const & fm = theFontMetrics(text_->labelFont(par));
int const wid = fm.width(par.layout().labelsep); int const wid = fm.width(par.layout().labelsep);
row.addMarginSpace(i, wid, *fi, par.lookupChange(i)); row.addMarginSpace(i, wid, *fi, par.lookupChange(i));
} else if (c == '\t') } else if (c == '\t') {
row.addSpace(i, theFontMetrics(*fi).width(from_ascii(" ")), // Make tab stop size adjust automatically depending on char number
int tabStopWidth = 4;
std::string s = std::string(tabStopWidth - i % tabStopWidth, ' ');
row.addSpace(i, theFontMetrics(*fi).width(from_ascii(s)),
*fi, par.lookupChange(i)); *fi, par.lookupChange(i));
else if (c == 0x2028 || c == 0x2029) { } else if (c == 0x2028 || c == 0x2029) {
/** /**
* U+2028 LINE SEPARATOR * U+2028 LINE SEPARATOR
* U+2029 PARAGRAPH SEPARATOR * U+2029 PARAGRAPH SEPARATOR