@@ -27,10 +27,11 @@ private void TerminalChanged()
2727
2828 /// 用于存放终端数据的缓存
2929 private List < List < TerminalBlock > > CacheLines { get ; } = [ ] ;
30-
30+
3131 //当前光标位置
3232 /// X从0开始,最大可到达窗口宽度(再增加就需要换行了)
3333 private int PositionX { get ; set ; } = 0 ;
34+
3435 /// Y从0开始,最大可到达窗口高度-1
3536 private int PositionY { get ; set ; } = 0 ;
3637
@@ -95,6 +96,8 @@ private void AddText(char[] texts)//TODO)) 保持private
9596 {
9697 //获取实际的字符宽度
9798 var length = UnicodeCalculator . GetWidth ( chars [ 0 ] ) ;
99+ if ( length < 0 )
100+ length = 0 ;
98101 //挖去可用空间
99102 space -= length ;
100103 if ( space < 0 ) //剩余空间不足,别添加了
@@ -687,9 +690,9 @@ public void AddChars(ReadOnlySpan<char> chars)
687690 break ;
688691 case TerminalCommand . MoveCursorTo :
689692 //光标移动到指定位置
690- //p1表示行数,p2表示列数
691- PositionX = p1 - 1 ;
692- PositionY = p2 - 1 ;
693+ //p1表示列数,p2表示行数
694+ PositionY = p1 - 1 ;
695+ PositionX = p2 - 1 ;
693696 if ( PositionX < 0 )
694697 PositionX = 0 ; //不能小于0
695698 if ( PositionX >= _windowWidth )
@@ -723,41 +726,58 @@ public void AddChars(ReadOnlySpan<char> chars)
723726 break ;
724727 case TerminalCommand . Reverse :
725728 //反转颜色
726- ( CurrentState . Foreground , CurrentState . Background ) = ( CurrentState . Background , CurrentState . Foreground ) ;
729+ CurrentState . Background = - 1 ;
730+ CurrentState . Foreground = - 1 ;
727731 break ;
728732 case TerminalCommand . ForegroundColor :
729733 //前景色
730734 //p1表示颜色代码
731- if ( p1 is >= 30 and <= 37 )
732- {
733- //设置前景色
734- CurrentState . Foreground = p1 - 30 ;
735- }
736- else if ( p1 == 39 )
737- {
738- //重置前景色
735+ if ( p1 == 39 ) //重置前景色
739736 CurrentState . Foreground = - 1 ;
740- }
737+ else //设置前景色
738+ CurrentState . Foreground = p1 ;
741739 break ;
742740 case TerminalCommand . BackgroundColor :
743741 //背景色
744742 //p1表示颜色代码
745- if ( p1 is >= 40 and <= 47 )
743+ if ( p1 == 49 ) //重置背景色
744+ CurrentState . Background = - 1 ;
745+ else //设置背景色
746+ CurrentState . Background = p1 ;
747+ break ;
748+ case TerminalCommand . MultipleStyle :
749+ //多重样式
750+ switch ( p1 )
746751 {
747- //设置背景色
748- CurrentState . Background = p1 - 40 ;
752+ case 0 : //重置样式
753+ CurrentState = new TerminalBlock ( "" ) ;
754+ break ;
755+ case 1 : //加粗
756+ CurrentState . IsBold = true ;
757+ break ;
758+ case 4 : //下划线
759+ CurrentState . IsUnderLine = true ;
760+ break ;
761+ case 7 : //反转颜色
762+ CurrentState . Background = - 1 ;
763+ CurrentState . Foreground = - 1 ;
764+ break ;
749765 }
750- else if ( p1 == 49 )
766+ if ( p2 is >= 30 and <= 37 ) CurrentState . Foreground = p2 ; //前景色
767+ if ( p2 is >= 90 and <= 97 ) CurrentState . Foreground = p2 ; //前景色
768+ if ( p2 is >= 40 and <= 47 ) CurrentState . Background = p2 ; //背景色
769+ if ( p2 is >= 100 and <= 107 ) CurrentState . Background = p2 ; //背景色
770+ if ( p2 == 1 ) CurrentState . IsBold = true ; //加粗
771+ if ( p2 == 4 ) CurrentState . IsUnderLine = true ; //下划
772+ if ( p2 == 7 ) //反转颜色
751773 {
752- //重置背景色
753774 CurrentState . Background = - 1 ;
775+ CurrentState . Foreground = - 1 ;
754776 }
755777 break ;
756778 default :
757779 throw new ArgumentOutOfRangeException ( ) ;
758780 }
759- //指针往后挪
760- ptr += len ;
761781 }
762782
763783 //如果最后还有未处理的文本
0 commit comments