Skip to content

Commit aea44d6

Browse files
committed
skipmode追加
1 parent 311bfc6 commit aea44d6

File tree

7 files changed

+127
-18
lines changed

7 files changed

+127
-18
lines changed

README.md

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ dist以下のファイルをScripts Panelフォルダにコピーしてくださ
2424

2525
ルビ情報を書いたCSVファイルを読み込んで、一括でルビを設定します。ロックされたレイヤー、非表示のレイヤーは対象としません。
2626

27-
<img src="images/dialog.png" width="301" alt="">
28-
2927
起動すると、まずルビの書式設定が開きます。「OK」を押すと、次にCSVファイルの選択画面が出るので、ルビ情報のCSVを選択してください。
3028

29+
<img src="images/dialog.png" width="301" alt="">
30+
3131
CSVのデータは以下の構造になっています。
3232

3333
*ルビを振る文字,ルビ,文脈,フラグ*
@@ -40,7 +40,10 @@ CSVのデータは以下の構造になっています。
4040
<dt>文脈</dt>
4141
<dd>省略可。同じ漢字でも送り仮名によって読みが変わるなど、特定の文脈を正規表現で指定できます。詳細は後述。</dd>
4242
<dt>フラグ</dt>
43-
<dd>省略可。0〜2の値を設定します。0 : すべての対象にルビを振る, 1 : ドキュメント内で最初の対象のみにルビを振る, 2 : ページ内で最初の対象のみにルビを振る</dd>
43+
<dd>省略可。0〜2の値を設定します。<br>
44+
0 : すべての対象にルビを振る(デフォルト)<br>
45+
1 : ドキュメント内で最初の対象のみにルビを振る<br>
46+
2 : ページ内で最初の対象のみにルビを振る</dd>
4447
</dl>
4548

4649
#### グループルビとモノルビ
@@ -68,11 +71,24 @@ CSVのデータは以下の構造になっています。
6871
*愛,あい,愛(して|する)*
6972
*愛,いと,愛し[いく]*
7073

74+
この例では、「歩く」や「歩けない」の「歩」には「ある」のルビが振られ、「歩みを進める」や「歩もうと」には「あゆ」のルビが振られます。
75+
また、「愛してくれ」「君を愛する」の「愛」には「あい」、「愛しい人よ」「愛しくて」には「いと」が振られます。
76+
77+
### 「重複スキップ」について
78+
79+
ルビ振りはCSVファイルの上の行から順に処理されます。デフォルトでは同じ文字に複数のルビ指定がある場合、後のものでルビを上書きします。
80+
81+
「重複スキップ」にチェックを入れると、すでにルビが指定されている文字・文字列には、ルビを振りません(処理をスキップする)。
82+
83+
文字列にルビを指定する場合も、文字列内に1文字でもルビが振られている場合はこれをスキップします。
84+
85+
また「フラグ」に1か2を指定していると、対象にすでにルビが振られている場合にスキップされて一つもルビが振られなくなることがあるので、注意してください。
86+
7187
## pixiv Ruby Converter
7288

7389
pixivの小説投稿で使われているルビ書式 [[rb: xxxx > yyyy]] をInDesignのルビに変換します。pixivの編集画面からコピペしたときに使ってください。
7490

75-
設定項目は「CSVルビ一括設定」と同じです。ロックされたレイヤー、非表示のレイヤーは対象としません。また、すべてグループルビになります。
91+
書式設定項目は「CSVルビ一括設定」と同じです。ロックされたレイヤー、非表示のレイヤーは対象としません。また、すべてグループルビになります。
7692

7793
## Default Settings
7894

dist/CSVRubyProcessor.jsx

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,14 @@
1515
var NAME = 'CSVRubyProcessor';
1616

1717
function loadconfig(name, def) {
18-
var scriptFile = new File($.fileName);
18+
var scriptFile = function () {
19+
try {
20+
return app.activeScript;
21+
} catch (err) {
22+
return File(err.fileName);
23+
}
24+
}();
25+
1926
var configFile = new File(scriptFile.parent + '/RUBY_PROCESSOR.conf');
2027

2128
if (configFile.exists) {
@@ -213,11 +220,15 @@ function applyRuby(chars, ruby, group, option) {
213220
}
214221

215222
var RubySetting = function () {
216-
function RubySetting(parent, def) {
223+
function RubySetting(parent, def, skipmode) {
217224
if (def === void 0) {
218225
def = {};
219226
}
220227

228+
if (skipmode === void 0) {
229+
skipmode = false;
230+
}
231+
221232
this.parent = parent;
222233
this.alignList = new NameValueList(this.parent, {
223234
'肩付き': RubyAlignments.RUBY_LEFT,
@@ -252,6 +263,15 @@ var RubySetting = function () {
252263
this.parentSpacingList.group.preferredSize.width = 210;
253264
this.xOffset = convertInt(def.xOffset);
254265
this.yOffset = convertInt(def.yOffset);
266+
267+
if (skipmode) {
268+
this.inputSkipmode = this.parent.add('checkbox', undefined, '重複スキップ');
269+
this.inputSkipmode.value = def.skipmode;
270+
} else {
271+
this.inputSkipmode = {
272+
value: false
273+
};
274+
}
255275
}
256276

257277
var _proto = RubySetting.prototype;
@@ -267,6 +287,10 @@ var RubySetting = function () {
267287
};
268288
};
269289

290+
_proto.isSkip = function isSkip() {
291+
return this.inputSkipmode.value;
292+
};
293+
270294
return RubySetting;
271295
}();
272296

@@ -327,13 +351,14 @@ var DEFAULT = loadconfig(NAME, {
327351
overhang: 1,
328352
parentspacing: 2,
329353
xOffset: 0,
330-
yOffset: 0
354+
yOffset: 0,
355+
skipmode: false
331356
});
332357
app.doScript(main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT);
333358

334359
function main() {
335360
var dialog = new Window('dialog', 'ルビ設定');
336-
var rubySettings = new RubySetting(dialog, DEFAULT);
361+
var rubySettings = new RubySetting(dialog, DEFAULT, true);
337362
new ActionButtons(dialog, {
338363
width: 96,
339364
height: 24
@@ -345,6 +370,7 @@ function main() {
345370
}
346371

347372
var rubyOption = rubySettings.getValues();
373+
var skipmode = rubySettings.isSkip();
348374
var fileObj = File.openDialog('', function () {
349375
if (/^windows/i.test($.os)) {
350376
return '*.csv';
@@ -451,13 +477,26 @@ function main() {
451477
}
452478

453479
if (!target) break;
480+
var rubyFlag = false;
481+
482+
if (skipmode) {
483+
for (var k = 0; k < target.characters.length; k++) {
484+
rubyFlag = target.characters[k].rubyFlag;
485+
486+
if (rubyFlag instanceof Array) {
487+
rubyFlag = rubyFlag[0];
488+
}
489+
490+
if (rubyFlag) break;
491+
}
492+
}
454493

455-
if (!target.rubyFlag[0]) {
494+
if (!rubyFlag) {
456495
if (data.ruby.length > 1) {
457-
for (var k = 0; k < data.ruby.length; k++) {
458-
if (!data.ruby[k]) continue;
459-
if (k === target.length) break;
460-
applyRuby(target.characters[k], data.ruby[k], false, rubyOption);
496+
for (var _k = 0; _k < data.ruby.length; _k++) {
497+
if (!data.ruby[_k]) continue;
498+
if (_k === target.length) break;
499+
applyRuby(target.characters[_k], data.ruby[_k], false, rubyOption);
461500
}
462501
} else {
463502
applyRuby(target, data.ruby[0], target.length > 1, rubyOption);

dist/RUBY_PROCESSOR.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ var CONFIG = {
4141
overhang: 1,
4242
// 親文字間の調整
4343
parentspacing: 2,
44+
// 重複スキップ
45+
skipmode: false,
4446
},
4547
// pixivルビ変換
4648
pixivRubyConverter: {

dist/pixivRubyConverter.jsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,14 @@
1515
var NAME = 'pixivRubyConverter';
1616

1717
function loadconfig(name, def) {
18-
var scriptFile = new File($.fileName);
18+
var scriptFile = function () {
19+
try {
20+
return app.activeScript;
21+
} catch (err) {
22+
return File(err.fileName);
23+
}
24+
}();
25+
1926
var configFile = new File(scriptFile.parent + '/RUBY_PROCESSOR.conf');
2027

2128
if (configFile.exists) {
@@ -137,11 +144,15 @@ function applyRuby(chars, ruby, group, option) {
137144
}
138145

139146
var RubySetting = function () {
140-
function RubySetting(parent, def) {
147+
function RubySetting(parent, def, skipmode) {
141148
if (def === void 0) {
142149
def = {};
143150
}
144151

152+
if (skipmode === void 0) {
153+
skipmode = false;
154+
}
155+
145156
this.parent = parent;
146157
this.alignList = new NameValueList(this.parent, {
147158
'肩付き': RubyAlignments.RUBY_LEFT,
@@ -176,6 +187,15 @@ var RubySetting = function () {
176187
this.parentSpacingList.group.preferredSize.width = 210;
177188
this.xOffset = convertInt(def.xOffset);
178189
this.yOffset = convertInt(def.yOffset);
190+
191+
if (skipmode) {
192+
this.inputSkipmode = this.parent.add('checkbox', undefined, '重複スキップ');
193+
this.inputSkipmode.value = def.skipmode;
194+
} else {
195+
this.inputSkipmode = {
196+
value: false
197+
};
198+
}
179199
}
180200

181201
var _proto = RubySetting.prototype;
@@ -191,6 +211,10 @@ var RubySetting = function () {
191211
};
192212
};
193213

214+
_proto.isSkip = function isSkip() {
215+
return this.inputSkipmode.value;
216+
};
217+
194218
return RubySetting;
195219
}();
196220

images/dialog.png

5.54 KB
Loading

src/CSVRubyProcessor.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ const DEFAULT = loadconfig(NAME, {
1010
parentspacing: 2,
1111
xOffset: 0,
1212
yOffset: 0,
13+
skipmode: false,
1314
})
1415

1516
app.doScript(main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT)
1617

1718
function main() {
1819
const dialog = new Window('dialog', 'ルビ設定')
1920

20-
const rubySettings = new RubySetting(dialog, DEFAULT)
21+
const rubySettings = new RubySetting(dialog, DEFAULT, true)
2122

2223
new ActionButtons(dialog, {
2324
width: 96,
@@ -32,6 +33,7 @@ function main() {
3233
}
3334

3435
const rubyOption = rubySettings.getValues()
36+
const skipmode = rubySettings.isSkip()
3537

3638
// ファイルオープン
3739
const fileObj = File.openDialog('', (() => {
@@ -149,8 +151,24 @@ function main() {
149151

150152
if (!target) break
151153

154+
let rubyFlag = false
155+
156+
if (skipmode) {
157+
// ターゲット文字列内にルビが振られた文字が1文字でもあるか
158+
for (let k = 0; k < target.characters.length; k++) {
159+
rubyFlag = target.characters[k].rubyFlag
160+
161+
if (rubyFlag instanceof Array) {
162+
// itemByRange で取得した character のプロパティは配列
163+
rubyFlag = rubyFlag[0]
164+
}
165+
166+
if (rubyFlag) break
167+
}
168+
}
169+
152170
// すでにルビが振られているなら処理しない
153-
if (!target.rubyFlag[0]) {
171+
if (!rubyFlag) {
154172
if (data.ruby.length > 1) {
155173
for (let k = 0; k < data.ruby.length; k++) {
156174
if (!data.ruby[k]) continue

src/modules/rubyUtils.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function applyRuby(chars, ruby, group, option) {
1818
}
1919

2020
class RubySetting {
21-
constructor(parent, def = {}) {
21+
constructor(parent, def = {}, skipmode = false) {
2222
this.parent = parent
2323

2424
this.alignList = new NameValueList(this.parent, {
@@ -58,6 +58,13 @@ class RubySetting {
5858

5959
this.xOffset = convertInt(def.xOffset)
6060
this.yOffset = convertInt(def.yOffset)
61+
62+
if (skipmode) {
63+
this.inputSkipmode = this.parent.add('checkbox', undefined, '重複スキップ')
64+
this.inputSkipmode.value = def.skipmode
65+
} else {
66+
this.inputSkipmode = { value: false }
67+
}
6168
}
6269
getValues() {
6370
return {
@@ -69,6 +76,9 @@ class RubySetting {
6976
yOffset: this.yOffset,
7077
}
7178
}
79+
isSkip() {
80+
return this.inputSkipmode.value
81+
}
7282
}
7383

7484
export { applyRuby, RubySetting }

0 commit comments

Comments
 (0)