summaryrefslogtreecommitdiff
path: root/src/gmdocument.c
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2020-08-10 19:45:07 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2020-08-10 19:46:02 +0300
commita402c6c36643eb2e6e017010cb4006c422c83949 (patch)
tree91c00ab3c9db6ead08b750fc106462ac3f97a30b /src/gmdocument.c
parent0b1ba1f49d999b2eceb0cb740a7a7a6a59529911 (diff)
GmDocument: Don’t indent the first pre block
The first pre block, as a first visible block in the document, is likely a logo or picture of some sort. It is aligned with headers.
Diffstat (limited to 'src/gmdocument.c')
-rw-r--r--src/gmdocument.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/gmdocument.c b/src/gmdocument.c
index 582af833..76b5ef22 100644
--- a/src/gmdocument.c
+++ b/src/gmdocument.c
@@ -295,19 +295,20 @@ static void doLayout_GmDocument_(iGmDocument *d) {
295 if (d->size.x <= 0 || isEmpty_String(&d->source)) { 295 if (d->size.x <= 0 || isEmpty_String(&d->source)) {
296 return; 296 return;
297 } 297 }
298 const iRangecc content = range_String(&d->source); 298 const iRangecc content = range_String(&d->source);
299 iInt2 pos = zero_I2(); 299 iInt2 pos = zero_I2();
300 iRangecc line = iNullRange; 300 iRangecc line = iNullRange;
301 iRangecc preAltText = iNullRange; 301 iRangecc preAltText = iNullRange;
302 enum iGmLineType prevType = text_GmLineType; 302 enum iGmLineType prevType; // = text_GmLineType;
303 iBool isPreformat = iFalse; 303 iBool isPreformat = iFalse;
304 iBool isFirstText = iTrue; 304 iBool isFirstText = iTrue;
305 iBool enableIndents = iFalse;
305 iBool addSiteBanner = iTrue; 306 iBool addSiteBanner = iTrue;
306 int preFont = preformatted_FontId; 307 int preFont = preformatted_FontId;
307 if (d->format == plainText_GmDocumentFormat) { 308 if (d->format == plainText_GmDocumentFormat) {
308 isPreformat = iTrue; 309 isPreformat = iTrue;
309 isFirstText = iFalse; 310 isFirstText = iFalse;
310 } 311 }
311 while (nextSplit_Rangecc(&content, "\n", &line)) { 312 while (nextSplit_Rangecc(&content, "\n", &line)) {
312 iGmRun run; 313 iGmRun run;
313 run.flags = 0; 314 run.flags = 0;
@@ -318,6 +319,9 @@ static void doLayout_GmDocument_(iGmDocument *d) {
318 int indent = 0; 319 int indent = 0;
319 if (!isPreformat) { 320 if (!isPreformat) {
320 type = lineType_GmDocument_(d, &line); 321 type = lineType_GmDocument_(d, &line);
322 if (line.start == content.start) {
323 prevType = type;
324 }
321 indent = indents[type]; 325 indent = indents[type];
322 if (type == preformatted_GmLineType) { 326 if (type == preformatted_GmLineType) {
323 isPreformat = iTrue; 327 isPreformat = iTrue;
@@ -376,6 +380,13 @@ static void doLayout_GmDocument_(iGmDocument *d) {
376 /* TODO: Extra skip needed here? */ 380 /* TODO: Extra skip needed here? */
377 continue; 381 continue;
378 } 382 }
383 /* Begin indenting after the first preformatted block. */
384 if (type != preformatted_GmLineType || prevType != preformatted_GmLineType) {
385 enableIndents = iTrue;
386 }
387 if (!enableIndents) {
388 indent = 0;
389 }
379 /* Check the margin vs. previous run. */ 390 /* Check the margin vs. previous run. */
380 if (!isPreformat || (prevType != preformatted_GmLineType)) { 391 if (!isPreformat || (prevType != preformatted_GmLineType)) {
381 int required = 392 int required =