Skip to content

Commit b3f339d

Browse files
committed
[yaml] make yaml functions run on older matlab
1 parent 9f547ff commit b3f339d

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

saveyaml.m

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
for i = 1:numel(obj)
9494
yamldocs{i} = obj2yaml('', obj{i}, rootlevel, opt);
9595
end
96-
yaml = ['---' sprintf('\n') strjoin(yamldocs, [sprintf('\n') '---' sprintf('\n')])];
96+
yaml = ['---' sprintf('\n') joinlines(yamldocs, [sprintf('\n') '---' sprintf('\n')])];
9797
else
9898
yaml = obj2yaml(rootname, obj, rootlevel, opt);
9999
end
@@ -171,7 +171,7 @@
171171
lines{i} = sprintf('%s- %s', repmat(' ', 1, (level + 1) * opt.indent), strtrim(lines{i}));
172172
end
173173
end
174-
txt = sprintf('%s\n%s', txt, strjoin(lines, sprintf('\n')));
174+
txt = sprintf('%s\n%s', txt, joinlines(lines, sprintf('\n')));
175175
else
176176
lines = cell(1, len);
177177
for i = 1:len
@@ -180,7 +180,7 @@
180180
lines{i} = sprintf('%s- %s', repmat(' ', 1, level * opt.indent), strtrim(lines{i}));
181181
end
182182
end
183-
txt = strjoin(lines, sprintf('\n'));
183+
txt = joinlines(lines, sprintf('\n'));
184184
end
185185

186186
%% -------------------------------------------------------------------------
@@ -243,13 +243,13 @@
243243
for e = 1:length(names)
244244
lines{e} = obj2yaml(names{e}, item.(names{e}), level + 1, varargin{:});
245245
end
246-
txt = sprintf('%s\n%s', txt, strjoin(lines, sprintf('\n')));
246+
txt = sprintf('%s\n%s', txt, joinlines(lines, sprintf('\n')));
247247
else
248248
lines = cell(1, length(names));
249249
for e = 1:length(names)
250250
lines{e} = obj2yaml(names{e}, item.(names{e}), level, varargin{:});
251251
end
252-
txt = strjoin(lines, sprintf('\n'));
252+
txt = joinlines(lines, sprintf('\n'));
253253
end
254254
end
255255

@@ -295,7 +295,7 @@
295295
lines{i} = obj2yaml(num2str(names{i}), val{i}, level + 1, varargin{:});
296296
end
297297
end
298-
txt = sprintf('%s\n%s', txt, strjoin(lines, sprintf('\n')));
298+
txt = sprintf('%s\n%s', txt, joinlines(lines, sprintf('\n')));
299299
else
300300
lines = cell(1, length(names));
301301
for i = 1:length(names)
@@ -305,7 +305,7 @@
305305
lines{i} = obj2yaml(num2str(names{i}), val{i}, level, varargin{:});
306306
end
307307
end
308-
txt = strjoin(lines, sprintf('\n'));
308+
txt = joinlines(lines, sprintf('\n'));
309309
end
310310

311311
%% -------------------------------------------------------------------------
@@ -561,3 +561,9 @@
561561
else
562562
valstr = 'null';
563563
end
564+
565+
%% -------------------------------------------------------------------------
566+
567+
function str = joinlines(lines, sep)
568+
569+
str = [sprintf(['%s' sep], lines{1:end - 1}) lines{end}];

yaml2json.m

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
function jsonstr = yaml2json(yamlstr)
22
% Convert YAML to JSON
33

4-
lines = strsplit(yamlstr, {'\n', '\r\n'}, 'CollapseDelimiters', false);
4+
lines = regexp(yamlstr, '\s*\r*\n', 'split');
55

66
% Find document separators
77
docstarts = [];
@@ -20,7 +20,7 @@
2020
doclines = lines(docstarts(i) + 1:docstarts(i + 1) - 1);
2121
documents{end + 1} = convertLines(doclines);
2222
end
23-
jsonstr = strjoin(documents, newline);
23+
jsonstr = sprintf('%s\n', documents{:});
2424
end
2525

2626
%% -------------------------------------------------------------------------
@@ -115,7 +115,7 @@
115115
break
116116
end
117117
end
118-
parts{end + 1} = ['{' strjoin(objparts, ',') '}'];
118+
parts{end + 1} = ['{' sprintf('%s,', objparts{1:end - 1}) objparts{end} '}'];
119119
idx = childidx;
120120
else
121121
% Single key-value in object
@@ -134,8 +134,7 @@
134134
break
135135
end
136136
end
137-
138-
jsonstr = ['[' strjoin(parts, ',') ']'];
137+
jsonstr = ['[' sprintf('%s,', parts{1:end - 1}) parts{end} ']'];
139138
nextidx = idx;
140139
else
141140
% Build object
@@ -163,8 +162,7 @@
163162
break
164163
end
165164
end
166-
167-
jsonstr = ['{' strjoin(parts, ',') '}'];
165+
jsonstr = ['{' sprintf('%s,', parts{1:end - 1}) parts{end} '}'];
168166
nextidx = idx;
169167
end
170168

@@ -185,12 +183,12 @@
185183
elseif str(1) == '['
186184
% Inline YAML array - need to parse and quote items
187185
content = str(2:end - 1); % Remove [ ]
188-
items = strsplit(content, ',');
186+
items = regexp(content, '\s*,\s*', 'split');
189187
formatted = {};
190188
for i = 1:length(items)
191189
formatted{i} = formatVal(strtrim(items{i}));
192190
end
193-
val = ['[' strjoin(formatted, ',') ']'];
191+
val = ['[', sprintf('%s,', formatted{1:end - 1}), formatted{end}, ']'];
194192
elseif str(1) == '{'
195193
% Inline YAML object - pass through for now
196194
val = str;

0 commit comments

Comments
 (0)