Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Attempt to fix markdown rendering so that it correctly ignores table column separators that are contained without "code-span" back-ticks. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
d6058989edb359cd0b801fc242863175 |
User & Date: | drh 2020-05-26 15:54:22 |
Context
2020-05-26
| ||
15:54 | Update the version number to 2.12 as we begin the next release cycle. ... (check-in: ad9295fd user: drh tags: trunk) | |
15:54 | Attempt to fix markdown rendering so that it correctly ignores table column separators that are contained without "code-span" back-ticks. ... (check-in: d6058989 user: drh tags: trunk) | |
2020-05-25
| ||
23:40 | Update the changes log to include a date for 2.11 and to add a place-holder to begin recording 2.12 changes. ... (check-in: 87e3ad31 user: drh tags: trunk) | |
Changes
Changes to src/markdown.c.
︙ | ︙ | |||
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | }else{ i += end; end = i; } } } /* find_emph_char -- looks for the next emph char, skipping other constructs */ static size_t find_emph_char(char *data, size_t size, char c){ size_t i = 1; while( i<size ){ while( i<size && data[i]!=c && data[i]!='`' && data[i]!='[' ){ i++; } if( i>=size ) return 0; /* not counting escaped chars */ if( i && data[i-1]=='\\' ){ i++; continue; } if( data[i]==c ) return i; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < | < < | < < < < < < < < < < < < < < < < < < | | 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 | }else{ i += end; end = i; } } } /* ** data[*pI] should be a "`" character that introduces a code-span. ** The code-span boundry mark can be any number of one or more "`" ** characters. We do not know the size of the boundry marker, only ** that there is at least one "`" at data[*pI]. ** ** This routine increases *pI to move it past the code-span, including ** the closing boundary mark. Or, if the code-span is unterminated, ** this routine moves *pI past the opening boundary mark only. */ static void skip_codespan(const char *data, size_t size, size_t *pI){ size_t i = *pI; size_t span_nb; /* Number of "`" characters in the boundary mark */ size_t bt; assert( i<size ); assert( data[i]=='`' ); data += i; size -= i; /* counting the number of opening backticks */ i = 0; span_nb = 0; while( i<size && data[i]=='`' ){ i++; span_nb++; } if( i>=size ){ *pI += span_nb; return; } /* finding the matching closing sequence */ bt = 0; while( i<size && bt<span_nb ){ if( data[i]=='`' ) bt += 1; else bt = 0; i++; } *pI += (bt == span_nb) ? i : span_nb; } /* find_emph_char -- looks for the next emph char, skipping other constructs */ static size_t find_emph_char(char *data, size_t size, char c){ size_t i = 1; while( i<size ){ while( i<size && data[i]!=c && data[i]!='`' && data[i]!='[' ){ i++; } if( i>=size ) return 0; /* not counting escaped chars */ if( i && data[i-1]=='\\' ){ i++; continue; } if( data[i]==c ) return i; if( data[i]=='`' ){ /* skip a code span */ skip_codespan(data, size, &i); }else if( data[i]=='[' ){ /* skip a link */ size_t tmp_i = 0; char cc; i++; while( i<size && data[i]!=']' ){ if( !tmp_i && data[i]==c ) tmp_i = i; i++; } |
︙ | ︙ | |||
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | /* check for initial '|' */ if( i<size && data[i]=='|') outer_sep++; /* count the number of pipes in the line */ for(n_sep=0; i<size && data[i]!='\n'; i++){ if( is_table_sep(data, i) ) n_sep++; } /* march back to check for optional last '|' before blanks and EOL */ while( i && (data[i-1]==' ' || data[i-1]=='\t' || data[i-1]=='\n') ){ i--; } if( i && is_table_sep(data, i-1) ) outer_sep += 1; /* return the number of column or 0 if it's not a table line */ | > > > > | 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 | /* check for initial '|' */ if( i<size && data[i]=='|') outer_sep++; /* count the number of pipes in the line */ for(n_sep=0; i<size && data[i]!='\n'; i++){ if( is_table_sep(data, i) ) n_sep++; if( data[i]=='`' ){ skip_codespan(data, size, &i); i--; } } /* march back to check for optional last '|' before blanks and EOL */ while( i && (data[i-1]==' ' || data[i-1]=='\t' || data[i-1]=='\n') ){ i--; } if( i && is_table_sep(data, i-1) ) outer_sep += 1; /* return the number of column or 0 if it's not a table line */ |
︙ | ︙ | |||
1832 1833 1834 1835 1836 1837 1838 | } /* skip blanks */ while( i<size && (data[i]==' ' || data[i]=='\t') ){ i++; } beg = i; /* forward to the next separator or EOL */ | | > > > > > > | 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 | } /* skip blanks */ while( i<size && (data[i]==' ' || data[i]=='\t') ){ i++; } beg = i; /* forward to the next separator or EOL */ while( i<size && !is_table_sep(data, i) && data[i]!='\n' ){ if( data[i]=='`' ){ skip_codespan(data, size, &i); }else{ i++; } } end = i; if( i<size ){ i++; if( data[i-1]=='\n' ) total = i; } /* check optional right/center align marker */ |
︙ | ︙ |