Skip to content

Commit e7f2c05

Browse files
authored
Merge pull request #3236 from techee/markdown3
Markdown: rewrite in C
2 parents c4378f2 + 78320f2 commit e7f2c05

File tree

19 files changed

+430
-826
lines changed

19 files changed

+430
-826
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--sort=no
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A input.md /^# A$/;" c
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
`O`
2+
# A
3+

Units/parser-markdown.r/frontmatter.d/input.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ tags: ['code','python']
66
menu:
77
main:
88
parent: 'code'
9+
layout: default
910
---
1011

1112
# About this input

Units/parser-markdown.r/simple-markdown.d/expected.tags

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,17 @@ t input.md /^###### t #$/;" u l4subsection:h""k""o""q""s end:59 sectionMarker:##
2121
u input.md /^###### u #######$/;" u l4subsection:h""k""o""q""s end:61 sectionMarker:##
2222
A input.md /^A$/;" c end:64 sectionMarker:=
2323
B input.md /^B$/;" c end:74 sectionMarker:=
24-
C input.md /^C$/;" c end:105 sectionMarker:=
24+
C input.md /^C$/;" c end:128 sectionMarker:=
2525
D input.md /^D$/;" s chapter:C end:100 sectionMarker:-
2626
E input.md /^E$/;" s chapter:C end:103 sectionMarker:-
27-
F input.md /^F$/;" s chapter:C end:105 sectionMarker:-
27+
F input.md /^F$/;" s chapter:C end:106 sectionMarker:-
28+
G input.md /^ G$/;" s chapter:C end:109 sectionMarker:-
29+
H input.md /^ H$/;" s chapter:C end:112 sectionMarker:-
30+
I input.md /^ I$/;" s chapter:C end:128 sectionMarker:-
31+
C\\# input.md /^# C\\#$/;" c end:146 sectionMarker:#
32+
J input.md /^J$/;" s chapter:C\\# end:133 sectionMarker:-
33+
K input.md /^K$/;" s chapter:C\\# end:136 sectionMarker:-
34+
L input.md /^L$/;" s chapter:C\\# end:146 sectionMarker:-
2835
x input.md /^function x$/;" f
2936
y input.md /^function y$/;" f
3037
z input.md /^z()$/;" f

Units/parser-markdown.r/simple-markdown.d/input.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,44 @@ E
103103

104104
F
105105
---
106+
107+
G
108+
-
109+
110+
H
111+
-
112+
113+
I
114+
-
115+
116+
indented
117+
-
118+
119+
indented_with_tab
120+
-
121+
122+
indented_with_space_and_tab
123+
-
124+
125+
text
126+
- ignored
127+
-
128+
129+
# C\#
130+
131+
J
132+
-
133+
134+
K
135+
-
136+
137+
L
138+
-
139+
140+
ignored
141+
-
142+
143+
```foo```
144+
145+
> quoted
146+
---
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--sort=no
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
EXTRACT ME 1 input.md /^# EXTRACT ME 1$/;" c
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<!--
2+
# SKIP ME 1
3+
-->
4+
5+
<!-- # SKIP ME 2 -->
6+
7+
# EXTRACT ME 1

docs/news.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ The following parsers have been added:
430430
* GNU linker script(LdScript)
431431
* LEX *optlib*
432432
* Man page *optlib*
433-
* Markdown *optlib*
433+
* Markdown
434434
* Maven2 *libxml*
435435
* MesonBuild (Meson) *optlib*
436436
* MesonOptions *optlib+script*

main/nestlevel.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
*/
3030

3131
extern NestingLevels *nestingLevelsNewFull(size_t userDataSize,
32-
void (* deleteUserData)(NestingLevel *))
32+
void (* deleteUserData)(NestingLevel *, void *))
3333
{
3434
NestingLevels *nls = xCalloc (1, NestingLevels);
3535
nls->userDataSize = userDataSize;
@@ -42,7 +42,7 @@ extern NestingLevels *nestingLevelsNew(size_t userDataSize)
4242
return nestingLevelsNewFull (userDataSize, NULL);
4343
}
4444

45-
extern void nestingLevelsFree(NestingLevels *nls)
45+
extern void nestingLevelsFreeFull(NestingLevels *nls, void *ctxData)
4646
{
4747
int i;
4848
NestingLevel *nl;
@@ -51,7 +51,7 @@ extern void nestingLevelsFree(NestingLevels *nls)
5151
{
5252
nl = NL_NTH(nls, i);
5353
if (nls->deleteUserData)
54-
nls->deleteUserData (nl);
54+
nls->deleteUserData (nl, ctxData);
5555
nl->corkIndex = CORK_NIL;
5656
}
5757
if (nls->levels) eFree(nls->levels);
@@ -89,13 +89,13 @@ extern NestingLevel *nestingLevelsTruncate(NestingLevels *nls, int depth, int co
8989
}
9090

9191

92-
extern void nestingLevelsPop(NestingLevels *nls)
92+
extern void nestingLevelsPopFull(NestingLevels *nls, void *ctxData)
9393
{
9494
NestingLevel *nl = nestingLevelsGetCurrent(nls);
9595

9696
Assert (nl != NULL);
9797
if (nls->deleteUserData)
98-
nls->deleteUserData (nl);
98+
nls->deleteUserData (nl, ctxData);
9999
nl->corkIndex = CORK_NIL;
100100
nls->n--;
101101
}

main/nestlevel.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,23 @@ struct NestingLevels
3535
int n; /* number of levels in use */
3636
int allocated;
3737
size_t userDataSize;
38-
void (* deleteUserData) (NestingLevel *);
38+
/* The second argument is given via nestinglevelsPopFull
39+
* or nestinglevelFreeFull */
40+
void (* deleteUserData) (NestingLevel *, void *);
3941
};
4042

4143
/*
4244
* FUNCTION PROTOTYPES
4345
*/
4446
extern NestingLevels *nestingLevelsNew(size_t userDataSize);
4547
extern NestingLevels *nestingLevelsNewFull(size_t userDataSize,
46-
void (* deleteUserData)(NestingLevel *));
47-
extern void nestingLevelsFree(NestingLevels *nls);
48+
void (* deleteUserData)(NestingLevel *, void *));
49+
#define nestingLevelsFree(NLS) nestingLevelsFreeFull(NLS, NULL)
50+
extern void nestingLevelsFreeFull(NestingLevels *nls, void *ctxData);
4851
extern NestingLevel *nestingLevelsPush(NestingLevels *nls, int corkIndex);
4952
extern NestingLevel * nestingLevelsTruncate(NestingLevels *nls, int depth, int corkIndex);
50-
extern void nestingLevelsPop(NestingLevels *nls);
53+
#define nestingLevelsPop(NLS) nestingLevelsPopFull(NLS, NULL)
54+
extern void nestingLevelsPopFull(NestingLevels *nls, void *ctxData);
5155
#define nestingLevelsGetCurrent(NLS) nestingLevelsGetNthParent((NLS), 0)
5256
extern NestingLevel *nestingLevelsGetNthFromRoot(const NestingLevels *nls, int n);
5357
extern NestingLevel *nestingLevelsGetNthParent(const NestingLevels *nls, int n);

0 commit comments

Comments
 (0)