-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspec_format.js
212 lines (163 loc) · 5.83 KB
/
spec_format.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
function formatHeadingProperty(para) {
// set base font style
var styleBase = {};
styleBase[DocumentApp.Attribute.FONT_SIZE] = 10;
//styleBase[DocumentApp.Attribute.BOLD] = true;
para.setAttributes(styleBase);
}
function formatTableProperty(tbl) {
// apply base table format
formatTable(tbl);
// declare local variables
var body = tbl.getParent();
// set the column widths, 72 ppi
tbl.setColumnWidth(0, 36);
tbl.setColumnWidth(1, 115);
tbl.setColumnWidth(2, 133);
tbl.setColumnWidth(3, 184);
// format markdown
//formatMarkdown(tbl); // need to apply only to the description column
pubcode.formatActionText(tbl);
}
function formatTableEnum(tbl) {
// apply base table format
formatTable(tbl);
// declare local variables
var body = tbl.getParent();
// set the column widths, 72 ppi
tbl.setColumnWidth(0, 27);
tbl.setColumnWidth(1, 100);
tbl.setColumnWidth(2, 341);
// format markdown
//formatMarkdown(tbl);
pubcode.formatActionText(tbl);
}
function formatTable(tbl) {
// format header row
formatHeader(tbl, 1);
// set base font style
var styleBase = {};
styleBase[DocumentApp.Attribute.FONT_SIZE] = 10;
//styleBase[DocumentApp.Attribute.BOLD] = true;
tbl.setAttributes(styleBase);
//formatSpecText(tbl)
}
function formatHeader(tbl, numRows) {
// only format header if there are > 1 rows
if (tbl.getNumRows() == 1) {
return 0;
}
// set header row style
var styleRowHeader = {};
styleRowHeader[DocumentApp.Attribute.FOREGROUND_COLOR] = '#ffffff'; // white
styleRowHeader[DocumentApp.Attribute.BOLD] = true;
for (var rowNum = 0; rowNum < numRows; rowNum++) {
// format header row
var rowHeader = tbl.getRow(rowNum);
// set the cell background to header row
for (cellNum = 0; cellNum < rowHeader.getNumCells(); cellNum++) {
rowHeader.getCell(cellNum).setBackgroundColor('#073763'); // dark blue 3
}
// apply the style
rowHeader.setAttributes(styleRowHeader);
}
}
function formatTableSample(tbl) {
// apply base table format
formatTable(tbl);
// set the font style
var style = {};
style[DocumentApp.Attribute.FONT_FAMILY] = 'Source Code Pro';
style[DocumentApp.Attribute.FONT_SIZE] = 9;
tbl.setAttributes(style);
// set the table properties
tbl.setBorderWidth(0);
// set the cell properties
var cell = tbl.getRow(0).getCell(0);
cell.setBackgroundColor('#cfe2f3');
}
function formatSpecText(rng) {
///*
var regex = 'MUST|REQUIRED|SHALL|SHOULD|RECOMMENDED|MAY|OPTIONAL'
var findElement = rng.findText(regex);
// Define a custom paragraph style.
var style = {};
style[DocumentApp.Attribute.BOLD] = true;
while (findElement != null) {
var elem = findElement.getElement();
elem.setAttributes(findElement.getStartOffset(), findElement.getEndOffsetInclusive(), style);
// get the next element
findElement = rng.findText(regex);
//findElement = null; // debug: stop after one loop
}
//*/
}
function formatActionText(rng) {
///*
var regex = '#[[:alpha:]]+'
var findElement = rng.findText(regex);
// Define a custom paragraph style.
var style = {};
style[DocumentApp.Attribute.BOLD] = true;
style[DocumentApp.Attribute.FOREGROUND_COLOR] = '#0000ff';
while (findElement != null) {
var elem = findElement.getElement();
//elem.setAttributes(findElement.getStartOffset(), findElement.getEndOffsetInclusive(), style);
elem.asText().deleteText(findElement.getStartOffset(), findElement.getStartOffset()); // inclusive
// get the next element
findElement = rng.findText(regex);
//findElement = null; // debug: stop after one loop
}
//*/
}
function formatMarkdown(rng) {
// inline code
var regex = "`[[:graph:]]+`"
var findElement = rng.findText(regex);
// Define a custom paragraph style.
var style = {};
style[DocumentApp.Attribute.FONT_FAMILY] = 'Source Code Pro';
style[DocumentApp.Attribute.BACKGROUND_COLOR] = '#d9d9d9';
while (findElement != null) {
//Logger.log(regex + ' found');
var elem = findElement.getElement();
elem.setAttributes(findElement.getStartOffset(), findElement.getEndOffsetInclusive(), style);
elem.asText().deleteText(findElement.getEndOffsetInclusive(), findElement.getEndOffsetInclusive()); // inclusive
elem.asText().deleteText(findElement.getStartOffset(), findElement.getStartOffset()); // inclusive
// get the next element
findElement = rng.findText(regex);
}
// italic
regex = "_[\w]+_"
findElement = rng.findText(regex);
// Define a custom paragraph style.
var style = {};
style[DocumentApp.Attribute.ITALIC] = true;
while (findElement != null) {
//Logger.log(regex + ' found');
var elem = findElement.getElement();
elem.setAttributes(findElement.getStartOffset(), findElement.getEndOffsetInclusive(), style);
elem.asText().deleteText(findElement.getEndOffsetInclusive(), findElement.getEndOffsetInclusive()); // inclusive
elem.asText().deleteText(findElement.getStartOffset(), findElement.getStartOffset()); // inclusive
// get the next element
findElement = rng.findText(regex);
}
/*
// bold
var re = /(\*\*|__)(.*?)(\*\*|__)/
findElement = rng.findText(re);
Logger.log('Looking for ' + re);
// Define a custom paragraph style.
var style = {};
style[DocumentApp.Attribute.BOLD] = true;
while (findElement != null) {
Logger.log(re + ' found');
var elem = findElement.getElement();
elem.setAttributes(findElement.getStartOffset(), findElement.getEndOffsetInclusive(), style);
elem.asText().deleteText(findElement.getEndOffsetInclusive()-1, findElement.getEndOffsetInclusive()); // inclusive
elem.asText().deleteText(findElement.getStartOffset(), findElement.getStartOffset()+1); // inclusive
// get the next element
findElement = rng.findText(re);
}
//*/
}