Skip to content

Commit d3777c5

Browse files
Define a strikethrough inline node type.
1 parent 57d60e9 commit d3777c5

File tree

6 files changed

+53
-2
lines changed

6 files changed

+53
-2
lines changed

src/cmark.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,11 @@ typedef enum {
6565
CMARK_NODE_LINK,
6666
CMARK_NODE_IMAGE,
6767

68+
/* inlines with no syntax rules in the current specification */
69+
CMARK_NODE_STRIKETHROUGH,
70+
6871
CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
69-
CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
72+
CMARK_NODE_LAST_INLINE = CMARK_NODE_STRIKETHROUGH,
7073
} cmark_node_type;
7174

7275
/* For backwards compatibility: */

src/commonmark.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
476476
}
477477
break;
478478

479+
case CMARK_NODE_STRIKETHROUGH:
480+
OUT(cmark_node_get_string_content(node), false, LITERAL);
481+
break;
482+
479483
default:
480484
assert(false);
481485
break;

src/html.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,14 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type,
374374
}
375375
break;
376376

377+
case CMARK_NODE_STRIKETHROUGH:
378+
if (entering) {
379+
cmark_strbuf_puts(html, "<del>");
380+
} else {
381+
cmark_strbuf_puts(html, "</del>");
382+
}
383+
break;
384+
377385
default:
378386
assert(false);
379387
break;

src/latex.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,15 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
465465
}
466466
break;
467467

468+
case CMARK_NODE_STRIKETHROUGH:
469+
/* requires \usepackage{ulem} */
470+
if (entering) {
471+
LIT("\\sout{");
472+
} else {
473+
LIT("}");
474+
}
475+
break;
476+
468477
default:
469478
assert(false);
470479
break;

src/man.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,19 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
8282

8383
switch (node->type) {
8484
case CMARK_NODE_DOCUMENT:
85+
if (entering) {
86+
/* Define a strikethrough macro */
87+
/* Commenting out because this makes tests fail
88+
LIT(".de ST");
89+
CR();
90+
LIT(".nr ww \\w'\\\\$1'");
91+
CR();
92+
LIT("\\Z@\\v'-.25m'\\l'\\\\n[ww]u'@\\\\$1");
93+
CR();
94+
LIT("..");
95+
CR();
96+
*/
97+
}
8598
break;
8699

87100
case CMARK_NODE_BLOCK_QUOTE:
@@ -273,6 +286,16 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
273286
}
274287
break;
275288

289+
case CMARK_NODE_STRIKETHROUGH:
290+
if (entering) {
291+
CR();
292+
LIT(".ST \"");
293+
} else {
294+
LIT("\"");
295+
CR();
296+
}
297+
break;
298+
276299
default:
277300
assert(false);
278301
break;

src/node.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) {
6060
case CMARK_NODE_STRONG:
6161
case CMARK_NODE_LINK:
6262
case CMARK_NODE_IMAGE:
63+
case CMARK_NODE_STRIKETHROUGH:
6364
case CMARK_NODE_CUSTOM_INLINE:
6465
return S_is_inline(child);
6566
case CMARK_NODE_TABLE:
@@ -72,7 +73,8 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) {
7273
child->type == CMARK_NODE_EMPH ||
7374
child->type == CMARK_NODE_STRONG ||
7475
child->type == CMARK_NODE_LINK ||
75-
child->type == CMARK_NODE_IMAGE;
76+
child->type == CMARK_NODE_IMAGE ||
77+
child->type == CMARK_NODE_STRIKETHROUGH;
7678

7779
default:
7880
break;
@@ -250,6 +252,8 @@ const char *cmark_node_get_type_string(cmark_node *node) {
250252
return "link";
251253
case CMARK_NODE_IMAGE:
252254
return "image";
255+
case CMARK_NODE_STRIKETHROUGH:
256+
return "strikethrough";
253257
}
254258

255259
return "<unknown>";

0 commit comments

Comments
 (0)