private string _FormatColumns(int width, LoTVDiv Columns) { string Out = ""; string[] Arr = (string[])Columns.LoTVDivReturnData(); int Cols = Arr.Length; //Количество колонок int MaxLength = 0; //Макс длина колонки int MaxCol = 0; if (Cols != 1) for (int i = 0; i < Cols; i++) { int Length = Arr[i].Length; if (Length >= MaxLength) { MaxLength = Length; MaxCol = i; } } switch (Cols) { case 1: return __FormatText(Arr[0], width); case 2: case 3: int Text1 = 0, SpaceCount = 0, Text2 = 0; __GetTextSpaceRatio(out Text1, out Text2, out SpaceCount, width, Cols); //Получение соотношения текста и пробелов int Mult; //Кол-во строк string Arr0, Arr1; string Spaces = ""; for (int i = 0; i < SpaceCount; i++) Spaces += ' '; Arr0 = Arr[0]; Arr1 = Arr[1]; if (Cols == 2) { int Text2Length = 0; int MinCol = 1 - MaxCol; bool Flag = MaxCol == 0; if (Flag) while (Arr0.Length % Text1 != 0) //Добиваем с самой большой длиной до кратного TextN Arr0 += ' '; else while (Arr1.Length % Text2 != 0) Arr1 += ' '; MaxLength = (Flag ? Arr0 : Arr1).Length; Mult = MaxLength / (MaxCol == 0 ? Text1 : Text2); //Получает мультипликатор кратности Text2Length = Mult * (MaxCol == 0 ? Text2 : Text1); //Получаем кратную длину для второго текста, зависящую от ширины формата if (Flag) while (Arr1.Length != Text2Length) //Добиваем в другую сторону Arr1 += ' '; else while (Arr0.Length != Text2Length) Arr0 += ' '; for (int i = 0; i < Mult; i++) Out += Arr0.Substring(i * Text1, Text1) + Spaces + Arr1.Substring(i * Text2, Text2) + '\n'; } else { string[] NewArr = new string[] { Arr0, Arr1, Arr[2] }; while (NewArr[MaxCol].Length % ((MaxCol == 0 || MaxCol == 2) ? Text1 : Text2) != 0) { NewArr[MaxCol] += ' '; MaxLength++; } Mult = MaxLength / ((MaxCol == 0 || MaxCol == 2) ? Text1 : Text2); //Получает мультипликатор кратности int Text2Length = Mult * ((MaxCol == 0 || MaxCol == 2) ? Text2 : Text1); if (MaxCol == 1) { while (NewArr[0].Length != Text2Length) NewArr[0] += ' '; while (NewArr[2].Length != Text2Length) NewArr[2] += ' '; } else { while (NewArr[1].Length != Text2Length) NewArr[1] += ' '; if (MaxCol == 0) while (NewArr[2].Length != MaxLength) NewArr[2] += ' '; else while (NewArr[0].Length != MaxLength) NewArr[0] += ' '; } for (int i = 0; i < Mult; i++) Out += NewArr[0].Substring(i * Text1, Text1) + Spaces + NewArr[1].Substring(i * Text2, Text2) + Spaces + NewArr[2].Substring(i * Text1, Text1) + '\n'; } return Out; } return Out; }
//======Закрытые методы private string _FormatArticle(int width, LoTVDiv Article) { string Out = " "; Out = __FormatText(Out + Article.LoTVDivReturnData(), width); return Out; }
private string _FormatColumns(int width, LoTVDiv Columns) { string Out = ""; string[] Arr = (string[])Columns.LoTVDivReturnData(); int Cols = Arr.Length; //Количество колонок int MaxLength = 0; //Макс длина колонки int MaxCol = 0; if (Cols != 1) for (int i = 0; i < Cols; i++) { int Length = Arr[i].Length; if (Length >= MaxLength) //Так сложно чтобы обращаться к методу N раз, а не 2N { MaxLength = Length; MaxCol = i; } } switch (Cols) { case 1: return __FormatText(Arr[0], width); case 2: case 3: int Text1 = 0, SpaceCount = 0, Text2 = 0; __GetTextSpaceRatio(out Text1, out Text2, out SpaceCount, width, Cols); //========================Здесь творится самая главная магия int Mult; //Кол-во строк string Arr0, Arr1; string Spaces = ""; for (int i = 0; i < SpaceCount; i++) Spaces += ' '; Arr0 = Arr[0]; Arr1 = Arr[1]; //Тут чорная магия для неизменения блоков данных //MaxCol = Arr0.Length >= Arr1.Length ? 0 : 1; if (Cols == 2) { int Text2Length = 0; int MinCol = 1 - MaxCol; bool Flag = MaxCol == 0; if (Flag) while (Arr0.Length % Text1 != 0) //Добиваем с самой большой длиной до кратного TextN Arr0 += ' '; else while (Arr1.Length % Text2 != 0) Arr1 += ' '; MaxLength = (Flag ? Arr0 : Arr1).Length; //Чорная магия Mult = MaxLength / (MaxCol == 0 ? Text1 : Text2); //Получает мультипликатор кратности Text2Length = Mult * (MaxCol == 0 ? Text2 : Text1); //Путем хитрых вычислений получаем кратную длину для второго текста, зависящую от ширины формата if (Flag) while (Arr1.Length != Text2Length) //Добиваем в другую сторону Arr1 += ' '; else while (Arr0.Length != Text2Length) Arr0 += ' '; for (int i = 0; i < Mult; i++) Out += Arr0.Substring(i * Text1, Text1) + Spaces + Arr1.Substring(i * Text2, Text2) + '\n'; //Ну тутай опять же магия } else { string[] NewArr = new string[] {Arr0, Arr1, Arr[2] }; while (NewArr[MaxCol].Length % ((MaxCol == 0 || MaxCol == 2) ? Text1 : Text2) != 0) //Брррррррррр { NewArr[MaxCol] += ' '; MaxLength++; } Mult = MaxLength / ((MaxCol == 0 || MaxCol == 2) ? Text1 : Text2); //Получает мультипликатор кратности int Text2Length = Mult * ((MaxCol == 0 || MaxCol == 2) ? Text2 : Text1); if (MaxCol == 1) { while (NewArr[0].Length != Text2Length) NewArr[0] += ' '; while (NewArr[2].Length != Text2Length) NewArr[2] += ' '; } else { while (NewArr[1].Length != Text2Length) NewArr[1] += ' '; if (MaxCol == 0) while (NewArr[2].Length != MaxLength) NewArr[2] += ' '; else while (NewArr[0].Length != MaxLength) NewArr[0] += ' '; } for (int i = 0; i < Mult; i++) Out += NewArr[0].Substring(i * Text1, Text1) + Spaces + NewArr[1].Substring(i * Text2, Text2) + Spaces + NewArr[2].Substring(i * Text1, Text1) + '\n'; //Ну тутай опять же магия } return Out; } return Out; }
private string _FormatList(int width, LoTVDiv List) { string Out = ""; string[] Arr = (string[])List.LoTVDivReturnData(); int Cols = Arr.Length; for (int i = 0; i < Cols; i++) { if (Arr[i].Length + 3 < width) Out += i + 1 + ". " + Arr[i] + '\n'; else { string Row = i + 1 + ". " + Arr[i]; int Mult = Row.Length / width + 1; for (int k = 1; k < Mult; k++) { Row = Row.Insert(width * k + k - 1, "\n"); //k добавляется как дополнительные \n, поэтому -1 Mult = Row.Length / width + 1; } Out += Row + '\n'; } } return Out + '\n'; }
private string _FormatList(LoTVDiv List) { string Out = " "; string[] Arr = (string[])List.LoTVDivReturnData(); int Cols = Arr.Length; for (int i = 0; i < Cols; i++) Out += i + 1 + ". " + Arr[i] + " "; //!!!!! return Out; }