OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 if (BidiContext* parentContext = toContext->parent()) | 426 if (BidiContext* parentContext = toContext->parent()) |
427 toContext = parentContext; | 427 toContext = parentContext; |
428 } else { | 428 } else { |
429 Direction direction = (embedding.direction() == RightToLeftEmbedding
|| embedding.direction() == RightToLeftOverride) ? RightToLeft : LeftToRight; | 429 Direction direction = (embedding.direction() == RightToLeftEmbedding
|| embedding.direction() == RightToLeftOverride) ? RightToLeft : LeftToRight; |
430 bool override = embedding.direction() == LeftToRightOverride || embe
dding.direction() == RightToLeftOverride; | 430 bool override = embedding.direction() == LeftToRightOverride || embe
dding.direction() == RightToLeftOverride; |
431 unsigned char level = toContext->level(); | 431 unsigned char level = toContext->level(); |
432 if (direction == RightToLeft) | 432 if (direction == RightToLeft) |
433 level = nextGreaterOddLevel(level); | 433 level = nextGreaterOddLevel(level); |
434 else | 434 else |
435 level = nextGreaterEvenLevel(level); | 435 level = nextGreaterEvenLevel(level); |
436 if (level < 61) | 436 if (level < BidiContext::kMaxLevel) |
437 toContext = BidiContext::create(level, direction, override, embe
dding.source(), toContext.get()); | 437 toContext = BidiContext::create(level, direction, override, embe
dding.source(), toContext.get()); |
438 } | 438 } |
439 } | 439 } |
440 | 440 |
441 unsigned char toLevel = toContext->level(); | 441 unsigned char toLevel = toContext->level(); |
442 | 442 |
443 if (toLevel > fromLevel) | 443 if (toLevel > fromLevel) |
444 raiseExplicitEmbeddingLevel(fromLevel % 2 ? RightToLeft : LeftToRight, t
oLevel % 2 ? RightToLeft : LeftToRight); | 444 raiseExplicitEmbeddingLevel(fromLevel % 2 ? RightToLeft : LeftToRight, t
oLevel % 2 ? RightToLeft : LeftToRight); |
445 else if (toLevel < fromLevel) | 445 else if (toLevel < fromLevel) |
446 lowerExplicitEmbeddingLevel(fromLevel % 2 ? RightToLeft : LeftToRight); | 446 lowerExplicitEmbeddingLevel(fromLevel % 2 ? RightToLeft : LeftToRight); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 case EuropeanNumber: | 490 case EuropeanNumber: |
491 // fall through | 491 // fall through |
492 default: | 492 default: |
493 m_status.last = dirCurrent; | 493 m_status.last = dirCurrent; |
494 } | 494 } |
495 } | 495 } |
496 | 496 |
497 template <class Iterator, class Run> | 497 template <class Iterator, class Run> |
498 inline void BidiResolver<Iterator, Run>::reorderRunsFromLevels() | 498 inline void BidiResolver<Iterator, Run>::reorderRunsFromLevels() |
499 { | 499 { |
500 unsigned char levelLow = 128; | 500 unsigned char levelLow = BidiContext::kMaxLevel; |
501 unsigned char levelHigh = 0; | 501 unsigned char levelHigh = 0; |
502 for (Run* run = m_runs.firstRun(); run; run = run->next()) { | 502 for (Run* run = m_runs.firstRun(); run; run = run->next()) { |
503 levelHigh = std::max(run->level(), levelHigh); | 503 levelHigh = std::max(run->level(), levelHigh); |
504 levelLow = std::min(run->level(), levelLow); | 504 levelLow = std::min(run->level(), levelLow); |
505 } | 505 } |
506 | 506 |
507 // This implements reordering of the line (L2 according to Bidi spec): | 507 // This implements reordering of the line (L2 according to Bidi spec): |
508 // http://unicode.org/reports/tr9/#L2 | 508 // http://unicode.org/reports/tr9/#L2 |
509 // L2. From the highest level found in the text to the lowest odd level on e
ach line, | 509 // L2. From the highest level found in the text to the lowest odd level on e
ach line, |
510 // reverse any contiguous sequence of characters that are at that level or h
igher. | 510 // reverse any contiguous sequence of characters that are at that level or h
igher. |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 template<class Iterator, class Run> | 972 template<class Iterator, class Run> |
973 MidpointState<Iterator> BidiResolver<Iterator, Run>::midpointStateForIsolatedRun
(Run* run) | 973 MidpointState<Iterator> BidiResolver<Iterator, Run>::midpointStateForIsolatedRun
(Run* run) |
974 { | 974 { |
975 return m_midpointStateForIsolatedRun.take(run); | 975 return m_midpointStateForIsolatedRun.take(run); |
976 } | 976 } |
977 | 977 |
978 | 978 |
979 } // namespace WebCore | 979 } // namespace WebCore |
980 | 980 |
981 #endif // BidiResolver_h | 981 #endif // BidiResolver_h |
OLD | NEW |