summaryrefslogtreecommitdiffstats
path: root/src/markdown.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/markdown.cpp')
-rw-r--r--src/markdown.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 02d1416..9ff139c 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -695,14 +695,26 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
if (i<size && data[i]=='<') i++;
linkStart=i;
nl=0;
- while (i<size && data[i]!='\'' && data[i]!='"' && data[i]!=')')
+ int braceCount=1;
+ while (i<size && data[i]!='\'' && data[i]!='"' && braceCount>0)
{
- if (data[i]=='\n')
+ if (data[i]=='\n') // unexpected EOL
{
nl++;
if (nl>1) return 0;
}
- i++;
+ else if (data[i]=='(')
+ {
+ braceCount++;
+ }
+ else if (data[i]==')')
+ {
+ braceCount--;
+ }
+ if (braceCount>0)
+ {
+ i++;
+ }
}
if (i>=size || data[i]=='\n') return 0;
convertStringFragment(link,data+linkStart,i-linkStart);
@@ -720,7 +732,7 @@ static int processLink(GrowBuf &out,const char *data,int,int size)
nl=0;
while (i<size && data[i]!=')')
{
- if (data[i]=='\n')
+ if (data[i]=='\n')
{
if (nl>1) return 0;
nl++;