private void cmdBidiTest_Click(object sender, EventArgs e) { //string text = "hello مرحبا a123"; //string text = "مرحبا "; //hello //string text = "حب"; //love string text = "شمس";//sun //string text = "یہ ایک (car) ہے۔"; //this is a car char[] buffer = text.ToCharArray(); Line line1 = new Line(text); RunAdapter runAdapter = new RunAdapter(); RunAgent agent = runAdapter.Agent; runAdapter.LoadLine(line1); while (runAdapter.MoveNext()) { int offset = agent.Offset; byte level = agent.Level; int len = agent.Length; bool rtl = agent.IsRightToLeft; //iter each run-span string tt = new string(buffer, offset, len); System.Diagnostics.Debug.WriteLine(tt); } //static RunAdapter runAdapter = new RunAdapter(); //static MirrorLocator mirrorLocator = new MirrorLocator(); //static void Main(string[] args) //{ // string text = "یہ ایک (car) ہے۔"; // Paragraph paragraph = new Paragraph(text, BaseDirection.AutoLeftToRight); // Line line = new Line(paragraph, 0, text.Length); // runAdapter.LoadLine(line); // foreach (RunAgent agent in runAdapter) // { // Console.WriteLine("Run Level: " + agent.Level); // Console.WriteLine("Run Offset: " + agent.Offset); // Console.WriteLine("Run Length: " + agent.Length); // Console.WriteLine("Run Direction: " + (agent.IsRightToLeft ? "RTL" : "LTR")); // Console.WriteLine(); // } // mirrorLocator.LoadLine(line); // foreach (MirrorAgent agent in mirrorLocator) // { // Console.WriteLine("Mirror Location: " + agent.Index); // Console.WriteLine("Mirror Unicode: " + agent.Mirror); // Console.WriteLine(); // } //} }
internal override void BreakWord(WordVisitor visitor, char[] charBuff, int startAt, int len) { //use custom parsing visitor.State = VisitorState.Parsing; RunAgent agent = _runAdapter.Agent; //collect arabic char and break int arabic_len = 0; int lim = startAt + len; for (int i = startAt; i < lim; ++i) { char c = charBuff[i]; if (IsArabicChar(c)) { arabic_len++; } else { break; } } // if (arabic_len == 0) { visitor.State = VisitorState.OutOfRangeChar; return; } visitor.SpanBreakInfo = _breakInfo; //only collect char Line line1 = new Line(new string(charBuff, startAt, arabic_len)); _runAdapter.LoadLine(line1); while (_runAdapter.MoveNext()) { int offset = agent.Offset; byte level = agent.Level; int sp_len = agent.Length; bool rtl = agent.IsRightToLeft; if (rtl) { //temp fix visitor.AddWordBreak_AndSetCurrentIndex(startAt + sp_len, WordKind.Text); } else { //use other engine break; } //iter each run-span //string tt = new string(buffer, offset, len); //System.Diagnostics.Debug.WriteLine(tt); } if (visitor.CurrentIndex == startAt + len) { visitor.State = VisitorState.End; } else { //continue to other parser visitor.State = VisitorState.OutOfRangeChar; } }