diff options
Diffstat (limited to 'src/gmdocument.c')
-rw-r--r-- | src/gmdocument.c | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/src/gmdocument.c b/src/gmdocument.c index 1f8ecb75..6f038524 100644 --- a/src/gmdocument.c +++ b/src/gmdocument.c | |||
@@ -183,11 +183,13 @@ static iRangecc addLink_GmDocument_(iGmDocument *d, iRangecc line, iGmLinkId *li | |||
183 | link->flags |= query_GmLinkFlag; | 183 | link->flags |= query_GmLinkFlag; |
184 | } | 184 | } |
185 | } | 185 | } |
186 | else if (equalCase_Rangecc(parts.scheme, "finger")) { | ||
187 | link->flags |= finger_GmLinkFlag; | ||
188 | } | ||
186 | else if (equalCase_Rangecc(parts.scheme, "file")) { | 189 | else if (equalCase_Rangecc(parts.scheme, "file")) { |
187 | link->flags |= file_GmLinkFlag; | 190 | link->flags |= file_GmLinkFlag; |
188 | } | 191 | } |
189 | else if (equalCase_Rangecc(parts.scheme, "data")) { | 192 | else if (equalCase_Rangecc(parts.scheme, "data")) { |
190 | link->flags |= data_GmLinkFlag; | ||
191 | } | 193 | } |
192 | else if (equalCase_Rangecc(parts.scheme, "about")) { | 194 | else if (equalCase_Rangecc(parts.scheme, "about")) { |
193 | link->flags |= about_GmLinkFlag; | 195 | link->flags |= about_GmLinkFlag; |
@@ -245,7 +247,8 @@ static iBool isForcedMonospace_GmDocument_(const iGmDocument *d) { | |||
245 | if (equalCase_Rangecc(scheme, "gemini")) { | 247 | if (equalCase_Rangecc(scheme, "gemini")) { |
246 | return prefs_App()->monospaceGemini; | 248 | return prefs_App()->monospaceGemini; |
247 | } | 249 | } |
248 | if (equalCase_Rangecc(scheme, "gopher")) { | 250 | if (equalCase_Rangecc(scheme, "gopher") || |
251 | equalCase_Rangecc(scheme, "finger")) { | ||
249 | return prefs_App()->monospaceGopher; | 252 | return prefs_App()->monospaceGopher; |
250 | } | 253 | } |
251 | return iFalse; | 254 | return iFalse; |
@@ -290,6 +293,7 @@ static void doLayout_GmDocument_(iGmDocument *d) { | |||
290 | static const char *globe = "\U0001f310"; | 293 | static const char *globe = "\U0001f310"; |
291 | static const char *quote = "\u201c"; | 294 | static const char *quote = "\u201c"; |
292 | static const char *magnifyingGlass = "\U0001f50d"; | 295 | static const char *magnifyingGlass = "\U0001f50d"; |
296 | static const char *pointingFinger = "\U0001f449"; | ||
293 | const float midRunSkip = 0; /*0.120f;*/ /* extra space between wrapped text/quote lines */ | 297 | const float midRunSkip = 0; /*0.120f;*/ /* extra space between wrapped text/quote lines */ |
294 | const iPrefs *prefs = prefs_App(); | 298 | const iPrefs *prefs = prefs_App(); |
295 | clear_Array(&d->layout); | 299 | clear_Array(&d->layout); |
@@ -306,7 +310,7 @@ static void doLayout_GmDocument_(iGmDocument *d) { | |||
306 | iBool isFirstText = prefs->bigFirstParagraph; | 310 | iBool isFirstText = prefs->bigFirstParagraph; |
307 | iBool addQuoteIcon = prefs->quoteIcon; | 311 | iBool addQuoteIcon = prefs->quoteIcon; |
308 | iBool isPreformat = iFalse; | 312 | iBool isPreformat = iFalse; |
309 | iRangecc preAltText = iNullRange; | 313 | iRangecc preAltText = iNullRange; /* TODO: alt text is being ignored */ |
310 | int preFont = preformatted_FontId; | 314 | int preFont = preformatted_FontId; |
311 | uint16_t preId = 0; | 315 | uint16_t preId = 0; |
312 | iBool enableIndents = iFalse; | 316 | iBool enableIndents = iFalse; |
@@ -473,6 +477,7 @@ static void doLayout_GmDocument_(iGmDocument *d) { | |||
473 | const iGmLink *link = constAt_PtrArray(&d->links, run.linkId - 1); | 477 | const iGmLink *link = constAt_PtrArray(&d->links, run.linkId - 1); |
474 | icon.text = range_CStr(link->flags & query_GmLinkFlag ? magnifyingGlass | 478 | icon.text = range_CStr(link->flags & query_GmLinkFlag ? magnifyingGlass |
475 | : link->flags & file_GmLinkFlag ? folder | 479 | : link->flags & file_GmLinkFlag ? folder |
480 | : link->flags & finger_GmLinkFlag ? pointingFinger | ||
476 | : link->flags & mailto_GmLinkFlag ? envelope | 481 | : link->flags & mailto_GmLinkFlag ? envelope |
477 | : link->flags & remote_GmLinkFlag ? globe | 482 | : link->flags & remote_GmLinkFlag ? globe |
478 | : arrow); | 483 | : arrow); |
@@ -1110,7 +1115,7 @@ static void normalize_GmDocument(iGmDocument *d) { | |||
1110 | iRangecc src = range_String(&d->source); | 1115 | iRangecc src = range_String(&d->source); |
1111 | iRangecc line = iNullRange; | 1116 | iRangecc line = iNullRange; |
1112 | iBool isPreformat = iFalse; | 1117 | iBool isPreformat = iFalse; |
1113 | if (d->format == plainText_GmDocumentFormat) { // || isGopher_GmDocument_(d)) { | 1118 | if (d->format == plainText_GmDocumentFormat) { |
1114 | isPreformat = iTrue; /* Cannot be turned off. */ | 1119 | isPreformat = iTrue; /* Cannot be turned off. */ |
1115 | } | 1120 | } |
1116 | const int preTabWidth = 4; /* TODO: user-configurable parameter */ | 1121 | const int preTabWidth = 4; /* TODO: user-configurable parameter */ |
@@ -1363,7 +1368,8 @@ iMediaId linkAudio_GmDocument(const iGmDocument *d, iGmLinkId linkId) { | |||
1363 | 1368 | ||
1364 | enum iColorId linkColor_GmDocument(const iGmDocument *d, iGmLinkId linkId, enum iGmLinkPart part) { | 1369 | enum iColorId linkColor_GmDocument(const iGmDocument *d, iGmLinkId linkId, enum iGmLinkPart part) { |
1365 | const iGmLink *link = link_GmDocument_(d, linkId); | 1370 | const iGmLink *link = link_GmDocument_(d, linkId); |
1366 | const int www_GmLinkFlag = http_GmLinkFlag | mailto_GmLinkFlag; | 1371 | const int www_GmLinkFlag = http_GmLinkFlag | mailto_GmLinkFlag; |
1372 | const int gopherOrFinger_GmLinkFlag = gopher_GmLinkFlag | finger_GmLinkFlag; | ||
1367 | if (link) { | 1373 | if (link) { |
1368 | const iBool isUnsupported = (link->flags & supportedProtocol_GmLinkFlag) == 0; | 1374 | const iBool isUnsupported = (link->flags & supportedProtocol_GmLinkFlag) == 0; |
1369 | if (part == icon_GmLinkPart) { | 1375 | if (part == icon_GmLinkPart) { |
@@ -1371,42 +1377,36 @@ enum iColorId linkColor_GmDocument(const iGmDocument *d, iGmLinkId linkId, enum | |||
1371 | return tmBadLink_ColorId; | 1377 | return tmBadLink_ColorId; |
1372 | } | 1378 | } |
1373 | if (link->flags & visited_GmLinkFlag) { | 1379 | if (link->flags & visited_GmLinkFlag) { |
1374 | return link->flags & www_GmLinkFlag | 1380 | return link->flags & www_GmLinkFlag ? tmHypertextLinkIconVisited_ColorId |
1375 | ? tmHypertextLinkIconVisited_ColorId | 1381 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkIconVisited_ColorId |
1376 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkIconVisited_ColorId | 1382 | : tmLinkIconVisited_ColorId; |
1377 | : tmLinkIconVisited_ColorId; | ||
1378 | } | 1383 | } |
1379 | return link->flags & www_GmLinkFlag | 1384 | return link->flags & www_GmLinkFlag ? tmHypertextLinkIcon_ColorId |
1380 | ? tmHypertextLinkIcon_ColorId | 1385 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkIcon_ColorId |
1381 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkIcon_ColorId | 1386 | : tmLinkIcon_ColorId; |
1382 | : tmLinkIcon_ColorId; | ||
1383 | } | 1387 | } |
1384 | if (part == text_GmLinkPart) { | 1388 | if (part == text_GmLinkPart) { |
1385 | return link->flags & www_GmLinkFlag | 1389 | return link->flags & www_GmLinkFlag ? tmHypertextLinkText_ColorId |
1386 | ? tmHypertextLinkText_ColorId | 1390 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkText_ColorId |
1387 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkText_ColorId | 1391 | : tmLinkText_ColorId; |
1388 | : tmLinkText_ColorId; | ||
1389 | } | 1392 | } |
1390 | if (part == textHover_GmLinkPart) { | 1393 | if (part == textHover_GmLinkPart) { |
1391 | return link->flags & www_GmLinkFlag | 1394 | return link->flags & www_GmLinkFlag ? tmHypertextLinkTextHover_ColorId |
1392 | ? tmHypertextLinkTextHover_ColorId | 1395 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkTextHover_ColorId |
1393 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkTextHover_ColorId | 1396 | : tmLinkTextHover_ColorId; |
1394 | : tmLinkTextHover_ColorId; | ||
1395 | } | 1397 | } |
1396 | if (part == domain_GmLinkPart) { | 1398 | if (part == domain_GmLinkPart) { |
1397 | if (isUnsupported) { | 1399 | if (isUnsupported) { |
1398 | return tmBadLink_ColorId; | 1400 | return tmBadLink_ColorId; |
1399 | } | 1401 | } |
1400 | return link->flags & www_GmLinkFlag | 1402 | return link->flags & www_GmLinkFlag ? tmHypertextLinkDomain_ColorId |
1401 | ? tmHypertextLinkDomain_ColorId | 1403 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkDomain_ColorId |
1402 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkDomain_ColorId | 1404 | : tmLinkDomain_ColorId; |
1403 | : tmLinkDomain_ColorId; | ||
1404 | } | 1405 | } |
1405 | if (part == visited_GmLinkPart) { | 1406 | if (part == visited_GmLinkPart) { |
1406 | return link->flags & www_GmLinkFlag | 1407 | return link->flags & www_GmLinkFlag ? tmHypertextLinkLastVisitDate_ColorId |
1407 | ? tmHypertextLinkLastVisitDate_ColorId | 1408 | : link->flags & gopherOrFinger_GmLinkFlag ? tmGopherLinkLastVisitDate_ColorId |
1408 | : link->flags & gopher_GmLinkFlag ? tmGopherLinkLastVisitDate_ColorId | 1409 | : tmLinkLastVisitDate_ColorId; |
1409 | : tmLinkLastVisitDate_ColorId; | ||
1410 | } | 1410 | } |
1411 | } | 1411 | } |
1412 | return tmLinkText_ColorId; | 1412 | return tmLinkText_ColorId; |
@@ -1416,6 +1416,7 @@ iBool isMediaLink_GmDocument(const iGmDocument *d, iGmLinkId linkId) { | |||
1416 | const iString *dstUrl = absoluteUrl_String(&d->url, linkUrl_GmDocument(d, linkId)); | 1416 | const iString *dstUrl = absoluteUrl_String(&d->url, linkUrl_GmDocument(d, linkId)); |
1417 | const iRangecc scheme = urlScheme_String(dstUrl); | 1417 | const iRangecc scheme = urlScheme_String(dstUrl); |
1418 | if (equalCase_Rangecc(scheme, "gemini") || equalCase_Rangecc(scheme, "gopher") || | 1418 | if (equalCase_Rangecc(scheme, "gemini") || equalCase_Rangecc(scheme, "gopher") || |
1419 | equalCase_Rangecc(scheme, "finger") || | ||
1419 | equalCase_Rangecc(scheme, "file") || willUseProxy_App(scheme)) { | 1420 | equalCase_Rangecc(scheme, "file") || willUseProxy_App(scheme)) { |
1420 | return (linkFlags_GmDocument(d, linkId) & | 1421 | return (linkFlags_GmDocument(d, linkId) & |
1421 | (imageFileExtension_GmLinkFlag | audioFileExtension_GmLinkFlag)) != 0; | 1422 | (imageFileExtension_GmLinkFlag | audioFileExtension_GmLinkFlag)) != 0; |