99using System . Text ;
1010using System . Text . RegularExpressions ;
1111using System . Windows . Forms ;
12+ using static System . Windows . Forms . LinkLabel ;
1213using Group = EZCode . Groups . Group ;
1314using Player = Sound . Player ;
1415using Types = EZCode . Variables . Ivar . Types ;
@@ -245,6 +246,10 @@ private set
245246 /// Needs to have Key_Down and Key_Up event connected to KeyInput_Down and KeyInput_Up
246247 /// </summary>
247248 public HashSet < Keys > Keys = new HashSet < Keys > ( ) ;
249+ /// <summary>
250+ /// If the code is currently running EZText
251+ /// </summary>
252+ private bool isEZText = false ;
248253
249254 public static readonly string SegmentSeperator = "segment" ;
250255 /// <summary>
@@ -1570,27 +1575,31 @@ async Task<string[]> PlaySwitch(string[]? _parts = null, string jumpsto = "", st
15701575 default :
15711576 try
15721577 {
1573- if ( keyword == "#" || keyword == "#create" . ToLower ( ) || keyword == "#suppress" . ToLower ( ) || keyword == "#current" || keyword == "#project" )
1578+ if ( keyword == "#" || keyword == "#create" . ToLower ( ) || keyword == "#suppress" . ToLower ( ) || keyword == "#current" || keyword == "#project" || keyword == "#eztext" )
15741579 {
15751580 int index =
15761581 keyword == "#" && parts [ 1 ] == "create" . ToLower ( ) ? 2 :
15771582 keyword == "#" && parts [ 1 ] == "suppress" . ToLower ( ) ? 2 :
15781583 keyword == "#" && parts [ 1 ] == "project" . ToLower ( ) ? 2 :
15791584 keyword == "#" && parts [ 1 ] == "current" . ToLower ( ) ? 2 :
1585+ keyword == "#" && parts [ 1 ] == "eztext" . ToLower ( ) ? 2 :
15801586 keyword == "#create" . ToLower ( ) ? 1 :
15811587 keyword == "#suppress" . ToLower ( ) ? 1 :
15821588 keyword == "#current" . ToLower ( ) ? 1 :
15831589 keyword == "#project" . ToLower ( ) ? 1 :
1590+ keyword == "#eztext" . ToLower ( ) ? 1 :
15841591 0 ;
15851592 keyword =
15861593 keyword == "#" && parts [ 1 ] == "create" . ToLower ( ) ? "#create" :
15871594 keyword == "#" && parts [ 1 ] == "suppress" . ToLower ( ) ? "#suppress" :
15881595 keyword == "#" && parts [ 1 ] == "current" . ToLower ( ) ? "#current" :
15891596 keyword == "#" && parts [ 1 ] == "project" . ToLower ( ) ? "#project" :
1597+ keyword == "#" && parts [ 1 ] == "eztext" . ToLower ( ) ? "#eztext" :
15901598 keyword == "#create" . ToLower ( ) ? keyword . ToLower ( ) :
15911599 keyword == "#suppress" . ToLower ( ) ? keyword . ToLower ( ) :
15921600 keyword == "#current" . ToLower ( ) ? keyword . ToLower ( ) :
15931601 keyword == "#project" . ToLower ( ) ? keyword . ToLower ( ) :
1602+ keyword == "#eztext" . ToLower ( ) ? keyword . ToLower ( ) :
15941603 keyword ;
15951604 switch ( keyword )
15961605 {
@@ -1704,6 +1713,58 @@ async Task<string[]> PlaySwitch(string[]? _parts = null, string jumpsto = "", st
17041713 }
17051714 }
17061715 break ;
1716+ case "#eztext" :
1717+ if ( parts [ index ] . ToLower ( ) != "start" && parts [ index ] . ToLower ( ) != "end" )
1718+ {
1719+ ErrorText ( parts , ErrorTypes . custom , custom : $ "Expected 'start' or 'end' keyword after '#eztext'") ;
1720+ }
1721+ else if ( parts [ index ] . ToLower ( ) == "start" )
1722+ {
1723+ List < string > everythingafter = new List < string > ( ) ;
1724+ everythingafter . AddRange ( splitcode . Skip ( currentindex + 1 ) ) ;
1725+ everythingafter = everythingafter . Select ( x => x . Trim ( ) ) . TakeWhile ( y => ! ( y == "# eztext end" || y == "#eztext end" ) ) . ToList ( ) ;
1726+
1727+ EZText eztext = new EZText ( this ) ;
1728+ string newCode = eztext . Translate ( string . Join ( Environment . NewLine , everythingafter ) , codeLine ) ;
1729+ foreach ( string error in eztext . Errors )
1730+ {
1731+ ErrorText ( new string [ 0 ] , ErrorTypes . custom , custom : error , dontshowcode : true , dontshowsegment : true ) ;
1732+ }
1733+ List < string > lines = newCode . Split ( new [ ] { '\n ' , '|' } ) . Select ( x => x . Trim ( ) ) . Where ( y => y != "" ) . ToList ( ) ;
1734+ string output = "" ;
1735+ int oldCodeLine = codeLine ;
1736+ isEZText = true ;
1737+
1738+ for ( int i = 0 ; i < lines . Count ; i ++ )
1739+ {
1740+ if ( ! playing ) break ;
1741+ codeLine = i + 1 ;
1742+ List < string > a_parts = lines [ i ] . Split ( new char [ ] { ' ' } ) . Where ( x => x != "" ) . ToList ( ) ;
1743+ for ( int j = 0 ; j < a_parts . Count ; j ++ )
1744+ {
1745+ if ( a_parts [ j ] . Trim ( ) == "->" )
1746+ {
1747+ try
1748+ {
1749+ a_parts . RemoveAt ( j ) ;
1750+ a_parts . AddRange ( lines [ i + 1 ] . Split ( ' ' ) ) ;
1751+ lines . RemoveAt ( i + 1 ) ;
1752+ }
1753+ catch
1754+ {
1755+
1756+ }
1757+ }
1758+ }
1759+ string [ ] task = await PlaySwitch ( a_parts . ToArray ( ) , "" , lines . ToArray ( ) , i , debugger ) ;
1760+ if ( bool . Parse ( task [ 1 ] ) == false ) i = lines . Count - 1 ;
1761+ output += task [ 0 ] ;
1762+ ConsoleText = output ;
1763+ }
1764+ ifmany = lines . Count ;
1765+ isEZText = false ;
1766+ }
1767+ break ;
17071768 }
17081769 }
17091770 else if ( vars . Select ( x => x . Name ) . Contains ( keyword ) )
@@ -5837,7 +5898,7 @@ public enum ErrorTypes
58375898 /// <param name="keyword">keyword, for error type</param>
58385899 /// <param name="name">name, for the error type</param>
58395900 /// <param name="custom">cutom error, this makes the 'name' and 'keyword' parameters not needed</param>
5840- public string ErrorText ( string [ ] parts , ErrorTypes error , string keyword = "keyword" , string name = "name" , string custom = "An Error Occured" , bool returnoutput = true , bool dontshowsegment = false )
5901+ public string ErrorText ( string [ ] parts , ErrorTypes error , string keyword = "keyword" , string name = "name" , string custom = "An Error Occured" , bool returnoutput = true , bool dontshowsegment = false , bool dontshowcode = false )
58415902 {
58425903 string text =
58435904 error == ErrorTypes . unkown ? $ "An error occured in { SegmentSeperator } { codeLine } " :
@@ -5852,7 +5913,7 @@ public string ErrorText(string[] parts, ErrorTypes error, string keyword = "keyw
58525913 error == ErrorTypes . errorEquation ? $ "Unable to solve the equation in { SegmentSeperator } { codeLine } " :
58535914 error == ErrorTypes . methodnamingvoilation ? $ "Can not name '{ keyword } ' as '{ name } ' because there is a method already named '{ name } ' in { SegmentSeperator } { codeLine } " :
58545915 error == ErrorTypes . custom ? $ "{ custom } { ( ! dontshowsegment ? $ " in { SegmentSeperator } { codeLine } " : "" ) } " : "An Error Occured, We don't know why. If it helps, it was on line " + codeLine ;
5855- text += " : " + string . Join ( " " , parts ) ;
5916+ text += ! dontshowcode ? " : " + string . Join ( " " , parts ) : "" ;
58565917 if ( ( parts . Contains ( "#suppress" ) && parts . Contains ( "error" ) ) || ( parts . Contains ( "#" ) && parts . Contains ( "suppress" ) && parts . Contains ( "error" ) ) ) return "" ;
58575918 if ( showFileInError )
58585919 {
0 commit comments