/// <summary> /// 指し手行を出力します。 /// </summary> private void WriteMakeKif(TextWriter writer, MoveNode node, Board board, bool hasVariation) { var lmove = board.ConvertLiteralFromMove(node.Move, true); if (lmove == null || !lmove.Validate()) { Log.Error("指し手'{0}'を出力できませんでした。", node.Move); return; } if (lmove.SpecialMoveType == SpecialMoveType.None) { // 半角文字相当の文字数で空白の数を計算します。 var moveText = Stringizer.ToString(lmove, MoveTextStyle.KifFile); var hanLen = moveText.HankakuLength(); writer.WriteLine( @"{0,4} {1}{2} ({3:mm\:ss} / {4:hh\:mm\:ss}){5}", node.MoveCount, moveText, new string(' ', Math.Max(0, 14 - hanLen)), node.Duration, node.TotalDuration, (hasVariation ? "+" : "")); } else { // とりあえず空にしておく } }
/// <summary> /// ki2形式の指し手を出力します。 /// </summary> private void WriteMoveNodeKi2(TextWriter writer, MoveNode node, Board board) { // 先頭ノードは指し手がありませんが // コメントは存在することがあります。 WriteComment(writer, node); var moveList = KifuObject.Convert2List(node); var lineList = board.ConvertLiteralListFromMove(moveList, false) .Where(_ => _ != null && _.Validate()) .Where(_ => _.SpecialMoveType == SpecialMoveType.None) .Select(_ => Stringizer.ToString(_, MoveTextStyle.Normal)) .TakeBy(6) .Select(_ => string.Join(" ", _.ToArray())); // 各指し手行を出力します。 foreach (var line in lineList) { writer.WriteLine(line); } }
public static string Join <T>(ICollection <T> list, string separator, Stringizer <T> stringize) { var needsep = false; var s = new StringBuilder(list.Count * 64); foreach (var value in list) { if (needsep) { s.Append(separator); } else { needsep = true; } s.Append(stringize(value)); } return(s.ToString()); }
public DropDownList(ICollection <T> items, Stringizer stringizer) { this.items = new List <T>(items); this.stringizer = stringizer; this.maxOpenedListVisibleItemsCount = 6; }