@@ -8,37 +8,38 @@ namespace CSharpMath.Rendering {
88 using Structures ;
99 using static Structures . Result ;
1010 public static class TextBuilder {
11- /* //Paste this into the C# Interactive, fill <username> yourself
11+ /* //Paste this into the C# Interactive, fill <username> yourself
1212#r "C:/Users/<username>/source/repos/CSharpMath/Typography/Build/NetStandard/Typography.TextBreak/bin/Debug/netstandard1.3/Typography.TextBreak.dll"
1313using Typography.TextBreak;
1414(int, WordKind, char)[] BreakText(string text) {
15- var breaker = new CustomBreaker();
16- var breakList = new List<BreakAtInfo>();
17- breaker.BreakWords(text);
18- breaker.LoadBreakAtList(breakList);
19- //index is after the boundary -> last one will be out of range
20- return breakList.Select(i => (i.breakAt, i.wordKind, text.ElementAtOrDefault(i.breakAt))).ToArray();
15+ var breaker = new CustomBreaker();
16+ var breakList = new List<BreakAtInfo>();
17+ breaker.BreakWords(text);
18+ breaker.LoadBreakAtList(breakList);
19+ //index is after the boundary -> last one will be out of range
20+ return breakList.Select(i => (i.breakAt, i.wordKind, text.ElementAtOrDefault(i.breakAt))).ToArray();
2121}
2222BreakText(@"Here are some text $1 + 12 \frac23 \sqrt4$ $$Display$$ text")
23- */
24- /* //Version 2
23+ */
24+ /* //Version 2
2525#r "C:/Users/<username>/source/repos/CSharpMath/Typography/Build/NetStandard/Typography.TextBreak/bin/Debug/netstandard1.3/Typography.TextBreak.dll"
2626using Typography.TextBreak;
2727string BreakText(string text, string seperator = "|")
2828{
29- var breaker = new CustomBreaker();
30- var breakList = new List<BreakAtInfo>();
31- breaker.BreakWords(text);
32- breaker.LoadBreakAtList(breakList);
33- //reverse to ensure earlier inserts do not affect later ones
34- foreach (var @break in breakList.Select(i => i.breakAt).Reverse())
35- text = text.Insert(@break, seperator);
36- return text;
29+ var breaker = new CustomBreaker();
30+ var breakList = new List<BreakAtInfo>();
31+ breaker.BreakWords(text);
32+ breaker.LoadBreakAtList(breakList);
33+ //reverse to ensure earlier inserts do not affect later ones
34+ foreach (var @break in breakList.Select(i => i.breakAt).Reverse())
35+ text = text.Insert(@break, seperator);
36+ return text;
3737}
3838BreakText(@"Here are some text $1 + 12 \frac23 \sqrt4$ $$Display$$ text")
39- */
40- public static Result < TextAtom > Build ( string text , bool enhancedColors ) {
41- if ( string . IsNullOrEmpty ( text ) ) return new TextAtom . List ( Array . Empty < TextAtom > ( ) , 0 ) ;
39+ */
40+ public static bool NoEnhancedColors { get ; set ; }
41+ public static Result < TextAtom > Build ( string latex ) {
42+ if ( string . IsNullOrEmpty ( latex ) ) return new TextAtom . List ( Array . Empty < TextAtom > ( ) , 0 ) ;
4243 bool ? displayMath = null ;
4344 StringBuilder mathLaTeX = null ;
4445 bool backslashEscape = false ;
@@ -47,7 +48,7 @@ public static Result<TextAtom> Build(string text, bool enhancedColors) {
4748 var atoms = new TextAtomListBuilder ( ) ;
4849 var breaker = new CustomBreaker ( ) ;
4950 var breakList = new List < BreakAtInfo > ( ) ;
50- breaker . BreakWords ( text , false ) ;
51+ breaker . BreakWords ( latex , false ) ;
5152 breaker . LoadBreakAtList ( breakList ) ;
5253 Result CheckDollarCount ( ) {
5354 switch ( dollarCount ) {
@@ -93,7 +94,7 @@ Result CheckDollarCount() {
9394 return Ok ( ) ;
9495 }
9596 ( int startAt , int endAt , char endingChar , WordKind wordKind ) ObtainRange ( int i ) =>
96- ( i == 0 ? 0 : breakList [ i - 1 ] . breakAt , breakList [ i ] . breakAt , text [ breakList [ i ] . breakAt - 1 ] , breakList [ i ] . wordKind ) ;
97+ ( i == 0 ? 0 : breakList [ i - 1 ] . breakAt , breakList [ i ] . breakAt , latex [ breakList [ i ] . breakAt - 1 ] , breakList [ i ] . wordKind ) ;
9798 for ( var i = 0 ; i < breakList . Count ; i ++ ) {
9899 var ( startAt , endAt , endingChar , wordKind ) = ObtainRange ( i ) ;
99100 bool SetNextRange ( ) {
@@ -105,7 +106,7 @@ Result<string> ReadArgument() {
105106 afterCommand = false ;
106107 if ( ! SetNextRange ( ) ) return Err ( "Missing argument" ) ;
107108 if ( endingChar != '{' ) {
108- var toReturn = text [ startAt ] . ToString ( ) ;
109+ var toReturn = latex [ startAt ] . ToString ( ) ;
109110#warning Not one char only, should skip spaces then read next char, and it is a possible command
110111 //range contains one char only
111112 if ( startAt == endAt )
@@ -116,14 +117,14 @@ Result<string> ReadArgument() {
116117 }
117118 int endingIndex = - 1 ;
118119 //startAt + 1 to not start at the { we started at
119- for ( int j = startAt + 1 , bracketDepth = 0 ; j < text . Length ; j ++ ) {
120- if ( text [ j ] == '{' ) bracketDepth ++ ;
121- else if ( text [ j ] == '}' )
120+ for ( int j = startAt + 1 , bracketDepth = 0 ; j < latex . Length ; j ++ ) {
121+ if ( latex [ j ] == '{' ) bracketDepth ++ ;
122+ else if ( latex [ j ] == '}' )
122123 if ( bracketDepth > 0 ) bracketDepth -- ;
123124 else { endingIndex = j ; break ; }
124125 }
125126 if ( endingIndex == - 1 ) return Err ( "Missing }" ) ;
126- var resultText = text . Substring ( endAt , endingIndex - endAt ) ;
127+ var resultText = latex . Substring ( endAt , endingIndex - endAt ) ;
127128 while ( startAt < endingIndex )
128129 _ = SetNextRange ( ) ; //this never fails because the above check
129130 return Ok ( resultText ) ;
@@ -143,7 +144,7 @@ Result<string> ReadArgument() {
143144
144145 //Normal unescaped text section, could be in display/inline math mode
145146 if ( ! backslashEscape ) {
146- var textSection = text . Substring ( startAt , endAt - startAt ) ;
147+ var textSection = latex . Substring ( startAt , endAt - startAt ) ;
147148 switch ( endingChar ) {
148149 case '$' :
149150 throw new InvalidCodePathException ( "The $ case should have been accounted for." ) ;
@@ -223,7 +224,7 @@ Result<string> ReadArgument() {
223224 }
224225 break ;
225226 default :
226- mathLaTeX . Append ( $@ "\{ text . Substring ( startAt , endAt - startAt ) } ") ;
227+ mathLaTeX . Append ( $@ "\{ latex . Substring ( startAt , endAt - startAt ) } ") ;
227228 break ;
228229 }
229230 backslashEscape = false ;
@@ -232,7 +233,7 @@ Result<string> ReadArgument() {
232233
233234 //Escaped text section and not in inline/display math mode
234235 afterCommand = true ;
235- switch ( text . Substring ( startAt , endAt - startAt ) ) {
236+ switch ( latex . Substring ( startAt , endAt - startAt ) ) {
236237 case "(" :
237238 mathLaTeX = new StringBuilder ( ) ;
238239 displayMath = false ;
@@ -273,7 +274,7 @@ Result<string> ReadArgument() {
273274 Ok ( parsedResult ) :
274275 Err ( "Invalid font size" )
275276 ) . Bind (
276- ReadArgument ( ) . Bind ( resizedContent => Build ( resizedContent , enhancedColors ) ) ,
277+ ReadArgument ( ) . Bind ( Build ) ,
277278 ( fontSize , resizedContent ) =>
278279 atoms . Add ( resizedContent , fontSize , "fontsize" . Length )
279280 ) . Error is string error
@@ -282,24 +283,24 @@ Result<string> ReadArgument() {
282283 }
283284 case "color" : {
284285 if ( ReadArgument ( ) . Bind ( color =>
285- Color . Create ( color , enhancedColors ) is Color value ?
286+ Color . Create ( color , ! NoEnhancedColors ) is Color value ?
286287 Ok ( value ) :
287288 Err ( "Invalid color" )
288289 ) . Bind (
289- ReadArgument ( ) . Bind ( coloredContent => Build ( coloredContent , enhancedColors ) ) ,
290+ ReadArgument ( ) . Bind ( Build ) ,
290291 ( color , coloredContent ) =>
291292 atoms . Add ( coloredContent , color , "color" . Length )
292293 ) . Error is string error
293294 ) return error ;
294295 break ;
295296 }
296297 //case "red", "yellow", ...
297- case var shortColor when enhancedColors && Color . PredefinedColors . Contains ( shortColor ) : {
298- if ( Ok ( Color . Create ( shortColor , enhancedColors ) ??
298+ case var shortColor when ! NoEnhancedColors && Color . PredefinedColors . Contains ( shortColor ) : {
299+ if ( Ok ( Color . Create ( shortColor , ! NoEnhancedColors ) ??
299300 throw new InvalidCodePathException (
300301 "This case's condition should have checked the validity of shortColor." )
301302 ) . Bind (
302- ReadArgument ( ) . Bind ( coloredContent => Build ( coloredContent , enhancedColors ) ) ,
303+ ReadArgument ( ) . Bind ( Build ) ,
303304 ( color , coloredContent ) =>
304305 atoms . Add ( coloredContent , color , shortColor . Length )
305306 ) . Error is string error
@@ -309,7 +310,7 @@ Result<string> ReadArgument() {
309310 //case "textbf", "textit", ...
310311 case var command when ! command . Contains ( "math" ) && FontStyleExtensions . FontStyles . TryGetByFirst ( command . Replace ( "text" , "math" ) , out var fontStyle ) : {
311312 if ( ReadArgument ( )
312- . Bind ( content => Build ( content , enhancedColors ) )
313+ . Bind ( Build )
313314 . Bind ( builtContent => atoms . Add ( builtContent , fontStyle , command . Length ) )
314315 . Error is string error )
315316 return error ;
0 commit comments