Skip to content

Commit e2f8395

Browse files
committed
use isolation
1 parent 849061c commit e2f8395

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

fluent.runtime/fluent/runtime/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __init__(self, locales, functions=None, use_isolating=True):
3535
self._use_isolating = use_isolating
3636
self._messages_and_terms = {}
3737
self._compiled = {}
38-
self._compiler = Compiler()
38+
self._compiler = Compiler(use_isolating=use_isolating)
3939
self._babel_locale = self._get_babel_locale()
4040
self._plural_form = babel.plural.to_python(self._babel_locale.plural_form)
4141

fluent.runtime/fluent/runtime/prepare.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55

66
class Compiler(object):
7-
def __init__(self, bundle=None):
7+
def __init__(self, use_isolating=False, bundle=None):
88
self.bundle = None
9+
self.use_isolating = use_isolating
910

1011
def __call__(self, item):
1112
if isinstance(item, FTL.BaseNode):
@@ -28,11 +29,19 @@ def compile_generic(self, nodename, **kwargs):
2829
return getattr(resolver, nodename)(**kwargs)
2930

3031
def compile_Placeable(self, _, expression, **kwargs):
32+
if self.use_isolating:
33+
return resolver.IsolatingPlaceable(expression=expression, **kwargs)
3134
if isinstance(expression, resolver.Literal):
3235
return expression
3336
return resolver.Placeable(expression=expression, **kwargs)
3437

3538
def compile_Pattern(self, _, elements, **kwargs):
39+
if (
40+
len(elements) == 1 and
41+
isinstance(elements[0], resolver.IsolatingPlaceable)
42+
):
43+
# Don't isolate isolated placeables
44+
return elements[0].expression
3645
if any(
3746
not isinstance(child, resolver.Literal)
3847
for child in elements

fluent.runtime/fluent/runtime/resolver.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,15 @@ def __call__(self, env):
140140
return FluentNone()
141141
self.dirty = True
142142
retval = ''.join(
143-
self.resolve(element(env), env) for element in self.elements
143+
resolve(element(env), env) for element in self.elements
144144
)
145145
self.dirty = False
146146
return retval
147147

148-
def resolve(self, fluentish, env):
149-
if isinstance(fluentish, (FluentType, FluentNumber)):
150-
return fluentish.format(env.context._babel_locale)
151-
return fluentish
148+
def resolve(fluentish, env):
149+
if isinstance(fluentish, (FluentType, FluentNumber)):
150+
return fluentish.format(env.context._babel_locale)
151+
return fluentish
152152

153153

154154
class TextElement(FTL.TextElement, Literal):
@@ -161,6 +161,12 @@ def __call__(self, env):
161161
return self.expression(env)
162162

163163

164+
class IsolatingPlaceable(FTL.Placeable, BaseResolver):
165+
def __call__(self, env):
166+
inner = self.expression(env)
167+
return "\u2068" + resolve(inner, env) + "\u2069"
168+
169+
164170
class StringLiteral(FTL.StringLiteral, Literal):
165171
def __call__(self, env):
166172
return self.value

0 commit comments

Comments
 (0)