Skip to content

Commit

Permalink
一つのファイル内に複数のYAMLドキュメントが埋め込まれていた場合、起動オプションで読み込むドキュメントを切り替えられるようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
esperecyan committed Oct 13, 2018
1 parent 792c162 commit f242d72
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 12 deletions.
53 changes: 53 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,59 @@ allow_direct_view: true

起動オプション
--------------
### `--esperecyan-document-index=[数字]` (0から始まる整数)
一つのファイル内に複数のYAMLドキュメントが埋め込まれていた場合、読み込むドキュメントを切り替えます。

:

```yaml
---
niconico:
character_models:
- 32797
- 32806
- 32813
--- # コメント
niconico:
character_models:
- 40000
- 40001
- 40023
---
niconico:
character_models:
- 41036
```

#### `--esperecyan-document-index==0` の場合
指定しなかった場合と同じ。

```json
{
"niconico": {
"character_models": [
32797,
32806,
32813
]
}
}
```

#### `--esperecyan-document-index==1` の場合

```json
{
"niconico": {
"character_models": [
40000,
40001,
40023
]
}
}
```

### `--esperecyan-niconico-character-models-offset-16x=[数字]`
`niconico.character_models` の順番をズラします。

Expand Down
52 changes: 40 additions & 12 deletions バーチャルキャストを起動.js.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,21 @@ function putFileContents(path, contents)
stream.Close();
}

/**
* 指定されたコマンドライン引数名の値を取得します。
* @param {string} name
* @returns {string}
*/
function getArgument(name)
{
for (var i = 0, l = WSH.Arguments.length; i < l; i++) {
if (WSH.Arguments(i).startsWith(name + '=')) {
return WSH.Arguments(i).replace(name + '=', '');
}
}
return '';
}

/**
* 指定された値が Object でなければ、エラーメッセージを表示します。
* @param {*} config
Expand Down Expand Up @@ -184,9 +199,9 @@ if (inputFile) {

var yaml = getFileContents(inputFile.Path);

var config;
var configs;
try {
config = jsyaml.safeLoad(yaml, {filename: inputFile.Path});
configs = jsyaml.safeLoadAll(yaml, null, {filename: inputFile.Path});
} catch (exception) {
if (exception.name === 'YAMLException') {
var errorMessage = '「' + inputFile.Name + '」は壊れています。以下のエラーが発生しました。';
Expand All @@ -206,22 +221,35 @@ if (inputFile) {
}
}

var config = configs[0];
var argument = getArgument('--esperecyan-document-index');
if (argument) {
var index = Number.parseInt(argument);
if (configs.length <= index) {
Shell.Popup(
inputFile.Name + 'には' + configs.length + '個のYAMLドキュメントが含まれているので、'
+ '--esperecyan-document-index には0~' + (configs.length - 1) + 'を指定する必要があります。',
0,
WSH.ScriptName,
vbOKOnly + vbCritical
);
return;
}
config = configs[index];
}

if (!isValidConfig(config, inputFile.Name)) {
return;
}

if (typeof config.niconico === 'object' && config.niconico !== null
&& Array.isArray(config.niconico.character_models)) {
for (var i = 0, l = WSH.Arguments.length; i < l; i++) {
if (WSH.Arguments(i).startsWith('--esperecyan-niconico-character-models-offset-16x=')) {
var offset = Number.parseInt(
WSH.Arguments(i).replace('--esperecyan-niconico-character-models-offset-16x=', '')
) * MAX_NICONICO_CHARCTER_MODELS_COUNT;
if (config.niconico.character_models.length > offset) {
config.niconico.character_models
= config.niconico.character_models.concat(config.niconico.character_models.splice(0, offset));
}
break;
var argument = getArgument('--esperecyan-niconico-character-models-offset-16x');
if (argument) {
var offset = Number.parseInt(argument) * MAX_NICONICO_CHARCTER_MODELS_COUNT;
if (config.niconico.character_models.length > offset) {
config.niconico.character_models
= config.niconico.character_models.concat(config.niconico.character_models.splice(0, offset));
}
}
}
Expand Down

0 comments on commit f242d72

Please sign in to comment.