Skip to content

Commit b1556b3

Browse files
authored
Merge pull request commonmark#275 from github/inline-sourcepos-off
correct sourcepos for emphasis inlines
2 parents 3a440af + d479c28 commit b1556b3

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

api_test/main.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,53 @@ static void source_pos(test_batch_runner *runner) {
952952
cmark_node_free(doc);
953953
}
954954

955+
static void source_pos_inlines(test_batch_runner *runner) {
956+
{
957+
static const char markdown[] =
958+
"*first*\n"
959+
"second\n";
960+
961+
cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT);
962+
char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS);
963+
STR_EQ(runner, xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
964+
"<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"
965+
"<document sourcepos=\"1:1-2:6\" xmlns=\"http://commonmark.org/xml/1.0\">\n"
966+
" <paragraph sourcepos=\"1:1-2:6\">\n"
967+
" <emph sourcepos=\"1:1-1:7\">\n"
968+
" <text sourcepos=\"1:2-1:6\" xml:space=\"preserve\">first</text>\n"
969+
" </emph>\n"
970+
" <softbreak />\n"
971+
" <text sourcepos=\"2:1-2:6\" xml:space=\"preserve\">second</text>\n"
972+
" </paragraph>\n"
973+
"</document>\n",
974+
"sourcepos are as expected");
975+
free(xml);
976+
cmark_node_free(doc);
977+
}
978+
{
979+
static const char markdown[] =
980+
"*first\n"
981+
"second*\n";
982+
983+
cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT);
984+
char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS);
985+
STR_EQ(runner, xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
986+
"<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"
987+
"<document sourcepos=\"1:1-2:7\" xmlns=\"http://commonmark.org/xml/1.0\">\n"
988+
" <paragraph sourcepos=\"1:1-2:7\">\n"
989+
" <emph sourcepos=\"1:1-2:7\">\n"
990+
" <text sourcepos=\"1:2-1:6\" xml:space=\"preserve\">first</text>\n"
991+
" <softbreak />\n"
992+
" <text sourcepos=\"2:1-2:6\" xml:space=\"preserve\">second</text>\n"
993+
" </emph>\n"
994+
" </paragraph>\n"
995+
"</document>\n",
996+
"sourcepos are as expected");
997+
free(xml);
998+
cmark_node_free(doc);
999+
}
1000+
}
1001+
9551002
static void ref_source_pos(test_batch_runner *runner) {
9561003
static const char markdown[] =
9571004
"Let's try [reference] links.\n"
@@ -1002,6 +1049,7 @@ int main() {
10021049
test_safe(runner);
10031050
test_feed_across_line_ending(runner);
10041051
source_pos(runner);
1052+
source_pos_inlines(runner);
10051053
ref_source_pos(runner);
10061054

10071055
test_print_summary(runner);

src/inlines.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -732,9 +732,10 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener,
732732
}
733733
cmark_node_insert_after(opener_inl, emph);
734734

735-
emph->start_line = emph->end_line = subj->line;
736-
emph->start_column = opener_inl->start_column + subj->column_offset;
737-
emph->end_column = closer_inl->end_column + subj->column_offset;
735+
emph->start_line = opener_inl->start_line;
736+
emph->end_line = closer_inl->end_line;
737+
emph->start_column = opener_inl->start_column;
738+
emph->end_column = closer_inl->end_column;
738739

739740
// if opener has 0 characters, remove it and its associated inline
740741
if (opener_num_chars == 0) {

0 commit comments

Comments
 (0)