Esempio n. 1
0
 private bool GetRunContainingCp(int index, out OrderedTextRun run)
 {
     foreach (var ordered in ReorderRuns())
     {
         if (index >= ordered.CpFirst && index < ordered.CpFirst + ordered.Range.Length && !(ordered.TextRun is TextEndOfLine))
         {
             run = ordered;
             return(true);
         }
     }
     run = default(OrderedTextRun);
     return(false);
 }
Esempio n. 2
0
            private List <OrderedTextRun> ReorderRuns()
            {
                var result           = new List <OrderedTextRun> ();
                var store            = _fullText.TextStore;
                var settings         = store.Settings;
                int cpFirst          = store.CpFirst;
                int pos              = cpFirst;
                int remaining_length = Length;

                // FIXME: Fetch bidi levels, reset to 0 for trailing whitespace

                while (remaining_length > 0)
                {
                    TextRun run;
                    int     runLength;
                    CharacterBufferRange chars = settings.FetchTextRun(pos, cpFirst, out run, out runLength);

                    if (runLength > remaining_length)
                    {
                        runLength = remaining_length;
                        chars     = new CharacterBufferRange(chars, 0, runLength);
                    }

                    // FIXME: determine bidi level and shorten runLength to keep bidi level constant

                    var ordered = new OrderedTextRun();
                    ordered.BidiLevel = 0;
                    ordered.TextRun   = run;
                    ordered.Range     = chars;
                    ordered.CpFirst   = pos;
                    result.Add(ordered);

                    remaining_length -= runLength;
                    pos += runLength;
                }

                // FIXME: reverse bidi levels

                return(result);
            }