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 |