• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http:www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
18 
19 #include <string>
20 
21 #include "base/utils/utf_helper.h"
22 #include "core/components/common/layout/constants.h"
23 #include "core/components/common/properties/color.h"
24 #include "core/components_ng/layout/layout_property.h"
25 #include "core/components_ng/pattern/symbol/constants.h"
26 #include "core/components_ng/pattern/symbol/symbol_effect_options.h"
27 #include "core/components_ng/pattern/symbol/symbol_source_info.h"
28 #include "core/components_ng/pattern/text/text_styles.h"
29 #include "core/components_ng/property/property.h"
30 #include "core/components_v2/inspector/utils.h"
31 #include "frameworks/core/components_ng/pattern/text/advanced_text_layout_property.h"
32 
33 namespace OHOS::Ace::NG {
34 #define ACE_DEFINE_TEXT_PROPERTY_ITEM_WITH_GROUP(group, name, type, changeFlag) \
35     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_GET(group, name, type)                  \
36     void Update##name(const type& value)                                        \
37     {                                                                           \
38         auto& groupProperty = GetOrCreate##group();                             \
39         if (groupProperty->Check##name(value)) {                                \
40             return;                                                             \
41         }                                                                       \
42         groupProperty->Update##name(value);                                     \
43         UpdatePropertyChangeFlag(changeFlag);                                   \
44         propNeedReCreateParagraph_ = true;                                      \
45     }
46 
47 #define ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(name, type, changeFlag) \
48     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_GET(name, type)                  \
49 public:                                                                     \
50     void Update##name(const type& value)                                    \
51     {                                                                       \
52         if (prop##name##_.has_value()) {                                    \
53             if (NearEqual(prop##name##_.value(), value)) {                  \
54                 return;                                                     \
55             }                                                               \
56         }                                                                   \
57         prop##name##_ = value;                                              \
58         UpdatePropertyChangeFlag(changeFlag);                               \
59         propNeedReCreateParagraph_ = true;                                  \
60     }
61 
62 #define ACE_DEFINE_TEXT_PROPERTY_ITEM_IN_ADVANCE_PROPS(name, type, changeFlag)                  \
63 public:                                                                                         \
64     std::optional<type> Get##name() const                                                       \
65     {                                                                                           \
66         CHECK_NULL_RETURN(advancedTextLayoutProperty_, std::nullopt);                           \
67         return advancedTextLayoutProperty_->Get##name();                                        \
68     }                                                                                           \
69     bool Has##name() const                                                                      \
70     {                                                                                           \
71         CHECK_NULL_RETURN(advancedTextLayoutProperty_, false);                                  \
72         return advancedTextLayoutProperty_->Get##name().has_value();                            \
73     }                                                                                           \
74     const type& Get##name##Value() const                                                        \
75     {                                                                                           \
76         return advancedTextLayoutProperty_->Get##name().value();                                \
77     }                                                                                           \
78     const type& Get##name##Value(const type& defaultValue) const                                \
79     {                                                                                           \
80         if (!Has##name()) {                                                                     \
81             return defaultValue;                                                                \
82         }                                                                                       \
83         return advancedTextLayoutProperty_->Get##name().value();                                \
84     }                                                                                           \
85     std::optional<type> Clone##name() const                                                     \
86     {                                                                                           \
87         CHECK_NULL_RETURN(advancedTextLayoutProperty_, std::nullopt);                           \
88         return advancedTextLayoutProperty_->Get##name();                                        \
89     }                                                                                           \
90     void Reset##name()                                                                          \
91     {                                                                                           \
92     CHECK_NULL_VOID(advancedTextLayoutProperty_);                                               \
93         return advancedTextLayoutProperty_->Reset##name();                                      \
94     }                                                                                           \
95     void Update##name(const type& value)                                                        \
96     {                                                                                           \
97         if (!advancedTextLayoutProperty_) {                                                     \
98             advancedTextLayoutProperty_ = AceType::MakeRefPtr<AdvancedTextLayoutProperty>();    \
99         }                                                                                       \
100         CHECK_NULL_VOID(advancedTextLayoutProperty_);                                           \
101         if (Has##name()) {                                                                      \
102             if (NearEqual(Get##name##Value(), value)) {                                         \
103                 return;                                                                         \
104             }                                                                                   \
105         }                                                                                       \
106         advancedTextLayoutProperty_->Set##name(value);                                          \
107         UpdatePropertyChangeFlag(changeFlag);                                                   \
108         propNeedReCreateParagraph_ = true;                                                      \
109     }
110 
111 class InspectorFilter;
112 
113 struct TextMarqueeOptions {
114     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeStart, bool);
115     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeStep, double);
116     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeLoop, int32_t);
117     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeDirection, MarqueeDirection);
118     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeDelay, int32_t);
119     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeFadeout, bool);
120     ACE_DEFINE_PROPERTY_GROUP_ITEM(TextMarqueeStartPolicy, MarqueeStartPolicy);
121 };
122 
123 class ACE_EXPORT TextLayoutProperty : public LayoutProperty {
124     DECLARE_ACE_TYPE(TextLayoutProperty, LayoutProperty);
125 
126 public:
127     TextLayoutProperty() = default;
128 
129     ~TextLayoutProperty() override = default;
130 
Clone()131     RefPtr<LayoutProperty> Clone() const override
132     {
133         auto value = MakeRefPtr<TextLayoutProperty>();
134         Clone(value);
135         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
136         value->propSymbolSourceInfo_ = CloneSymbolSourceInfo();
137         return value;
138     }
139 
Reset()140     void Reset() override
141     {
142         LayoutProperty::Reset();
143         ResetFontStyle();
144         ResetTextLineStyle();
145         ResetContent();
146         ResetSymbolSourceInfo();
147         ResetAdaptFontSizeStep();
148         ResetTextMarqueeOptions();
149         ResetCursorColor();
150         ResetSelectedBackgroundColor();
151         ResetTextColorFlagByUser();
152         propNeedReCreateParagraph_ = true;
153     }
154 
155     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
156 
157     void FromJson(const std::unique_ptr<JsonValue>& json) override;
158 
159     ACE_DEFINE_PROPERTY_GROUP(FontStyle, FontStyle);
160     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontSize, Dimension, PROPERTY_UPDATE_MEASURE);
161     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
162     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextShadow, std::vector<Shadow>, PROPERTY_UPDATE_MEASURE);
163     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, ItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE);
164     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE);
165     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, VariableFontWeight, int32_t, PROPERTY_UPDATE_MEASURE);
166     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
167     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFeature, FONT_FEATURES_LIST, PROPERTY_UPDATE_MEASURE);
168     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
169         FontStyle, TextDecoration, std::vector<TextDecoration>, PROPERTY_UPDATE_MEASURE);
170     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationColor, Color, PROPERTY_UPDATE_MEASURE);
171     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationStyle, TextDecorationStyle, PROPERTY_UPDATE_MEASURE);
172     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextCase, TextCase, PROPERTY_UPDATE_MEASURE);
173     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMinFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
174     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMaxFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
175     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, LetterSpacing, Dimension, PROPERTY_UPDATE_MEASURE);
176     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, EnableVariableFontWeight, bool, PROPERTY_UPDATE_MEASURE);
177     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, LineThicknessScale, float, PROPERTY_UPDATE_MEASURE);
178     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
179         FontForegroudGradiantColor, FontForegroudGradiantColor, PROPERTY_UPDATE_MEASURE);
180     ACE_DEFINE_PROPERTY_GROUP(TextLineStyle, TextLineStyle);
181     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineHeight, Dimension, PROPERTY_UPDATE_MEASURE);
182     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineSpacing, Dimension, PROPERTY_UPDATE_MEASURE);
183     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, IsOnlyBetweenLines, bool, PROPERTY_UPDATE_MEASURE);
184     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, OptimizeTrailingSpace, bool, PROPERTY_UPDATE_MEASURE);
185     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextBaseline, TextBaseline, PROPERTY_UPDATE_MEASURE);
186     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, BaselineOffset, Dimension, PROPERTY_UPDATE_MEASURE);
187     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextAlign, TextAlign, PROPERTY_UPDATE_MEASURE);
188     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextVerticalAlign, TextVerticalAlign, PROPERTY_UPDATE_MEASURE);
189     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextOverflow, TextOverflow, PROPERTY_UPDATE_MEASURE);
190     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, EllipsisMode, EllipsisMode, PROPERTY_UPDATE_MEASURE);
191     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, MaxLines, uint32_t, PROPERTY_UPDATE_MEASURE);
192     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, AllowScale, bool, PROPERTY_UPDATE_MEASURE);
193     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITH_GROUP(
194         TextLineStyle, HeightAdaptivePolicy, TextHeightAdaptivePolicy, PROPERTY_UPDATE_MEASURE);
195     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextIndent, Dimension, PROPERTY_UPDATE_MEASURE);
196     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, WordBreak, WordBreak, PROPERTY_UPDATE_MEASURE);
197     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineBreakStrategy, LineBreakStrategy, PROPERTY_UPDATE_MEASURE);
198     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, HalfLeading, bool, PROPERTY_UPDATE_MEASURE_SELF);
199     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, ParagraphSpacing, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
200 
201     ACE_DEFINE_PROPERTY_GROUP(TextMarqueeOptions, TextMarqueeOptions);
202     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextMarqueeOptions, TextMarqueeStart, bool, PROPERTY_UPDATE_RENDER);
203     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextMarqueeOptions, TextMarqueeStep, double, PROPERTY_UPDATE_RENDER);
204     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextMarqueeOptions, TextMarqueeLoop, int32_t, PROPERTY_UPDATE_RENDER);
205     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
206         TextMarqueeOptions, TextMarqueeDirection, MarqueeDirection, PROPERTY_UPDATE_RENDER);
207     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextMarqueeOptions, TextMarqueeDelay, int32_t, PROPERTY_UPDATE_RENDER);
208     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextMarqueeOptions, TextMarqueeFadeout, bool, PROPERTY_UPDATE_RENDER);
209     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
210         TextMarqueeOptions, TextMarqueeStartPolicy, MarqueeStartPolicy, PROPERTY_UPDATE_RENDER);
211 
212     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(EnableAutoSpacing, bool, PROPERTY_UPDATE_MEASURE);
213     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(Content, std::u16string, PROPERTY_UPDATE_MEASURE);
214     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(ColorShaderStyle, Color, PROPERTY_UPDATE_MEASURE);
215 
216     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(TextEffectStrategy, TextEffectStrategy, PROPERTY_UPDATE_MEASURE_SELF);
217     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextFlipDirection, TextFlipDirection, PROPERTY_UPDATE_NORMAL);
218     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextFlipEnableBlur, bool, PROPERTY_UPDATE_NORMAL);
219     ACE_DEFINE_TEXT_PROPERTY_ITEM_IN_ADVANCE_PROPS(GradientShaderStyle, Gradient, PROPERTY_UPDATE_MEASURE);
220 
221 public:
UpdateContent(const std::string & value)222     void UpdateContent(const std::string& value)
223     {
224         UpdateContent(UtfUtils::Str8DebugToStr16(value));
225     }
226     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CopyOption, CopyOptions, PROPERTY_UPDATE_MEASURE);
227     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AdaptFontSizeStep, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
228     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CursorColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
229     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedBackgroundColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
230     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextSelectableMode, TextSelectableMode, PROPERTY_UPDATE_MEASURE_SELF);
231     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsAnimationNeeded, bool, PROPERTY_UPDATE_NORMAL);
232     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UrlDefualtColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
233     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UrlHoverColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
234     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UrlPressedColor, Color, PROPERTY_UPDATE_MEASURE_SELF);
235 
236     // symbol
237     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITHOUT_GROUP(SymbolSourceInfo, SymbolSourceInfo, PROPERTY_UPDATE_MEASURE);
238     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
239         FontStyle, SymbolColorList, std::vector<Color>, PROPERTY_UPDATE_MEASURE_SELF);
240     ACE_DEFINE_TEXT_PROPERTY_ITEM_WITH_GROUP(
241         FontStyle, SymbolType, SymbolType, PROPERTY_UPDATE_MEASURE_SELF);
242     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
243         FontStyle, SymbolRenderingStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
244     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, SymbolEffectStrategy, uint32_t, PROPERTY_UPDATE_MEASURE_SELF);
245     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(
246         FontStyle, SymbolEffectOptions, SymbolEffectOptions, PROPERTY_UPDATE_MEASURE_SELF);
247     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SymbolShadow, SymbolShadow, PROPERTY_UPDATE_MEASURE_SELF);
248     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShaderStyle, std::vector<SymbolGradient>, PROPERTY_UPDATE_MEASURE_SELF);
249 
250     // fontscale
251     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, MinFontScale, float, PROPERTY_UPDATE_MEASURE);
252     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, MaxFontScale, float, PROPERTY_UPDATE_MEASURE);
253 
GetTextDecorationFirst()254     TextDecoration GetTextDecorationFirst() const
255     {
256         auto decorations = GetTextDecoration();
257         if (!decorations.has_value()) {
258             return TextDecoration::NONE;
259         }
260         return decorations.value().size() > 0 ?
261             decorations.value()[0] : TextDecoration::NONE;
262     }
263 
264     // for XTS inspector
InspectorGetTextFont()265     std::string InspectorGetTextFont() const
266     {
267         TextStyle font;
268         if (GetFontFamily().has_value()) {
269             font.SetFontFamilies(GetFontFamily().value());
270         }
271         if (GetFontSize().has_value()) {
272             font.SetFontSize(GetFontSize().value());
273         }
274         if (GetItalicFontStyle().has_value()) {
275             font.SetFontStyle(GetItalicFontStyle().value());
276         }
277         if (GetFontWeight().has_value()) {
278             font.SetFontWeight(GetFontWeight().value());
279         }
280         return V2::GetTextStyleInJson(font);
281     }
282     std::string GetCopyOptionString() const;
283 
UpdateTextColorByRender(const Color & value)284     void UpdateTextColorByRender(const Color &value)
285     {
286         auto& groupProperty = GetOrCreateFontStyle();
287         if (groupProperty->CheckTextColor(value)) {
288             return;
289         }
290         groupProperty->UpdateTextColor(value);
291         UpdatePropertyChangeFlag(PROPERTY_UPDATE_RENDER);
292     }
293 
OnPropertyChangeMeasure()294     void OnPropertyChangeMeasure() override
295     {
296         propNeedReCreateParagraph_ = true;
297     }
298 
GetIsLoopAnimation()299     bool GetIsLoopAnimation() const
300     {
301         return isLoopAnimation_;
302     }
303 
SetIsLoopAnimation(bool isLoopAnimation)304     void SetIsLoopAnimation(bool isLoopAnimation)
305     {
306         isLoopAnimation_ = isLoopAnimation;
307     }
308 
309     // Used to mark whether a paragraph needs to be recreated for Measure.
310     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_GET(NeedReCreateParagraph, bool);
311 
312     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextColorFlagByUser, bool, PROPERTY_UPDATE_NORMAL);
313 
314     std::string GetTextMarqueeOptionsString() const;
315     void UpdateMarqueeOptionsFromJson(const std::unique_ptr<JsonValue>& json);
316 
317 protected:
Clone(RefPtr<LayoutProperty> property)318     void Clone(RefPtr<LayoutProperty> property) const override
319     {
320         auto value = DynamicCast<TextLayoutProperty>(property);
321         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
322         value->propFontStyle_ = CloneFontStyle();
323         value->propTextLineStyle_ = CloneTextLineStyle();
324         value->propContent_ = CloneContent();
325         value->propAdaptFontSizeStep_ = CloneAdaptFontSizeStep();
326         value->propTextMarqueeOptions_ = CloneTextMarqueeOptions();
327         value->propCursorColor_ = CloneCursorColor();
328         value->propSelectedBackgroundColor_ = CloneSelectedBackgroundColor();
329         value->propNeedReCreateParagraph_ = true;
330     }
331 
332 private:
333     ACE_DISALLOW_COPY_AND_MOVE(TextLayoutProperty);
334 
335     bool isLoopAnimation_ = false;
336     RefPtr<AdvancedTextLayoutProperty> advancedTextLayoutProperty_;
337 };
338 } // namespace OHOS::Ace::NG
339 
340 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
341