redcarpet 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of redcarpet might be problematic. Click here for more details.

data/ext/markdown.c CHANGED
@@ -1062,35 +1062,44 @@ parse_blockcode(struct buf *ob, struct render *rndr,
1062
1062
  /* parse_listitem • parsing of a single list item */
1063
1063
  /* assuming initial prefix is already removed */
1064
1064
  static size_t
1065
- parse_listitem(struct buf *ob, struct render *rndr, char *data, size_t size, int *flags, int depth) {
1065
+ parse_listitem(struct buf *ob, struct render *rndr, char *data, size_t size, int *flags, int depth)
1066
+ {
1066
1067
  struct buf *work = 0, *inter = 0;
1067
1068
  size_t beg = 0, end, pre, sublist = 0, orgpre = 0, i;
1068
1069
  int in_empty = 0, has_inside_empty = 0;
1069
1070
 
1070
1071
  /* keeping book of the first indentation prefix */
1071
- if (size > 1 && data[0] == ' ') { orgpre = 1;
1072
- if (size > 2 && data[1] == ' ') { orgpre = 2;
1073
- if (size > 3 && data[2] == ' ') { orgpre = 3; } } }
1072
+ while (orgpre < 3 && orgpre < size && data[orgpre] == ' ')
1073
+ orgpre++;
1074
+
1074
1075
  beg = prefix_uli(data, size);
1075
- if (!beg) beg = prefix_oli(data, size);
1076
- if (!beg) return 0;
1076
+ if (!beg)
1077
+ beg = prefix_oli(data, size);
1078
+
1079
+ if (!beg)
1080
+ return 0;
1081
+
1077
1082
  /* skipping to the beginning of the following line */
1078
1083
  end = beg;
1079
- while (end < size && data[end - 1] != '\n') end += 1;
1084
+ while (end < size && data[end - 1] != '\n')
1085
+ end++;
1080
1086
 
1081
1087
  /* getting working buffers */
1082
1088
  if (rndr->work.size < rndr->work.asize) {
1083
1089
  work = rndr->work.item[rndr->work.size ++];
1084
- work->size = 0; }
1085
- else {
1090
+ work->size = 0;
1091
+ } else {
1086
1092
  work = bufnew(WORK_UNIT);
1087
- parr_push(&rndr->work, work); }
1093
+ parr_push(&rndr->work, work);
1094
+ }
1095
+
1088
1096
  if (rndr->work.size < rndr->work.asize) {
1089
1097
  inter = rndr->work.item[rndr->work.size ++];
1090
- inter->size = 0; }
1091
- else {
1098
+ inter->size = 0;
1099
+ } else {
1092
1100
  inter = bufnew(WORK_UNIT);
1093
- parr_push(&rndr->work, inter); }
1101
+ parr_push(&rndr->work, inter);
1102
+ }
1094
1103
 
1095
1104
  /* putting the first line into the working buffer */
1096
1105
  bufput(work, data + beg, end - beg);
@@ -1098,45 +1107,55 @@ parse_listitem(struct buf *ob, struct render *rndr, char *data, size_t size, int
1098
1107
 
1099
1108
  /* process the following lines */
1100
1109
  while (beg < size) {
1101
- end += 1;
1102
- while (end < size && data[end - 1] != '\n') end += 1;
1110
+ end++;
1111
+
1112
+ while (end < size && data[end - 1] != '\n')
1113
+ end++;
1103
1114
 
1104
1115
  /* process an empty line */
1105
1116
  if (is_empty(data + beg, end - beg)) {
1106
1117
  in_empty = 1;
1107
1118
  beg = end;
1108
- continue; }
1119
+ continue;
1120
+ }
1109
1121
 
1110
1122
  /* calculating the indentation */
1111
1123
  i = 0;
1112
- if (end - beg > 1 && data[beg] == ' ') { i = 1;
1113
- if (end - beg > 2 && data[beg + 1] == ' ') { i = 2;
1114
- if (end - beg > 3 && data[beg + 2] == ' ') { i = 3;
1115
- if (end - beg > 3 && data[beg + 3] == ' ') { i = 4; } } } }
1124
+ while (i < 4 && beg + i < end && data[beg + i] == ' ')
1125
+ i++;
1126
+
1116
1127
  pre = i;
1117
1128
  if (data[beg] == '\t') { i = 1; pre = 8; }
1118
1129
 
1119
1130
  /* checking for a new item */
1120
- if ((prefix_uli(data + beg + i, end - beg - i)
1121
- && !is_hrule(data + beg + i, end - beg - i))
1122
- || prefix_oli(data + beg + i, end - beg - i)) {
1123
- if (in_empty) has_inside_empty = 1;
1131
+ if ((prefix_uli(data + beg + i, end - beg - i) &&
1132
+ !is_hrule(data + beg + i, end - beg - i)) ||
1133
+ prefix_oli(data + beg + i, end - beg - i)) {
1134
+ if (in_empty)
1135
+ has_inside_empty = 1;
1136
+
1124
1137
  if (pre == orgpre) /* the following item must have */
1125
1138
  break; /* the same indentation */
1126
- if (!sublist) sublist = work->size; }
1127
1139
 
1140
+ if (!sublist)
1141
+ sublist = work->size;
1142
+ }
1128
1143
  /* joining only indented stuff after empty lines */
1129
1144
  else if (in_empty && i < 4 && data[beg] != '\t') {
1130
1145
  *flags |= MKD_LI_END;
1131
- break; }
1146
+ break;
1147
+ }
1132
1148
  else if (in_empty) {
1133
1149
  bufputc(work, '\n');
1134
- has_inside_empty = 1; }
1150
+ has_inside_empty = 1;
1151
+ }
1152
+
1135
1153
  in_empty = 0;
1136
1154
 
1137
1155
  /* adding the line without prefix into the working buffer */
1138
1156
  bufput(work, data + beg + i, end - beg - i);
1139
- beg = end; }
1157
+ beg = end;
1158
+ }
1140
1159
 
1141
1160
  /* render of li contents */
1142
1161
  if (has_inside_empty) *flags |= MKD_LI_BLOCK;
@@ -1161,6 +1180,7 @@ parse_listitem(struct buf *ob, struct render *rndr, char *data, size_t size, int
1161
1180
  /* render of li itself */
1162
1181
  if (rndr->make.listitem)
1163
1182
  rndr->make.listitem(ob, inter, *flags, &rndr->make.render_options);
1183
+
1164
1184
  rndr->work.size -= 2;
1165
1185
  return beg;
1166
1186
  }
@@ -1527,11 +1547,9 @@ static void expand_tabs(struct buf *ob, const char *line, size_t size)
1527
1547
  if (i >= size)
1528
1548
  break;
1529
1549
 
1530
- bufputc(ob, ' '); tab++;
1531
-
1532
- while ((tab % 4) != 0) {
1550
+ do {
1533
1551
  bufputc(ob, ' '); tab++;
1534
- }
1552
+ } while (tab % 4);
1535
1553
 
1536
1554
  i++;
1537
1555
  }
@@ -1550,17 +1568,25 @@ markdown(struct buf *ob, struct buf *ib, const struct mkd_renderer *rndrer) {
1550
1568
  rndr.make = *rndrer;
1551
1569
  arr_init(&rndr.refs, sizeof (struct link_ref));
1552
1570
  parr_init(&rndr.work);
1553
- for (i = 0; i < 256; i += 1) rndr.active_char[i] = 0;
1554
- if ((rndr.make.emphasis || rndr.make.double_emphasis
1555
- || rndr.make.triple_emphasis)
1556
- && rndr.make.emph_chars)
1571
+
1572
+ for (i = 0; i < 256; i += 1)
1573
+ rndr.active_char[i] = 0;
1574
+
1575
+ if ((rndr.make.emphasis || rndr.make.double_emphasis || rndr.make.triple_emphasis) &&
1576
+ rndr.make.emph_chars) {
1557
1577
  for (i = 0; rndr.make.emph_chars[i]; i += 1)
1558
- rndr.active_char[(unsigned char)rndr.make.emph_chars[i]]
1559
- = char_emphasis;
1560
- if (rndr.make.codespan) rndr.active_char['`'] = char_codespan;
1561
- if (rndr.make.linebreak) rndr.active_char['\n'] = char_linebreak;
1578
+ rndr.active_char[(unsigned char)rndr.make.emph_chars[i]] = char_emphasis;
1579
+ }
1580
+
1581
+ if (rndr.make.codespan)
1582
+ rndr.active_char['`'] = char_codespan;
1583
+
1584
+ if (rndr.make.linebreak)
1585
+ rndr.active_char['\n'] = char_linebreak;
1586
+
1562
1587
  if (rndr.make.image || rndr.make.link)
1563
1588
  rndr.active_char['['] = char_link;
1589
+
1564
1590
  rndr.active_char['<'] = char_langle_tag;
1565
1591
  rndr.active_char['\\'] = char_escape;
1566
1592
  rndr.active_char['&'] = char_entity;
@@ -1609,11 +1635,20 @@ markdown(struct buf *ob, struct buf *ib, const struct mkd_renderer *rndrer) {
1609
1635
  for (i = 0; i < (size_t)rndr.refs.size; i += 1) {
1610
1636
  bufrelease(lr[i].id);
1611
1637
  bufrelease(lr[i].link);
1612
- bufrelease(lr[i].title); }
1638
+ bufrelease(lr[i].title);
1639
+ }
1640
+
1613
1641
  arr_free(&rndr.refs);
1614
- assert(rndr.work.size == 0);
1642
+
1643
+ /* Do not assert this; a malformed Markdown
1644
+ * file will result in parts of the work queue not being
1645
+ * printed. We cannot crash the library in that case. Duh. */
1646
+ //assert(rndr.work.size == 0);
1647
+
1615
1648
  for (i = 0; i < (size_t)rndr.work.asize; i += 1)
1616
1649
  bufrelease(rndr.work.item[i]);
1617
- parr_free(&rndr.work); }
1650
+
1651
+ parr_free(&rndr.work);
1652
+ }
1618
1653
 
1619
1654
  /* vim: set filetype=c: */
data/ext/render.c CHANGED
@@ -433,7 +433,7 @@ rndr_normal_text(struct buf *ob, struct buf *text, struct mkd_renderopt *options
433
433
  /* Autolinking is not standarized in the Markdown spec.
434
434
  * We only check for links after special characters, i.e.
435
435
  * immediately after a space or a parenthesis */
436
- if (i == 0 || (isspace(text->data[i - 1]) || text->data[i - 1] == '(') &&
436
+ if ((i == 0 || isspace(text->data[i - 1]) || text->data[i - 1] == '(') &&
437
437
  is_safe_link(text->data + i, text->size - i)) {
438
438
  size_t j = i + i;
439
439
 
data/lib/redcarpet.rb CHANGED
@@ -26,7 +26,7 @@
26
26
  # end
27
27
  #
28
28
  class Redcarpet
29
- VERSION = '1.0.1'
29
+ VERSION = '1.1.1'
30
30
 
31
31
  # Original Markdown formatted text.
32
32
  attr_reader :text
data/redcarpet.gemspec CHANGED
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'redcarpet'
3
- s.version = '1.1.0'
3
+ s.version = '1.1.1'
4
4
  s.summary = "Ruby bindings for libupskirt"
5
- s.date = '2011-03-29'
5
+ s.date = '2011-04-02'
6
6
  s.email = 'vicent@github.com'
7
7
  s.homepage = 'http://github.com/tanoku/redcarpet'
8
8
  s.has_rdoc = true
@@ -103,4 +103,10 @@ class RedcarpetTest < Test::Unit::TestCase
103
103
  Redcarpet.new(" [^a]: #{ "A" * 10000 }\n#{ "[^a][]" * 1000000 }\n").to_html.size
104
104
  end
105
105
 
106
+ def test_link_syntax_is_not_processed_within_code_blocks
107
+ markdown = Markdown.new(" This is a code block\n This is a link [[1]] inside\n")
108
+
109
+ assert_equal "<pre><code>This is a code block\nThis is a link [[1]] inside\n</code></pre>\n",
110
+ markdown.to_html
111
+ end
106
112
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redcarpet
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease:
4
+ hash: 17
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 0
10
- version: 1.1.0
9
+ - 1
10
+ version: 1.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Natacha Port\xC3\xA9"
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-03-29 00:00:00 +03:00
19
+ date: 2011-04-02 00:00:00 +03:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  requirements: []
80
80
 
81
81
  rubyforge_project:
82
- rubygems_version: 1.6.2
82
+ rubygems_version: 1.3.7
83
83
  signing_key:
84
84
  specification_version: 3
85
85
  summary: Ruby bindings for libupskirt