From 1f7b8057df49f94169a5a8409388fd1689810a44 Mon Sep 17 00:00:00 2001 From: David Parsons Date: Sat, 6 Mar 2010 15:07:46 -0800 Subject: [PATCH] 1. If a full tick match isn't found, choose the closest substring match. 2. Move code test cases to code.t 3. Add new code test cases to check that the code handler works like the standard does. --- generate.c | 22 ++++++++++++++++------ tests/code.t | 5 +++++ tests/misc.t | 4 ---- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/generate.c b/generate.c index 8252b88..62380be 100644 --- a/generate.c +++ b/generate.c @@ -21,7 +21,7 @@ typedef int (*stfu)(const void*,const void*); /* forward declarations */ -static int matchticks(MMIOT*, int); +static int matchticks(MMIOT*, int*); static void codeblock(MMIOT*); static void codespan(MMIOT*, int); static int nrticks(int, MMIOT*); @@ -1071,7 +1071,7 @@ text(MMIOT *f) else { int size, tick = nrticks(0, f); - if ( size = matchticks(f, tick) ) { + if ( size = matchticks(f, &tick) ) { shift(f, tick); codespan(f, size-tick); shift(f, size-1); @@ -1126,19 +1126,29 @@ text(MMIOT *f) static int -matchticks(MMIOT *f, int escape) +matchticks(MMIOT *f, int *escape) { int size, tick, c; + int subsize=0, subtick=0; - for (size = escape; (c=peek(f,size)) != EOF; ) { + for (size = *escape; (c=peek(f,size)) != EOF; ) { if ( c == '`' ) - if ( (tick=nrticks(size,f)) == escape ) + if ( (tick=nrticks(size,f)) == *escape ) return size; - else + else { + if ( !subsize ) { + subsize = size; + subtick = tick; + } size += tick; + } else size++; } + if ( subsize ) { + *escape = subtick; + return subsize; + } return 0; } /* matchticks */ diff --git a/tests/code.t b/tests/code.t index 821055c..8eb441a 100644 --- a/tests/code.t +++ b/tests/code.t @@ -15,6 +15,11 @@ code try 'unclosed single backtick' '`hi there' '

`hi there

' try 'unclosed double backtick' '``hi there' '

``hi there

' try 'remove space around code' '`` hi there ``' '

hi there

' +try '`` a```b ``' '`` a```b ``' '

a```b

' +try '`a\`' '`a\`' '

a\

' +try '`>`' '`>`' '

>

' +try '`` ` ``' '`` ` ``' '

`

' +try '````` ``` `' '````` ``` `' '

`` `

' summary $0 exit $rc diff --git a/tests/misc.t b/tests/misc.t index 7ec2b0f..969ca3b 100644 --- a/tests/misc.t +++ b/tests/misc.t @@ -7,10 +7,6 @@ MARKDOWN_FLAGS= try 'single paragraph' 'AAA' '

AAA

' try '< -> <' '<' '

<

' -try '`>` -> >' '`>`' '

>

' -try '`` ` `` -> `' '`` ` ``' '

`

' -try '`` a```b ``' '`` a```b ``' '

a```b

' -try '`a^A` -> a^A' '`a^A`' '

a^A

' summary $0 exit $rc