1 /*
2 * Copyright (c) 2021 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 #include "core/components/declaration/common/declaration_creator_manager.h"
17
18 #include "core/components/declaration/badge/badge_declaration.h"
19 #include "core/components/declaration/button/button_declaration.h"
20 #include "core/components/declaration/canvas/canvas_declaration.h"
21 #include "core/components/declaration/clock/clock_declaration.h"
22 #include "core/components/declaration/div/div_declaration.h"
23 #include "core/components/declaration/image/image_animator_declaration.h"
24 #include "core/components/declaration/input/input_declaration.h"
25 #include "core/components/declaration/piece/piece_declaration.h"
26 #include "core/components/declaration/qrcode/qrcode_declaration.h"
27 #include "core/components/declaration/richtext/rich_text_declaration.h"
28 #include "core/components/declaration/search/search_declaration.h"
29 #include "core/components/declaration/span/span_declaration.h"
30 #include "core/components/declaration/svg/svg_animate_declaration.h"
31 #include "core/components/declaration/svg/svg_base_declaration.h"
32 #include "core/components/declaration/svg/svg_circle_declaration.h"
33 #include "core/components/declaration/svg/svg_declaration.h"
34 #include "core/components/declaration/svg/svg_ellipse_declaration.h"
35 #include "core/components/declaration/svg/svg_fe_colormatrix_declaration.h"
36 #include "core/components/declaration/svg/svg_fe_composite_declaration.h"
37 #include "core/components/declaration/svg/svg_fe_gaussianblur_declaration.h"
38 #include "core/components/declaration/svg/svg_fe_offset_declaration.h"
39 #include "core/components/declaration/svg/svg_filter_declaration.h"
40 #include "core/components/declaration/svg/svg_gradient_declaration.h"
41 #include "core/components/declaration/svg/svg_line_declaration.h"
42 #include "core/components/declaration/svg/svg_mask_declaration.h"
43 #include "core/components/declaration/svg/svg_path_declaration.h"
44 #include "core/components/declaration/svg/svg_polygon_declaration.h"
45 #include "core/components/declaration/svg/svg_rect_declaration.h"
46 #include "core/components/declaration/svg/svg_stop_declaration.h"
47 #include "core/components/declaration/svg/svg_text_declaration.h"
48 #include "core/components/declaration/svg/svg_text_path_declaration.h"
49 #include "core/components/declaration/swiper/swiper_declaration.h"
50 #include "core/components/declaration/text/text_declaration.h"
51 #include "core/components/declaration/textarea/textarea_declaration.h"
52 #include "core/components/declaration/web/web_declaration.h"
53 #include "core/components/declaration/xcomponent/xcomponent_declaration.h"
54
55 namespace OHOS::Ace {
56
57 DeclarationCreatorManager::DeclarationCreatorManager() = default;
58 DeclarationCreatorManager::~DeclarationCreatorManager() = default;
59
60 template<class T>
DeclarationCreator(const std::string & tag)61 RefPtr<Declaration> DeclarationCreator(const std::string& tag)
62 {
63 return AceType::MakeRefPtr<T>();
64 }
65
CreateDeclaration(const std::string & tag)66 const RefPtr<Declaration> DeclarationCreatorManager::CreateDeclaration(const std::string& tag)
67 {
68 static const LinearMapNode<std::function<RefPtr<Declaration>(const std::string&)>> declarationCreators[] = {
69 { DOM_NODE_TAG_ANIMATE, DeclarationCreator<SvgAnimateDeclaration> },
70 { DOM_NODE_TAG_ANIMATE_MOTION, DeclarationCreator<SvgAnimateDeclaration> },
71 { DOM_NODE_TAG_ANIMATE_TRANSFORM, DeclarationCreator<SvgAnimateDeclaration> },
72 { DOM_NODE_TAG_BADGE, DeclarationCreator<BadgeDeclaration> },
73 { DOM_NODE_TAG_BUTTON, DeclarationCreator<ButtonDeclaration> },
74 { DOM_NODE_TAG_CANVAS, DeclarationCreator<CanvasDeclaration> },
75 { DOM_NODE_TAG_CIRCLE, DeclarationCreator<SvgCircleDeclaration> },
76 { DOM_NODE_TAG_CLOCK, DeclarationCreator<ClockDeclaration> },
77 { DOM_NODE_TAG_ELLIPSE, DeclarationCreator<SvgEllipseDeclaration> },
78 { DOM_NODE_TAG_FE_COLORMATRIX, DeclarationCreator<SvgFeColorMatrixDeclaration> },
79 { DOM_NODE_TAG_FE_COMPOSITE, DeclarationCreator<SvgFeCompositeDeclaration> },
80 { DOM_NODE_TAG_FE_GAUSSIANBLUR, DeclarationCreator<SvgFeGaussianBlurDeclaration> },
81 { DOM_NODE_TAG_FE_OFFSET, DeclarationCreator<SvgFeOffsetDeclaration> },
82 { DOM_NODE_TAG_FILTER, DeclarationCreator<SvgFilterDeclaration> },
83 { DOM_NODE_TAG_G, DeclarationCreator<SvgDeclaration> },
84 { DOM_NODE_TAG_LINEAR_GRADIENT, DeclarationCreator<SvgGradientDeclaration> },
85 { DOM_NODE_TAG_IMAGE_ANIMATOR, DeclarationCreator<ImageAnimatorDeclaration> },
86 { DOM_NODE_TAG_LABEL, DeclarationCreator<TextDeclaration> },
87 { DOM_NODE_TAG_LINE, DeclarationCreator<SvgLineDeclaration> },
88 { DOM_NODE_TAG_MASK, DeclarationCreator<SvgMaskDeclaration> },
89 { DOM_NODE_TAG_PATH, DeclarationCreator<SvgPathDeclaration> },
90 { DOM_NODE_TAG_PIECE, DeclarationCreator<PieceDeclaration> },
91 { DOM_NODE_TAG_POLYGON, DeclarationCreator<SvgPolygonDeclaration> },
92 { DOM_NODE_TAG_POLYLINE, DeclarationCreator<SvgPolygonDeclaration> },
93 { DOM_NODE_TAG_QRCODE, DeclarationCreator<QrcodeDeclaration> },
94 { DOM_NODE_TAG_RADIAL_GRADIENT, DeclarationCreator<SvgGradientDeclaration> },
95 { DOM_NODE_TAG_RECT, DeclarationCreator<SvgRectDeclaration> },
96 { DOM_NODE_TAG_RICH_TEXT, DeclarationCreator<RichTextDeclaration> },
97 { DOM_NODE_TAG_SPAN, DeclarationCreator<SpanDeclaration> },
98 { DOM_NODE_TAG_STOP, DeclarationCreator<SvgStopDeclaration> },
99 { DOM_NODE_TAG_SVG, DeclarationCreator<SvgDeclaration> },
100 { DOM_NODE_TAG_SVG_TEXT, DeclarationCreator<SvgTextDeclaration> },
101 { DOM_NODE_TAG_SWIPER, DeclarationCreator<SwiperDeclaration> },
102 { DOM_NODE_TAG_TEXT, DeclarationCreator<TextDeclaration> },
103 { DOM_NODE_TAG_TEXT_PATH, DeclarationCreator<SvgTextPathDeclaration> },
104 { DOM_NODE_TAG_TSPAN, DeclarationCreator<SvgTextDeclaration> },
105 { DOM_NODE_TAG_USE, DeclarationCreator<SvgDeclaration> },
106 { DOM_NODE_TAG_WEB, DeclarationCreator<WebDeclaration> },
107 { DOM_NODE_TAG_XCOMPONENT, DeclarationCreator<XComponentDeclaration> },
108 };
109 int64_t creatorIndex = BinarySearchFindIndex(declarationCreators, ArraySize(declarationCreators), tag.c_str());
110 RefPtr<Declaration> declaration = AceType::MakeRefPtr<Declaration>();
111 if (creatorIndex >= 0) {
112 declaration = declarationCreators[creatorIndex].value(tag);
113 }
114 declaration->Init();
115 return declaration;
116 }
117
118 } // namespace OHOS::Ace
119