'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'           C O N T R O L    S T R U C T U R E S 
'============================================================================================================================
'           FOR AND ITS BLOCK                                        
'----------------------------------------------------------------------------------------------------------------------------
ws          for.k    for(             =for              'transforms state ws into for
for         .idv     .=a              =for1             'mandatory print .idd and storing idd in variable a;
            .idf     "\$$token ".=a   =for1             'if variable is declared after it is met here, let this event to pass;
'----------------------------------------------------------------------------------------------------------------------------
'           "for each" section
'----------------------------------------------------------------------------------------------------------------------------
            each.k   ")"              =foreach,we       "//!! ""for each"" needs manual correction "
foreach,e   in.k     <foreach2,we
foreach2,e  .t       <for,-s          .i             {           
'============================================================================================================================

for1        =        "$a ="            =for2,we            
for2,e      to.k     "; "              <too                 'part for moo=foo(goo); is completed; set state too expecting 
                                                            'following event;
too         .        .*b               =to,we +             'some event come when in too; set states to we; pass event, 
                                                            'start to collect input into ..b;
to,e        step.k   .-b               <step1               'stop collecting input into ..b; to expression now is in ..b; 
                                                            'now we need to collect expression after step;
            .t       .-b               :
            "$a <=$b ;  $a +=1){"      <for,-s              'assume for ... to ... is completed; recurse nest to -s,ws; 
                                                            'stop collecting ..b; make nice indent;

step1       .        .*c               =step,we   +         'somthing came when we were waiting in state step1; 
                                                            'start to collect it into ..c; pass this event into .d;

step,e      .t       .-c               :
            "$a <=$b ;  $a +=$c ){"    :
            <for,-s   +"! may check conditions for counter; no way for translator to do this ... ".r

for,-s      .next     <ws              .i } .i    +.tfull   'completing "for"; restoring nest to "...s, ws" or " ..., ws";
ws          .exitfor  "break; "        <          +.tfull
'============================================================================================================================


'============================================================================================================================
'            IF AND ITS BLOCKS
'----------------------------------------------------------------------------------------------------------------------------
ws           if.k        if(       =if,we 

if,e         then.k      ){        <-s,if_fresh,ws                     '.i    '!+ unremming this .i makes "if text" less
                                                                              'compact, but maybe nicer.
if_fresh    .tfull                 =if_b        
            .tempty                =if_empty

if_empty    .r10        .i         <if_b,-s,ws                                'switch to multiblock, only line feed switches 
                                   'to multiblock;

            .else                  =if_b  +.else                              'reduce to one-line case
            .elseif                =if_b  +.elseif            
            .:                     =if_b  +.:
            .endif                 =if_b  +.endif                             'added for fun; "if x then end if" is uncommon

'basic if-block-multiline state (A)
if_b,-s    .else         <         .i "}else { "   >-s,ws                     'reopen if block 
           .endif        <2        .i  }           +.tfull
           .elseif                 +.else          =elseif_flag,ws +if.k      'flag replaces ws; new block if immideately
                                                                                     'inserts into "else-block"
           .:            "  "         >ws

'if-block-on-one-line state (B)
-s,if_b    .else         <2        .i "}else { "  >-s,if_b,ws                        'simply reopens  if_b block
           .r10          <if_b,-s  +.endif         +.r10                             'reduces to "m-line close"; 
                                                                                     'r10 in post-string causes
                                                                                     '"chain reaction for one-line nests"
           .elseif       +.else    =elseif_flag,ws +if.k  
           .endif                  <if_b,-s +.endif
           .:            "  "      >ws

elseif_flag  .tfull                <      +.endif                                    'causes "chain reaction" until all 
                                                                                     'elseif_flags cancelled
'----------------------------------------------------------------------------------------------------------------------------
'                ef IF
'============================================================================================================================



'============================================================================================================================
'                DO BLOCK     
'----------------------------------------------------------------------------------------------------------------------------
ws              .do             "do { "         =do,-s,ws    .i   
                .dowhile        "while ( ("     =while,we
                .dountil        "while (!("     =while,we
while,e         .t              " )){"          =-s,ws       .i

do,-s,ws        .loop           <3              .i }  " while(TRUE);" .i  +.tfull  'exclude "while(TRUE)" if redundant;
                .loopwhile      <2,loopwhile,we .i }  " while(  ( "        
                .loopuntil      <2,loopwhile,we .i }  " while( !( "
while,-s,ws     .loop           <3              .i }                  .i  +.tfull
loopwhile,e     .t              <2              " )); "               .i  +.tfull
'============================================================================================================================

'============================================================================================================================
'               SELECT CASE AND ITS BLOCKS  
'----------------------------------------------------------------------------------------------------------------------------
ws              .selectcase    "switch ( "        =selectcase,we            
selectcase,e    .t             " ) { "            <-s,w_case     .i          'the only effect of "-s" is longer indent;

w_case          .case          "case "            =case,we                
                .caseelse      "default: "        =case,-s,ws            
                .endselect                        <2  .i } .i    +.tfull            
                .r10           .i

case,e          .t             ": "               =-s      .i                'no need for -s,ws becase this .t must be
                                                                             'followed by .r10 from ":" or .r10;
                ,              ": "  .i  "case "  =we                        'convert ASP-multicase to PHP-multicase;

case,-s        .case           .i "break; " +.w_case +    'PHP requires "break;"; change for other C-syntax;
               .caseelse       .i "break; " +.w_case +
               .endselect      <w_case               +
               .w_case         <w_case      .i 

'============================================================================================================================
'             C O N T R O L    S T R U C T U R E S    E N D 
'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////