rmultimarkdown 6.7.0.1 → 6.7.0.2
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.
- checksums.yaml +4 -4
- data/ext/ruby_multi_markdown.c +61 -34
- data/lib/multi_markdown/version.rb +1 -1
- data/lib/multi_markdown.bundle +0 -0
- data/test/multi_markdown_test.rb +13 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f0716fc464af2d155a21038fa169fa91b3be0fd0e128fb70e191710f898e215
|
|
4
|
+
data.tar.gz: a9dc54567a87cf6b44123b5dc33e5a4ce4e2997a040d35ee9340b7a02868d5e5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a742b7c66fda2db7e4dfae8eb1b0b6cb1e716e84588a2268cd1ee584dd3455b68209c121de381827d1bf7ecb1c8cb9b03a3ac37ef0afb694247d63a1e676e33c
|
|
7
|
+
data.tar.gz: 6c11fa1de094e944daac1082867a5aa1f9fed39e410672b19e12fa92304b1178f14ed69fe71d66a206f1611cebf9ccfc13f43e652f16de6167dd6feaf4d66795
|
data/ext/ruby_multi_markdown.c
CHANGED
|
@@ -44,38 +44,54 @@ typedef struct engine_manager {
|
|
|
44
44
|
mmd_engine *mmd_engine;
|
|
45
45
|
} engine_manager;
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
engine_manager *manager;
|
|
49
|
-
Data_Get_Struct(self, engine_manager, manager);
|
|
50
|
-
|
|
51
|
-
return manager->mmd_engine;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
static void free_engine_manager(engine_manager* manager) {
|
|
47
|
+
static void engine_manager_free(void *ptr) {
|
|
48
|
+
engine_manager *manager = (engine_manager *)ptr;
|
|
55
49
|
if (manager->mmd_engine) {
|
|
56
50
|
mmd_engine_free(manager->mmd_engine, true);
|
|
51
|
+
manager->mmd_engine = NULL;
|
|
57
52
|
}
|
|
58
|
-
|
|
53
|
+
xfree(manager);
|
|
59
54
|
}
|
|
60
55
|
|
|
56
|
+
static size_t engine_manager_memsize(const void *ptr) {
|
|
57
|
+
return sizeof(engine_manager);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static const rb_data_type_t engine_manager_type = {
|
|
61
|
+
"MultiMarkdown/engine_manager",
|
|
62
|
+
{ 0, engine_manager_free, engine_manager_memsize, },
|
|
63
|
+
0, 0,
|
|
64
|
+
RUBY_TYPED_FREE_IMMEDIATELY
|
|
65
|
+
};
|
|
66
|
+
|
|
61
67
|
static VALUE rb_multimarkdown_allocate(VALUE klass) {
|
|
62
|
-
engine_manager *manager
|
|
68
|
+
engine_manager *manager;
|
|
69
|
+
VALUE obj = TypedData_Make_Struct(klass, engine_manager, &engine_manager_type, manager);
|
|
63
70
|
manager->mmd_engine = NULL;
|
|
71
|
+
return obj;
|
|
72
|
+
}
|
|
64
73
|
|
|
65
|
-
|
|
74
|
+
static engine_manager *get_manager(VALUE self) {
|
|
75
|
+
engine_manager *manager;
|
|
76
|
+
TypedData_Get_Struct(self, engine_manager, &engine_manager_type, manager);
|
|
77
|
+
return manager;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static mmd_engine *get_mmd_engine(VALUE self) {
|
|
81
|
+
return get_manager(self)->mmd_engine;
|
|
66
82
|
}
|
|
67
83
|
|
|
68
84
|
static VALUE rb_multimarkdown_start_engine(VALUE self, VALUE text) {
|
|
69
85
|
Check_Type(text, T_STRING);
|
|
70
86
|
|
|
71
|
-
engine_manager *manager;
|
|
72
|
-
Data_Get_Struct(self, engine_manager, manager);
|
|
87
|
+
engine_manager *manager = get_manager(self);
|
|
73
88
|
|
|
74
89
|
if (manager->mmd_engine) {
|
|
75
90
|
mmd_engine_free(manager->mmd_engine, true);
|
|
91
|
+
manager->mmd_engine = NULL;
|
|
76
92
|
}
|
|
77
93
|
|
|
78
|
-
manager->mmd_engine = mmd_engine_create_with_string(
|
|
94
|
+
manager->mmd_engine = mmd_engine_create_with_string(StringValueCStr(text), get_exts(self));
|
|
79
95
|
|
|
80
96
|
return self;
|
|
81
97
|
}
|
|
@@ -84,29 +100,25 @@ static VALUE rb_multimarkdown_start_engine(VALUE self, VALUE text) {
|
|
|
84
100
|
|
|
85
101
|
static VALUE rb_multimarkdown_set_language(VALUE self, VALUE language) {
|
|
86
102
|
short lang = ENGLISH;
|
|
87
|
-
VALUE language_s = rb_funcall(language, rb_intern("to_s"), 0);
|
|
88
103
|
|
|
89
|
-
|
|
104
|
+
VALUE language_s = rb_obj_as_string(language);
|
|
105
|
+
const char *s = StringValueCStr(language_s);
|
|
106
|
+
|
|
107
|
+
if (strcmp(s, "de") == 0 || strcmp(s, "german") == 0) {
|
|
90
108
|
lang = GERMANGUILL;
|
|
91
|
-
}
|
|
92
|
-
else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("ch")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("de-ch")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("swiss")) == Qtrue) {
|
|
109
|
+
} else if (strcmp(s, "ch") == 0 || strcmp(s, "de-ch") == 0 || strcmp(s, "swiss") == 0) {
|
|
93
110
|
lang = GERMAN;
|
|
94
|
-
}
|
|
95
|
-
else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("nl")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("dutch")) == Qtrue) {
|
|
111
|
+
} else if (strcmp(s, "nl") == 0 || strcmp(s, "dutch") == 0) {
|
|
96
112
|
lang = DUTCH;
|
|
97
|
-
}
|
|
98
|
-
else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("fr")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("french")) == Qtrue) {
|
|
113
|
+
} else if (strcmp(s, "fr") == 0 || strcmp(s, "french") == 0) {
|
|
99
114
|
lang = FRENCH;
|
|
100
|
-
}
|
|
101
|
-
else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("sp")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("spanish")) == Qtrue) {
|
|
115
|
+
} else if (strcmp(s, "sp") == 0 || strcmp(s, "spanish") == 0) {
|
|
102
116
|
lang = SPANISH;
|
|
103
|
-
}
|
|
104
|
-
else if (rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("sv")) == Qtrue || rb_funcall(language_s, rb_intern("=="), 1, rb_str_new2("swedish")) == Qtrue) {
|
|
117
|
+
} else if (strcmp(s, "sv") == 0 || strcmp(s, "swedish") == 0) {
|
|
105
118
|
lang = SWEDISH;
|
|
106
119
|
}
|
|
107
120
|
|
|
108
121
|
mmd_engine_set_language(get_mmd_engine(self), lang);
|
|
109
|
-
|
|
110
122
|
return language;
|
|
111
123
|
}
|
|
112
124
|
|
|
@@ -127,21 +139,36 @@ static VALUE rb_multimarkdown_to_latex(VALUE self) {
|
|
|
127
139
|
}
|
|
128
140
|
|
|
129
141
|
static VALUE rb_multimarkdown_extract_metadata_keys(VALUE self) {
|
|
130
|
-
|
|
142
|
+
mmd_engine *engine = get_mmd_engine(self);
|
|
143
|
+
size_t end = 0;
|
|
144
|
+
|
|
145
|
+
if (!mmd_engine_has_metadata(engine, &end)) {
|
|
146
|
+
return rb_ary_new();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
char *metadata_keys = mmd_engine_metadata_keys(engine);
|
|
131
150
|
VALUE str = rb_utf8_str_new_cstr(metadata_keys);
|
|
132
151
|
free(metadata_keys);
|
|
133
152
|
|
|
134
|
-
return rb_funcall(str, rb_intern("split"), 1,
|
|
153
|
+
return rb_funcall(str, rb_intern("split"), 1, rb_str_new_cstr("\n"));
|
|
135
154
|
}
|
|
136
155
|
|
|
137
156
|
static VALUE rb_multimarkdown_extract_metadata_value(VALUE self, VALUE key) {
|
|
138
157
|
Check_Type(key, T_STRING);
|
|
139
|
-
char *pkey = StringValuePtr(key);
|
|
140
158
|
|
|
141
|
-
|
|
142
|
-
|
|
159
|
+
mmd_engine *engine = get_mmd_engine(self);
|
|
160
|
+
size_t end = 0;
|
|
143
161
|
|
|
144
|
-
|
|
162
|
+
if (!mmd_engine_has_metadata(engine, &end)) {
|
|
163
|
+
return Qnil;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
char *metadata = mmd_engine_metavalue_for_key(engine, StringValueCStr(key));
|
|
167
|
+
if (metadata == NULL) {
|
|
168
|
+
return Qnil;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return rb_utf8_str_new_cstr(metadata);
|
|
145
172
|
}
|
|
146
173
|
|
|
147
174
|
//*** Define Class
|
|
@@ -187,7 +214,7 @@ void Init_multi_markdown() {
|
|
|
187
214
|
* The version of the MultiMarkdown-6 library
|
|
188
215
|
*/
|
|
189
216
|
char *version = mmd_version();
|
|
190
|
-
rb_define_const(rb_cMultiMarkdown, "MMD_VERSION",
|
|
217
|
+
rb_define_const(rb_cMultiMarkdown, "MMD_VERSION", rb_str_new_cstr(version));
|
|
191
218
|
free(version);
|
|
192
219
|
|
|
193
220
|
}
|
data/lib/multi_markdown.bundle
CHANGED
|
Binary file
|
data/test/multi_markdown_test.rb
CHANGED
|
@@ -87,4 +87,17 @@ eof
|
|
|
87
87
|
assert_equal("M€tädätä", multimarkdown.metadata('umlauts'))
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
+
def test_empty_metadata
|
|
91
|
+
m = MultiMarkdown.new "# Markdown without metadata"
|
|
92
|
+
assert_equal({}, m.metadata)
|
|
93
|
+
|
|
94
|
+
m2 = MultiMarkdown.new "foo: bar\n\n# Markdown with some metadata"
|
|
95
|
+
assert_equal("bar", m2.extract_metadata_value("foo"))
|
|
96
|
+
assert_equal(nil, m2.extract_metadata_value("doesnt_exist"))
|
|
97
|
+
|
|
98
|
+
m3 = MultiMarkdown.new "foo: bar\n\n# More Markdown", :no_metadata
|
|
99
|
+
assert_equal(nil, m3.extract_metadata_value("foo"))
|
|
100
|
+
assert_equal(nil, m3.extract_metadata_value("doesnt_exist"))
|
|
101
|
+
end
|
|
102
|
+
|
|
90
103
|
end
|