| OLD | NEW |
| (Empty) |
| 1 // | |
| 2 // Copyright 2014 Google Inc. All rights reserved. | |
| 3 // | |
| 4 // Use of this source code is governed by a BSD-style | |
| 5 // license that can be found in the LICENSE file or at | |
| 6 // https://developers.google.com/open-source/licenses/bsd | |
| 7 // | |
| 8 | |
| 9 part of charted.core.utils; | |
| 10 | |
| 11 /// Charts are always drawn with LTR context. | |
| 12 BidiFormatter _bidiFormatter = new BidiFormatter.LTR(); | |
| 13 | |
| 14 /// Fix direction of HTML using <span dir="..."> for RTL when required | |
| 15 fixMarkupDirection(String markup) => | |
| 16 _bidiFormatter.wrapWithSpan(markup, isHtml:true); | |
| 17 | |
| 18 /// Fix direction of text using unicode markers for RTL when required | |
| 19 /// This is a simplified version of BidiFormatter.wrapWithUnicode that | |
| 20 /// is meant to be used for small labels only (Eg: axis ticks). | |
| 21 String fixSimpleTextDirection(String text) { | |
| 22 TextDirection direction = estimateDirectionOfSimpleText(text); | |
| 23 if (TextDirection.RTL == direction) { | |
| 24 var marker = direction == TextDirection.RTL ? Bidi.RLE : Bidi.LRE; | |
| 25 return "${marker}$text${Bidi.PDF}"; | |
| 26 } | |
| 27 return text; | |
| 28 } | |
| 29 | |
| 30 /// Estimates direction of simple text. | |
| 31 /// This is a simplified version of Bidi.estimateDirectionOfText | |
| 32 var _spaceRegExp = new RegExp(r'\s+'); | |
| 33 var _digitsRegExp = new RegExp(r'\d'); | |
| 34 TextDirection estimateDirectionOfSimpleText(String text) { | |
| 35 var rtlCount = 0, | |
| 36 total = 0, | |
| 37 hasWeaklyLtr = false, | |
| 38 tokens = text.split(_spaceRegExp); | |
| 39 | |
| 40 for (int i = 0, len = tokens.length; i < len; ++i) { | |
| 41 var token = tokens.elementAt(i); | |
| 42 if (Bidi.startsWithRtl(token)) { | |
| 43 rtlCount++; | |
| 44 total++; | |
| 45 } else if (Bidi.hasAnyLtr(token)) { | |
| 46 total++; | |
| 47 } else if (_digitsRegExp.hasMatch(token)) { | |
| 48 hasWeaklyLtr = true; | |
| 49 } | |
| 50 } | |
| 51 if (total == 0) { | |
| 52 return hasWeaklyLtr ? TextDirection.LTR : TextDirection.UNKNOWN; | |
| 53 } else { | |
| 54 return rtlCount > 0.4 * total ? TextDirection.RTL : TextDirection.LTR; | |
| 55 } | |
| 56 } | |
| OLD | NEW |