rmultimarkdown 4.7.1.1 → 6.2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +2 -2
  3. data/README.md +7 -9
  4. data/Rakefile +33 -18
  5. data/ext/Makefile +261 -0
  6. data/ext/extconf.rb +23 -3
  7. data/ext/mmd/aho-corasick.c +596 -0
  8. data/ext/mmd/aho-corasick.h +120 -0
  9. data/ext/mmd/beamer.c +344 -0
  10. data/ext/mmd/beamer.h +72 -0
  11. data/ext/mmd/char.c +156 -0
  12. data/ext/mmd/char.h +111 -0
  13. data/ext/mmd/char_lookup.c +212 -0
  14. data/ext/mmd/critic_markup.c +330 -0
  15. data/ext/mmd/critic_markup.h +94 -0
  16. data/ext/mmd/d_string.c +402 -0
  17. data/ext/mmd/epub.c +563 -0
  18. data/ext/mmd/epub.h +69 -0
  19. data/ext/mmd/fodt.c +2288 -0
  20. data/ext/mmd/fodt.h +81 -0
  21. data/ext/mmd/html.c +2460 -0
  22. data/ext/mmd/html.h +81 -0
  23. data/ext/mmd/i18n.h +170 -0
  24. data/ext/mmd/include/d_string.h +182 -0
  25. data/ext/mmd/include/libMultiMarkdown.h +548 -0
  26. data/ext/mmd/include/token.h +233 -0
  27. data/ext/mmd/latex.c +2435 -0
  28. data/ext/mmd/latex.h +83 -0
  29. data/ext/mmd/lexer.c +3001 -0
  30. data/ext/mmd/lexer.h +75 -0
  31. data/ext/mmd/memoir.c +138 -0
  32. data/ext/mmd/memoir.h +67 -0
  33. data/ext/mmd/miniz.c +7557 -0
  34. data/ext/mmd/miniz.h +1328 -0
  35. data/ext/mmd/mmd.c +2798 -0
  36. data/ext/mmd/mmd.h +120 -0
  37. data/ext/mmd/object_pool.c +141 -0
  38. data/ext/mmd/object_pool.h +101 -0
  39. data/ext/mmd/opendocument-content.c +2071 -0
  40. data/ext/mmd/opendocument-content.h +135 -0
  41. data/ext/mmd/opendocument.c +981 -0
  42. data/ext/mmd/opendocument.h +118 -0
  43. data/ext/mmd/parser.c +1760 -0
  44. data/ext/mmd/parser.h +39 -0
  45. data/{MultiMarkdown-4 → ext/mmd}/rng.c +90 -49
  46. data/ext/mmd/scanners.c +77512 -0
  47. data/ext/mmd/scanners.h +101 -0
  48. data/ext/mmd/stack.c +142 -0
  49. data/ext/mmd/stack.h +113 -0
  50. data/ext/mmd/textbundle.c +455 -0
  51. data/ext/mmd/textbundle.h +115 -0
  52. data/ext/mmd/token.c +773 -0
  53. data/ext/mmd/token_pairs.c +263 -0
  54. data/ext/mmd/token_pairs.h +123 -0
  55. data/ext/mmd/transclude.c +549 -0
  56. data/ext/mmd/transclude.h +87 -0
  57. data/ext/mmd/uthash.h +1074 -0
  58. data/ext/mmd/uuid.c +154 -0
  59. data/ext/mmd/uuid.h +77 -0
  60. data/ext/mmd/version.h +111 -0
  61. data/ext/mmd/writer.c +2652 -0
  62. data/ext/mmd/writer.h +260 -0
  63. data/ext/mmd/zip.c +210 -0
  64. data/ext/mmd/zip.h +120 -0
  65. data/ext/{multi_markdown.c → ruby_multi_markdown.c} +87 -18
  66. data/lib/multi_markdown.bundle +0 -0
  67. data/lib/multi_markdown.rb +5 -8
  68. data/lib/multi_markdown/version.rb +1 -1
  69. data/rmultimarkdown.gemspec +2 -2
  70. data/test/{extensions_test.rb.rb → extensions_test.rb} +10 -54
  71. data/test/multi_markdown_test.rb +13 -0
  72. metadata +67 -47
  73. data/MultiMarkdown-4/GLibFacade.c +0 -310
  74. data/MultiMarkdown-4/GLibFacade.h +0 -100
  75. data/MultiMarkdown-4/beamer.c +0 -182
  76. data/MultiMarkdown-4/beamer.h +0 -11
  77. data/MultiMarkdown-4/critic.c +0 -111
  78. data/MultiMarkdown-4/critic.h +0 -15
  79. data/MultiMarkdown-4/glib.h +0 -11
  80. data/MultiMarkdown-4/html.c +0 -1117
  81. data/MultiMarkdown-4/html.h +0 -14
  82. data/MultiMarkdown-4/latex.c +0 -1217
  83. data/MultiMarkdown-4/latex.h +0 -16
  84. data/MultiMarkdown-4/libMultiMarkdown.h +0 -177
  85. data/MultiMarkdown-4/lyx.c +0 -2265
  86. data/MultiMarkdown-4/lyx.h +0 -37
  87. data/MultiMarkdown-4/lyxbeamer.c +0 -265
  88. data/MultiMarkdown-4/lyxbeamer.h +0 -11
  89. data/MultiMarkdown-4/memoir.c +0 -80
  90. data/MultiMarkdown-4/memoir.h +0 -10
  91. data/MultiMarkdown-4/multimarkdown.c +0 -518
  92. data/MultiMarkdown-4/odf.c +0 -1222
  93. data/MultiMarkdown-4/odf.h +0 -18
  94. data/MultiMarkdown-4/opml.c +0 -189
  95. data/MultiMarkdown-4/opml.h +0 -15
  96. data/MultiMarkdown-4/parse_utilities.c +0 -884
  97. data/MultiMarkdown-4/parser.c +0 -16656
  98. data/MultiMarkdown-4/parser.h +0 -188
  99. data/MultiMarkdown-4/rtf.c +0 -665
  100. data/MultiMarkdown-4/rtf.h +0 -17
  101. data/MultiMarkdown-4/strtok.c +0 -56
  102. data/MultiMarkdown-4/strtok.h +0 -9
  103. data/MultiMarkdown-4/text.c +0 -53
  104. data/MultiMarkdown-4/text.h +0 -11
  105. data/MultiMarkdown-4/toc.c +0 -142
  106. data/MultiMarkdown-4/toc.h +0 -15
  107. data/MultiMarkdown-4/transclude.c +0 -307
  108. data/MultiMarkdown-4/transclude.h +0 -28
  109. data/MultiMarkdown-4/writer.c +0 -731
  110. data/MultiMarkdown-4/writer.h +0 -38
@@ -30,6 +30,19 @@ class MultiMarkdownTest < Test::Unit::TestCase
30
30
  assert_equal "<p>Hello <span><em>World</em></span>!</p>", multimarkdown.to_html.strip
31
31
  end
32
32
 
33
+ def test_multimarkdown_smart_quote_languages
34
+ multimarkdown = MultiMarkdown.new('Hello "world"')
35
+ assert_respond_to multimarkdown, :to_html
36
+ assert_equal '<p>Hello &#8220;world&#8221;</p>', multimarkdown.to_html.strip
37
+
38
+ multimarkdown.language = :de
39
+ assert_equal '<p>Hello &#8222;world&#8221;</p>', multimarkdown.to_html.strip
40
+
41
+ multimarkdown.language = :ch
42
+ assert_equal '<p>Hello &#171;world&#187;</p>', multimarkdown.to_html.strip
43
+ end
44
+
45
+
33
46
  def test_version_fits
34
47
  assert MultiMarkdown::VERSION =~ /^#{MultiMarkdown::MMD_VERSION}/,
35
48
  "Expected MultiMarkdown's version (#{MultiMarkdown::VERSION}) to start with the C library's version (#{MultiMarkdown::MMD_VERSION})"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmultimarkdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.1.1
4
+ version: 6.2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Till Schulte-Coerne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-13 00:00:00.000000000 Z
11
+ date: 2017-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- description: A MultiMarkdown 4 binding for Ruby
27
+ description: A MultiMarkdown 6 binding for Ruby
28
28
  email:
29
29
  - till.schulte-coerne@innoq.com
30
30
  executables:
@@ -36,57 +36,77 @@ extra_rdoc_files:
36
36
  - LICENSE
37
37
  files:
38
38
  - LICENSE
39
- - MultiMarkdown-4/GLibFacade.c
40
- - MultiMarkdown-4/GLibFacade.h
41
- - MultiMarkdown-4/beamer.c
42
- - MultiMarkdown-4/beamer.h
43
- - MultiMarkdown-4/critic.c
44
- - MultiMarkdown-4/critic.h
45
- - MultiMarkdown-4/glib.h
46
- - MultiMarkdown-4/html.c
47
- - MultiMarkdown-4/html.h
48
- - MultiMarkdown-4/latex.c
49
- - MultiMarkdown-4/latex.h
50
- - MultiMarkdown-4/libMultiMarkdown.h
51
- - MultiMarkdown-4/lyx.c
52
- - MultiMarkdown-4/lyx.h
53
- - MultiMarkdown-4/lyxbeamer.c
54
- - MultiMarkdown-4/lyxbeamer.h
55
- - MultiMarkdown-4/memoir.c
56
- - MultiMarkdown-4/memoir.h
57
- - MultiMarkdown-4/multimarkdown.c
58
- - MultiMarkdown-4/odf.c
59
- - MultiMarkdown-4/odf.h
60
- - MultiMarkdown-4/opml.c
61
- - MultiMarkdown-4/opml.h
62
- - MultiMarkdown-4/parse_utilities.c
63
- - MultiMarkdown-4/parser.c
64
- - MultiMarkdown-4/parser.h
65
- - MultiMarkdown-4/rng.c
66
- - MultiMarkdown-4/rtf.c
67
- - MultiMarkdown-4/rtf.h
68
- - MultiMarkdown-4/strtok.c
69
- - MultiMarkdown-4/strtok.h
70
- - MultiMarkdown-4/text.c
71
- - MultiMarkdown-4/text.h
72
- - MultiMarkdown-4/toc.c
73
- - MultiMarkdown-4/toc.h
74
- - MultiMarkdown-4/transclude.c
75
- - MultiMarkdown-4/transclude.h
76
- - MultiMarkdown-4/writer.c
77
- - MultiMarkdown-4/writer.h
78
39
  - README.md
79
40
  - Rakefile
80
41
  - bin/rmultimarkdown
42
+ - ext/Makefile
81
43
  - ext/extconf.h
82
44
  - ext/extconf.rb
83
- - ext/multi_markdown.c
45
+ - ext/mmd/aho-corasick.c
46
+ - ext/mmd/aho-corasick.h
47
+ - ext/mmd/beamer.c
48
+ - ext/mmd/beamer.h
49
+ - ext/mmd/char.c
50
+ - ext/mmd/char.h
51
+ - ext/mmd/char_lookup.c
52
+ - ext/mmd/critic_markup.c
53
+ - ext/mmd/critic_markup.h
54
+ - ext/mmd/d_string.c
55
+ - ext/mmd/epub.c
56
+ - ext/mmd/epub.h
57
+ - ext/mmd/fodt.c
58
+ - ext/mmd/fodt.h
59
+ - ext/mmd/html.c
60
+ - ext/mmd/html.h
61
+ - ext/mmd/i18n.h
62
+ - ext/mmd/include/d_string.h
63
+ - ext/mmd/include/libMultiMarkdown.h
64
+ - ext/mmd/include/token.h
65
+ - ext/mmd/latex.c
66
+ - ext/mmd/latex.h
67
+ - ext/mmd/lexer.c
68
+ - ext/mmd/lexer.h
69
+ - ext/mmd/memoir.c
70
+ - ext/mmd/memoir.h
71
+ - ext/mmd/miniz.c
72
+ - ext/mmd/miniz.h
73
+ - ext/mmd/mmd.c
74
+ - ext/mmd/mmd.h
75
+ - ext/mmd/object_pool.c
76
+ - ext/mmd/object_pool.h
77
+ - ext/mmd/opendocument-content.c
78
+ - ext/mmd/opendocument-content.h
79
+ - ext/mmd/opendocument.c
80
+ - ext/mmd/opendocument.h
81
+ - ext/mmd/parser.c
82
+ - ext/mmd/parser.h
83
+ - ext/mmd/rng.c
84
+ - ext/mmd/scanners.c
85
+ - ext/mmd/scanners.h
86
+ - ext/mmd/stack.c
87
+ - ext/mmd/stack.h
88
+ - ext/mmd/textbundle.c
89
+ - ext/mmd/textbundle.h
90
+ - ext/mmd/token.c
91
+ - ext/mmd/token_pairs.c
92
+ - ext/mmd/token_pairs.h
93
+ - ext/mmd/transclude.c
94
+ - ext/mmd/transclude.h
95
+ - ext/mmd/uthash.h
96
+ - ext/mmd/uuid.c
97
+ - ext/mmd/uuid.h
98
+ - ext/mmd/version.h
99
+ - ext/mmd/writer.c
100
+ - ext/mmd/writer.h
101
+ - ext/mmd/zip.c
102
+ - ext/mmd/zip.h
103
+ - ext/ruby_multi_markdown.c
84
104
  - lib/multi_markdown.bundle
85
105
  - lib/multi_markdown.rb
86
106
  - lib/multi_markdown/version.rb
87
107
  - lib/rmultimarkdown.rb
88
108
  - rmultimarkdown.gemspec
89
- - test/extensions_test.rb.rb
109
+ - test/extensions_test.rb
90
110
  - test/multi_markdown_test.rb
91
111
  homepage: http://github.com/tillsc/multi_markdown
92
112
  licenses: []
@@ -107,10 +127,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
127
  version: '0'
108
128
  requirements: []
109
129
  rubyforge_project:
110
- rubygems_version: 2.4.5
130
+ rubygems_version: 2.5.1
111
131
  signing_key:
112
132
  specification_version: 4
113
- summary: A MultiMarkdown 4 binding for Ruby
133
+ summary: A MultiMarkdown 6 binding for Ruby
114
134
  test_files:
115
- - test/extensions_test.rb.rb
135
+ - test/extensions_test.rb
116
136
  - test/multi_markdown_test.rb
@@ -1,310 +0,0 @@
1
- /*
2
- * GLibFacade.c
3
- * MultiMarkdown
4
- *
5
- * Created by Daniel Jalkut on 7/26/11.
6
- * Modified by Fletcher T. Penney on 9/15/11 and 12/3/13.
7
- * Modified by Dan Lowe on 1/3/12.
8
- *
9
- * License for original code by Daniel Jalkut:
10
- *
11
- * Copyright 2011 Daniel Jalkut. All rights reserved.
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
14
- * this software and associated documentation files (the “Software”), to deal in
15
- * the Software without restriction, including without limitation the rights to
16
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do
18
- * so, subject to the following conditions:
19
- *
20
- * The above copyright notice and this permission notice shall be included in all
21
- * copies or substantial portions of the Software.
22
- *
23
- * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
- * SOFTWARE.
30
- */
31
-
32
- #include "GLibFacade.h"
33
-
34
- #include <stdio.h>
35
- #include <stdlib.h>
36
- #include <string.h>
37
- #include <stdarg.h>
38
-
39
- /*
40
- * The following section came from:
41
- *
42
- * http://lists-archives.org/mingw-users/12649-asprintf-missing-vsnprintf-
43
- * behaving-differently-and-_vsncprintf-undefined.html
44
- *
45
- * and
46
- *
47
- * http://groups.google.com/group/jansson-users/browse_thread/thread/
48
- * 76a88d63d9519978/041a7d0570de2d48?lnk=raot
49
- */
50
-
51
- /* Solaris and Windows do not provide vasprintf() or asprintf(). */
52
- #if defined(__WIN32) || (defined(__SVR4) && defined(__sun))
53
- int vasprintf( char **sptr, char *fmt, va_list argv )
54
- {
55
- int wanted = vsnprintf( *sptr = NULL, 0, fmt, argv );
56
- if( (wanted > 0) && ((*sptr = malloc( 1 + wanted )) != NULL) )
57
- return vsprintf( *sptr, fmt, argv );
58
-
59
- return wanted;
60
- }
61
-
62
- int asprintf( char **sptr, char *fmt, ... )
63
- {
64
- int retval;
65
- va_list argv;
66
- va_start( argv, fmt );
67
- retval = vasprintf( sptr, fmt, argv );
68
- va_end( argv );
69
- return retval;
70
- }
71
- #endif
72
-
73
-
74
- /* GString */
75
-
76
- #define kStringBufferStartingSize 1024
77
- #define kStringBufferGrowthMultiplier 2
78
-
79
- GString* g_string_new(char *startingString)
80
- {
81
- GString* newString = malloc(sizeof(GString));
82
-
83
- if (startingString == NULL) startingString = "";
84
-
85
- size_t startingBufferSize = kStringBufferStartingSize;
86
- size_t startingStringSize = strlen(startingString);
87
- while (startingBufferSize < (startingStringSize + 1))
88
- {
89
- startingBufferSize *= kStringBufferGrowthMultiplier;
90
- }
91
-
92
- newString->str = malloc(startingBufferSize);
93
- newString->currentStringBufferSize = startingBufferSize;
94
- strncpy(newString->str, startingString, startingStringSize);
95
- newString->str[startingStringSize] = '\0';
96
- newString->currentStringLength = startingStringSize;
97
-
98
- return newString;
99
- }
100
-
101
- char* g_string_free(GString* ripString, bool freeCharacterData)
102
- {
103
- if (ripString == NULL)
104
- return NULL;
105
-
106
- char* returnedString = ripString->str;
107
- if (freeCharacterData)
108
- {
109
- if (ripString->str != NULL)
110
- {
111
- free(ripString->str);
112
- }
113
- returnedString = NULL;
114
- }
115
-
116
- free(ripString);
117
-
118
- return returnedString;
119
- }
120
-
121
- static void ensureStringBufferCanHold(GString* baseString, size_t newStringSize)
122
- {
123
- size_t newBufferSizeNeeded = newStringSize + 1;
124
- if (newBufferSizeNeeded > baseString->currentStringBufferSize)
125
- {
126
- size_t newBufferSize = baseString->currentStringBufferSize;
127
-
128
- while (newBufferSizeNeeded > newBufferSize)
129
- {
130
- newBufferSize *= kStringBufferGrowthMultiplier;
131
- }
132
-
133
- char *temp;
134
- temp = realloc(baseString->str, newBufferSize);
135
-
136
- if (temp == NULL) {
137
- /* realloc failed */
138
- fprintf(stderr, "error reallocating memory\n");
139
-
140
- exit(1);
141
- }
142
- baseString->str = temp;
143
- baseString->currentStringBufferSize = newBufferSize;
144
- }
145
- }
146
-
147
- void g_string_append(GString* baseString, char* appendedString)
148
- {
149
- if ((appendedString != NULL) && (strlen(appendedString) > 0))
150
- {
151
- size_t appendedStringLength = strlen(appendedString);
152
- size_t newStringLength = baseString->currentStringLength + appendedStringLength;
153
- ensureStringBufferCanHold(baseString, newStringLength);
154
-
155
- /* We already know where the current string ends, so pass that as the starting address for strncat */
156
- strncat(baseString->str + baseString->currentStringLength, appendedString, appendedStringLength);
157
- baseString->currentStringLength = newStringLength;
158
- }
159
- }
160
-
161
- void g_string_append_c(GString* baseString, char appendedCharacter)
162
- {
163
- size_t newSizeNeeded = baseString->currentStringLength + 1;
164
- ensureStringBufferCanHold(baseString, newSizeNeeded);
165
-
166
- baseString->str[baseString->currentStringLength] = appendedCharacter;
167
- baseString->currentStringLength++;
168
- baseString->str[baseString->currentStringLength] = '\0';
169
- }
170
-
171
- void g_string_append_printf(GString* baseString, char* format, ...)
172
- {
173
- va_list args;
174
- va_start(args, format);
175
-
176
- char* formattedString = NULL;
177
- vasprintf(&formattedString, format, args);
178
- if (formattedString != NULL)
179
- {
180
- g_string_append(baseString, formattedString);
181
- free(formattedString);
182
- }
183
- va_end(args);
184
- }
185
-
186
- void g_string_prepend(GString* baseString, char* prependedString)
187
- {
188
- if ((prependedString != NULL) && (strlen(prependedString) > 0))
189
- {
190
- size_t prependedStringLength = strlen(prependedString);
191
- size_t newStringLength = baseString->currentStringLength + prependedStringLength;
192
- ensureStringBufferCanHold(baseString, newStringLength);
193
-
194
- memmove(baseString->str + prependedStringLength, baseString->str, baseString->currentStringLength);
195
- strncpy(baseString->str, prependedString, prependedStringLength);
196
- baseString->currentStringLength = newStringLength;
197
- baseString->str[baseString->currentStringLength] = '\0';
198
- }
199
- }
200
-
201
- void g_string_insert(GString* baseString, size_t pos, char * insertedString)
202
- {
203
- if ((insertedString != NULL) && (strlen(insertedString) > 0))
204
- {
205
- if (pos > baseString->currentStringLength)
206
- pos = baseString->currentStringLength;
207
-
208
- size_t insertedStringLength = strlen(insertedString);
209
- size_t newStringLength = baseString->currentStringLength + insertedStringLength;
210
- ensureStringBufferCanHold(baseString, newStringLength);
211
-
212
- /* Shift following string to 'right' */
213
- memmove(baseString->str + pos + insertedStringLength, baseString->str + pos, baseString->currentStringLength - pos);
214
- strncpy(baseString->str + pos, insertedString, insertedStringLength);
215
- baseString->currentStringLength = newStringLength;
216
- baseString->str[baseString->currentStringLength] = '\0';
217
- }
218
- }
219
-
220
- void g_string_insert_c(GString* baseString, size_t pos, char insertedCharacter)
221
- {
222
- if (pos > baseString->currentStringLength)
223
- pos = baseString->currentStringLength;
224
-
225
- size_t newSizeNeeded = baseString->currentStringLength + 1;
226
- ensureStringBufferCanHold(baseString, newSizeNeeded);
227
-
228
- /* Shift following string to 'right' */
229
- memmove(baseString->str + pos + 1, baseString->str + pos, baseString->currentStringLength - pos);
230
-
231
- baseString->str[pos] = insertedCharacter;
232
- baseString->currentStringLength++;
233
- baseString->str[baseString->currentStringLength] = '\0';
234
- }
235
-
236
-
237
- void g_string_insert_printf(GString* baseString, size_t pos, char* format, ...)
238
- {
239
- va_list args;
240
- va_start(args, format);
241
-
242
- char* formattedString = NULL;
243
- vasprintf(&formattedString, format, args);
244
- if (formattedString != NULL)
245
- {
246
- g_string_insert(baseString, pos, formattedString);
247
- free(formattedString);
248
- }
249
- va_end(args);
250
- }
251
-
252
- void g_string_erase(GString* baseString, size_t pos, size_t len)
253
- {
254
- if ((pos > baseString->currentStringLength) || (len <= 0))
255
- return;
256
-
257
- if ((pos + len) >= baseString->currentStringLength)
258
- len = -1;
259
-
260
- if (len == -1) {
261
- baseString->currentStringLength = pos;
262
- } else {
263
- memmove(baseString->str + pos, baseString->str + pos + len, baseString->currentStringLength - pos - len);
264
- baseString->currentStringLength -= len;
265
- }
266
- baseString->str[baseString->currentStringLength] = '\0';
267
- }
268
-
269
- /* GSList */
270
-
271
- void g_slist_free(GSList* ripList)
272
- {
273
- GSList* thisListItem = ripList;
274
- while (thisListItem != NULL)
275
- {
276
- GSList* nextItem = thisListItem->next;
277
-
278
- /* I guess we don't release the data? Non-retained memory management is hard... let's figure it out later. */
279
- free(thisListItem);
280
-
281
- thisListItem = nextItem;
282
- }
283
- }
284
-
285
- /* Currently only used for markdown_output.c endnotes printing */
286
- GSList* g_slist_reverse(GSList* theList)
287
- {
288
- GSList* lastNodeSeen = NULL;
289
-
290
- /* Iterate the list items, tacking them on to our new reversed List as we find them */
291
- GSList* listWalker = theList;
292
- while (listWalker != NULL)
293
- {
294
- GSList* nextNode = listWalker->next;
295
- listWalker->next = lastNodeSeen;
296
- lastNodeSeen = listWalker;
297
- listWalker = nextNode;
298
- }
299
-
300
- return lastNodeSeen;
301
- }
302
-
303
- GSList* g_slist_prepend(GSList* targetElement, void* newElementData)
304
- {
305
- GSList* newElement = malloc(sizeof(GSList));
306
- newElement->data = newElementData;
307
- newElement->next = targetElement;
308
- return newElement;
309
- }
310
-