annotate TextTable.m @ 599:489bea7fc33f feature/grids

Add some functions to make symbolic life easier
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 26 Sep 2017 15:38:25 +0200
parents a5cebdaad10b
children 11a39b274260
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
1 classdef TextTable < handle
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
2 properties
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
3 data
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
4 fmtArray
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
5 vertDiv
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
6 horzDiv
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
8 nCols
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
9 nRows
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 end
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
12 methods
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
13 function obj = TextTable(data, vertDiv, horzDiv);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
14 default_arg('vertDiv', []);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
15 default_arg('horzDiv', []);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
16
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
17
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
18 obj.data = data;
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
19 obj.vertDiv = vertDiv;
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
20 obj.horzDiv = horzDiv;
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
21
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
22 [obj.nRows, obj.nCols] = size(data);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
23 obj.fmtArray = cell(size(data));
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
24 obj.formatAll('%s');
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
25
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
26 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
27
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
28 function formatAll(obj, fmt)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
29 obj.fmtArray(:,:) = {fmt};
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
30 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
31
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
32 function formatCell(obj, i, j, fmt)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
33 obj.fmtArray{i,j} = fmt;
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
34 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
35
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
36 function formatRow(obj, i, fmt)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
37 obj.fmtArray(i,:) = {fmt};
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
38 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
39
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
40 function formatColumn(obj, j, fmt)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
41 obj.fmtArray(:,j) = {fmt};
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
42 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
43
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
44 function widths = getWidths(obj)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
45 strArray = obj.getStringArray();
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
46
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
47 widths = zeros(1,obj.nCols);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
48 for j = 1:obj.nCols
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
49 for i = 1:obj.nRows
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
50 widths(j) = max(widths(j), length(strArray{i,j}));
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
51 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
52 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
53 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
54
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
55 function str = toString(obj)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
56 strArray = obj.getStringArray();
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
57 widths = obj.getWidths();
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
58
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
59 str = '';
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
60
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
61 % First horzDiv
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
62 if ismember(0, obj.horzDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
63 str = [str, obj.getHorzDiv(widths)];
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
64 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
65
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
66 for i = 1:obj.nRows
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
67 str = [str, TextTable.rowToString(strArray(i,:), widths, obj.vertDiv, obj.horzDiv)];
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
68
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
69 % Interior horzDiv
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
70 if ismember(i, obj.horzDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
71 str = [str, obj.getHorzDiv(widths)];
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
72 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
73 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
74 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
75
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
76 function str = getHorzDiv(obj, widths)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
77 str = TextTable.rowToString(cell(1,obj.nCols), widths, obj.vertDiv, obj.horzDiv);
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
78 str(find(' ' == str)) = '-';
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
79 str(find('|' == str)) = '+';
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
80 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
81
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
82 function strArray = getStringArray(obj)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
83 strArray = cell(size(obj.data));
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
84
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
85 for i = 1:obj.nRows
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
86 for j = 1:obj.nCols
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
87 strArray{i,j} = sprintf(obj.fmtArray{i,j}, obj.data{i,j});
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
88 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
89 end
286
fdee7f66a5e9 plainTextTable working.
Martin Almquist <martin.almquist@it.uu.se>
parents: 271
diff changeset
90 end
fdee7f66a5e9 plainTextTable working.
Martin Almquist <martin.almquist@it.uu.se>
parents: 271
diff changeset
91 end
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
93 methods (Static)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
94 function str = rowToString(strs, widths, vertDiv, horzDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
95 % First vertDiv
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
96 if ismember(0, vertDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
97 str = '| ';
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
98 else
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
99 str = ' ';
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
100 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
101
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
102 % Interior cols
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
103 for j = 1:length(strs) - 1
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
104 str = [str, sprintf('%*s ', widths(j), strs{j})];
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
106 % Interior vertDiv
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
107 if ismember(j, vertDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
108 str = [str, '| '];
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
109 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
110 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
111
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
112 % Last col
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
113 str = [str, sprintf('%*s ', widths(end), strs{end})];
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114
465
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
115 if ismember(length(strs), vertDiv)
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
116 str = [str, '|'];
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
117 end
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
118
a5cebdaad10b Implement a simple but general text table
Jonatan Werpers <jonatan@werpers.com>
parents: 286
diff changeset
119 str = [str, sprintf('\n')];
271
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120 end
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121 end
3c25601f1fe3 Started adding a function for texttables.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 end