diff options
| -rwxr-xr-x | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | changelog.txt | 25 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 12 | ||||
| -rw-r--r-- | src/blocks.c | 12 | ||||
| -rw-r--r-- | src/inlines.c | 16 | ||||
| -rw-r--r-- | src/inlines.h | 2 | ||||
| -rw-r--r-- | src/libcmark.pc.in | 2 | ||||
| -rw-r--r-- | test/smart_punct.txt | 9 | 
8 files changed, 60 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 90a0f34..4eb0541 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(PROJECT_NAME "cmark")  set(PROJECT_VERSION_MAJOR 0)  set(PROJECT_VERSION_MINOR 28) -set(PROJECT_VERSION_PATCH 0) +set(PROJECT_VERSION_PATCH 3)  set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} )  option(CMARK_TESTS "Build cmark tests and enable testing" ON) diff --git a/changelog.txt b/changelog.txt index e51acec..33cff54 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,27 @@ -[0.28] +[0.28.3] + +  * Include GNUInstallDirs in src/CMakeLists.txt (Nick Wellnhofer, #240). +    This fixes build problems on some cmake versions (#241). + +[0.28.2] + +  * Fixed regression in install dest for static library (#238). +    Due to a mistake, 0.28.1 installed libcmark.a into include/. + +[0.28.1] + +  * `--smart`: open quote can never occur right after `]` or `)` (#227). +  * Fix quadratic behavior in `finalize` (Vicent Marti). +  * Don't use `CMAKE_INSTALL_LIBDIR` to create `libcmark.pc` (#236). +    This wasn't getting set in processing `libcmark.pc.in`, and we +    were getting the wrong entry in `libcmark.pc`. +    The new approach sets an internal `libdir` variable to +    `lib${LIB_SUFFIX}`.  This variable is used both to set the +    install destination and in the libcmark.pc.in template. +  * Update README.md, replace `make astyle` with `make format` +    (Nguyễn Thái Ngọc Duy). + +[0.28.0]    * Update spec.    * Use unsigned integer when shifting (Phil Turnbull). diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3197196..d5a1936 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,8 @@ if(${CMAKE_VERSION} VERSION_GREATER "3.3")      cmake_policy(SET CMP0063 NEW)  endif() +include(GNUInstallDirs) +  set(LIBRARY "libcmark")  set(STATICLIBRARY "libcmark_static")  set(HEADERS @@ -123,19 +125,21 @@ endif(MSVC)  set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) +set(libdir lib${LIB_SUFFIX}) +  include (InstallRequiredSystemLibraries)  install(TARGETS ${PROGRAM} ${CMARK_INSTALL}    EXPORT cmark    RUNTIME DESTINATION bin -  LIBRARY DESTINATION lib${LIB_SUFFIX} -  ARCHIVE DESTINATION lib${LIB_SUFFIX} +  LIBRARY DESTINATION ${libdir} +  ARCHIVE DESTINATION ${libdir}    )  if(CMARK_SHARED OR CMARK_STATIC)    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcmark.pc.in      ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc @ONLY)    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libcmark.pc -    DESTINATION lib${LIB_SUFFIX}/pkgconfig) +    DESTINATION ${libdir}/pkgconfig)    install(FILES      cmark.h @@ -144,7 +148,7 @@ if(CMARK_SHARED OR CMARK_STATIC)      DESTINATION include      ) -  install(EXPORT cmark DESTINATION lib${LIB_SUFFIX}/cmake) +  install(EXPORT cmark DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)  endif()  # Feature tests diff --git a/src/blocks.c b/src/blocks.c index acdbb34..7f58ffd 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -255,17 +255,21 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {    switch (S_type(b)) {    case CMARK_NODE_PARAGRAPH: -    while (cmark_strbuf_at(node_content, 0) == '[' && -           (pos = cmark_parse_reference_inline(parser->mem, node_content, -                                               parser->refmap))) { +  { +    cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; +    while (chunk.len && chunk.data[0] == '[' && +           (pos = cmark_parse_reference_inline(parser->mem, &chunk, parser->refmap))) { -      cmark_strbuf_drop(node_content, pos); +      chunk.data += pos; +      chunk.len -= pos;      } +    cmark_strbuf_drop(node_content, (node_content->size - chunk.len));      if (is_blank(node_content, 0)) {        // remove blank node (former reference def)        cmark_node_free(b);      }      break; +  }    case CMARK_NODE_CODE_BLOCK:      if (!b->as.code.fenced) { // indented code diff --git a/src/inlines.c b/src/inlines.c index 21b11e1..3bade11 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -76,7 +76,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener,  static int parse_inline(subject *subj, cmark_node *parent, int options);  static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, -                             cmark_strbuf *buffer, cmark_reference_map *refmap); +                             cmark_chunk *chunk, cmark_reference_map *refmap);  static bufsize_t subject_find_special_char(subject *subj, int options);  // Create an inline with a literal string value. @@ -163,12 +163,10 @@ static CMARK_INLINE cmark_node *make_autolink(subject *subj,  }  static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, -                             cmark_strbuf *buffer, cmark_reference_map *refmap) { +                             cmark_chunk *chunk, cmark_reference_map *refmap) {    int i;    e->mem = mem; -  e->input.data = buffer->ptr; -  e->input.len = buffer->size; -  e->input.alloc = 0; +  e->input = *chunk;    e->line = line_number;    e->pos = 0;    e->block_offset = block_offset; @@ -404,7 +402,8 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open,      *can_close = right_flanking &&                   (!left_flanking || cmark_utf8proc_is_punctuation(after_char));    } else if (c == '\'' || c == '"') { -    *can_open = left_flanking && !right_flanking; +    *can_open = left_flanking && !right_flanking && +	         before_char != ']' && before_char != ')';      *can_close = right_flanking;    } else {      *can_open = left_flanking; @@ -1248,7 +1247,8 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) {  extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,                                  cmark_reference_map *refmap, int options) {    subject subj; -  subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &parent->content, refmap); +  cmark_chunk content = {parent->content.ptr, parent->content.size, 0}; +  subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &content, refmap);    cmark_chunk_rtrim(&subj.input);    while (!is_eof(&subj) && parse_inline(&subj, parent, options)) @@ -1276,7 +1276,7 @@ static void spnl(subject *subj) {  // Modify refmap if a reference is encountered.  // Return 0 if no reference found, otherwise position of subject  // after reference is parsed. -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,                                         cmark_reference_map *refmap) {    subject subj; diff --git a/src/inlines.h b/src/inlines.h index 52be768..39d3363 100644 --- a/src/inlines.h +++ b/src/inlines.h @@ -11,7 +11,7 @@ cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title);  void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,                           cmark_reference_map *refmap, int options); -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,                                         cmark_reference_map *refmap);  #ifdef __cplusplus diff --git a/src/libcmark.pc.in b/src/libcmark.pc.in index 024ae48..0f87c30 100644 --- a/src/libcmark.pc.in +++ b/src/libcmark.pc.in @@ -1,6 +1,6 @@  prefix=@CMAKE_INSTALL_PREFIX@  exec_prefix=@CMAKE_INSTALL_PREFIX@ -libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ +libdir=@CMAKE_INSTALL_PREFIX@/@libdir@  includedir=@CMAKE_INSTALL_PREFIX@/include  Name: libcmark diff --git a/test/smart_punct.txt b/test/smart_punct.txt index 3522c94..fd55e62 100644 --- a/test/smart_punct.txt +++ b/test/smart_punct.txt @@ -78,6 +78,15 @@ left double quote, to facilitate this style:  <p>“Second paragraph by same speaker, in fiction.”</p>  ```````````````````````````````` +A quote following a `]` or `)` character cannot +be an open quote: + +```````````````````````````````` example +[a]'s b' +. +<p>[a]’s b’</p> +```````````````````````````````` +  Quotes that are escaped come out as literal straight  quotes:  | 
