summaryrefslogtreecommitdiff
path: root/src/mml_composemusic_mcp/parser_ppmck.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mml_composemusic_mcp/parser_ppmck.py')
-rw-r--r--src/mml_composemusic_mcp/parser_ppmck.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/mml_composemusic_mcp/parser_ppmck.py b/src/mml_composemusic_mcp/parser_ppmck.py
index 47a0412..bd3b06b 100644
--- a/src/mml_composemusic_mcp/parser_ppmck.py
+++ b/src/mml_composemusic_mcp/parser_ppmck.py
@@ -97,6 +97,36 @@ class PpmckParser:
if token.type == TokenType.INVALID:
self._handle_invalid(token)
continue
+ if token.type in {
+ TokenType.VOL_ENV,
+ TokenType.DUTY,
+ TokenType.LFO_DEF,
+ TokenType.PITCH_ENV_DEF,
+ TokenType.NOTE_ENV_DEF,
+ }:
+ statement = self._parse_statement()
+ if isinstance(
+ statement,
+ (
+ VolumeEnvelopeDefStmt,
+ DutyEnvelopeDefStmt,
+ LfoDefStmt,
+ PitchEnvDefStmt,
+ NoteEnvDefStmt,
+ ),
+ ):
+ program.global_statements.append(statement)
+ else:
+ self.ctx.add_error(
+ code=ErrorCode.SEMANTIC_OUTSIDE_TRACK,
+ line=token.line,
+ column=token.column,
+ message="トラック外ではエフェクト定義だけを使用できます。",
+ severity="error",
+ hint="選択コマンドはトラック内へ移動してください。",
+ context=context_line(self.source, token),
+ )
+ continue
# Anything else before a track header is outside a track.
self._warn_outside_track(token)
self.ctx.advance()