示例#1
0
        private void AttachLevelRunLinks()
        {
            LevelRun current;
            LevelRun next;

            _roller.ReplaceNext(BaseLevelRun.FirstLink);

            for (current = BaseLevelRun; (next = current.Next) != null; current = next)
            {
                current.LastLink.ReplaceNext(next.FirstLink);
            }
            current.LastLink.ReplaceNext(_roller);

            _lastRun = current;
            _level   = BaseLevelRun.Level;
            _sos     = BaseLevelRun.SOR;
            _eos     = (!BaseLevelRun.IsPartialIsolate
                    ? current.EOR
                    : Level.MakeExtremeType(ParagraphLevel, _level)
                        );
        }
示例#2
0
        public void Resolve()
        {
            // Attach level run links to form isolating run.
            AttachLevelRunLinks();
            // Save last subsequent link.
            BidiLink subsequentLink = _lastRun.SubsequentLink;

            // Rules W1-W7
            BidiLink finalLink = ResolveWeakTypes();

            // Rule N0
            ResolveBrackets();
            // Rules N1, N2
            ResolveNeutrals();
            // Rules I1, I2
            ResolveImplicitLevels();

            // Re-attach original links.
            AttachOriginalLinks();
            // Attach last subsequent link with new final link.
            finalLink.ReplaceNext(subsequentLink);
        }