回答編集履歴

2

WSHマクロ\(JScript\)版を追加

2017/08/14 12:02

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -153,3 +153,173 @@
153
153
  * ショートカットキーはお好みで変更してください。
154
154
 
155
155
  * プラグインは不要です。素のAtomだけで可能です。
156
+
157
+
158
+
159
+ ---
160
+
161
+
162
+
163
+ ###サクラエディタのWSHマクロ(JScript)版
164
+
165
+
166
+
167
+ JavaScriptは禁止されているようですが、サクラエディタのWSHマクロとしてJScriptが禁止されているのか(というか、どうやって禁止するんだろう)が質問への追記・修正依頼にありますが、未だにその回答がありません。WSHのJScriptはJavaScriptとは違うから使えるという前提にして、WSHマクロ(JScript)を書きました(というか、ただの移植ですが)。適当なファイルに保存して、サクラエディタの「名前を指定してマクロ実行」から実行してください。
168
+
169
+
170
+
171
+ ```JavaScript
172
+
173
+ /**
174
+
175
+ * Traspose Matrix for Sakura Editor
176
+
177
+ * Copyright (c) 2017 raccy
178
+
179
+ * This software is released under the MIT License.
180
+
181
+ * https://opensource.org/licenses/MIT
182
+
183
+ */
184
+
185
+ (function() {
186
+
187
+ 'use strict';
188
+
189
+ var getLineEndings = function(str) {
190
+
191
+ switch(GetLineCode()) {
192
+
193
+ case 0:
194
+
195
+ return '\r\n';
196
+
197
+ break;
198
+
199
+ case 1:
200
+
201
+ return '\r';
202
+
203
+ break;
204
+
205
+ case 2:
206
+
207
+ return '\n';
208
+
209
+ break;
210
+
211
+ }
212
+
213
+ }
214
+
215
+ var lineSplit = function(str, lineEndings) {
216
+
217
+ var lines = str.split(lineEndings);
218
+
219
+ var oLen = lines.length;
220
+
221
+ if (oLen > 0 && lines[oLen - 1].length === 0) {
222
+
223
+ return lines.slice(0, oLen - 1);
224
+
225
+ } else {
226
+
227
+ return lines;
228
+
229
+ }
230
+
231
+ };
232
+
233
+ var transposeMatrix = function(matrix) {
234
+
235
+ var hSize = matrix.length;
236
+
237
+ var wSize = 0;
238
+
239
+ var i, len;
240
+
241
+ for (i = 0; i < hSize; i++) {
242
+
243
+ len = matrix[i].length;
244
+
245
+ if (len > wSize) {
246
+
247
+ wSize = len;
248
+
249
+ }
250
+
251
+ }
252
+
253
+ var results = [];
254
+
255
+ var x, y, line;
256
+
257
+ for (y = 0; y < wSize; y++) {
258
+
259
+ line = [];
260
+
261
+ for (x = 0; x < hSize; x++) {
262
+
263
+ line.push(matrix[x][y]);
264
+
265
+ }
266
+
267
+ results.push(line);
268
+
269
+ }
270
+
271
+ return results;
272
+
273
+ };
274
+
275
+ var transposeAll = function() {
276
+
277
+ var i, len;
278
+
279
+ SelectAll();
280
+
281
+ var text = GetSelectedString(0);
282
+
283
+ if (!text) {
284
+
285
+ return;
286
+
287
+ }
288
+
289
+ var lineEndings = getLineEndings(text);
290
+
291
+ var splitedText = lineSplit(text, lineEndings);
292
+
293
+ var textMatrix = [];
294
+
295
+ for (i = 0, len = splitedText.length; i < len; i++) {
296
+
297
+ textMatrix.push(splitedText[i].split('\t'));
298
+
299
+ }
300
+
301
+ var newTextMatrix = transposeMatrix(textMatrix);
302
+
303
+ var newTextLines = [];
304
+
305
+ for (i = 0, len = newTextMatrix.length; i < len; i++) {
306
+
307
+ newTextLines.push(newTextMatrix[i].join('\t'));
308
+
309
+ }
310
+
311
+ newText = newTextLines.join(lineEndings) + lineEndings;
312
+
313
+ InsText(newText);
314
+
315
+ };
316
+
317
+ transposeAll();
318
+
319
+ })();
320
+
321
+ ```
322
+
323
+
324
+
325
+ ES6以降が使えないのはまだしも、Array.prototype.mapすらないJScriptがきつい。もう、二度と書きたくない。

1

ソースに要らない\(無害な\)行が入っていたので、修正

2017/08/14 12:02

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -98,8 +98,6 @@
98
98
 
99
99
  lineEndings = getLineEndings(text)
100
100
 
101
- chompedText =
102
-
103
101
  textMatrix = lineSplit(text, lineEndings).map (line) -> line.split('\t')
104
102
 
105
103
  newTextMatrix = transposeMatrix(textMatrix)