This breaks the system beautifully:
&c.aspiration [v( d.asp )]=$^\+?asp(/[^ ]+)?(.*)?$:
think strcat(
switch entered:, %b, setr( s, trim( rest( %1, / ))), %r,
switches known:, %b,
setr( k,
sort(
iter( lattr( %!/c.aspiration* ), rest( %i0, / ), , | ),
a, |, |
)
), %r,
switch matched:, %b,
setr( m, grab( |%qk, %qs*, | )), %r,
content:, %b, setr( c, trim( %2 )), %r,
);
@assert not( haspower( %#, guest ))={
@pemit %#=
u( .msg, asp, I'm sorry%, guest%, but this isn't *for* you. )
};
@assert cor( not( %qs ), t( %qm ))={
@pemit %#=
u( .msg, asp, I don't know the switch '%qs'.
I know: [itemize( lcstr( trim( %qk, b, | )), | )]
)
};
@pemit %#=case( 1,
// switch
cand( t( %qs ), t( %qm )),
u( c.aspiration/%qm, %qc ),
// specific: list details (yeah, probably should have its own attribute)
t( %qc ),
strcat(
if( strmatch( %qc, */* ),
[setq( p, pmatch( first( %qc, / )))][setq( n, rest( %qc, / ))],
[setq( p, %# )][setq( n, %qc )]
),
case( 0,
cor( isstaff( %# ), strmatch( %#, %qp )),
u( .msg, asp, You cannot check someone else's aspiration. ),
hastype( %qp, player ),
u( .msg, asp, No such player ),
isint( %qn ),
u( .msg, asp,
You didn't enter a number%; did you mean 'asp/list %qn'?
),
u( display.aspiration.details, %qp, %qn )
)
),
// general
u( display.aspiration.list, %#, lattr( %#/_aspiration.* ))
);
-
@set v( d.asp )/c.aspiration=regex
-
@set v( d.asp )/c.aspiration=no_parse
-
&c.aspiration/fulfill [v( d.asp )]=
strcat(
setq( f, trim( first( %0, = ))),
setq( r, trim( rest( %0, = ))),
case( 0,
strlen( %qr ),
u( f.list.aspirations,
if( strlen( %qf ), %qf, %# ),
fulfilled,
asp/fulfill
),
strmatch( %qf, */* ),
u( f.aspiration/fulfill.request, %qf, %qr ),
u( f.aspiration/fulfill.approve,
first( %qf, / ),
rest( %qf, / ),
%qr
)
)
)
It thinks that the */*
in the middle of two lines are the start/end of a comment block.