CN110716746B - 将rn样式代码转换为小程序样式代码的方法及装置 - Google Patents

将rn样式代码转换为小程序样式代码的方法及装置 Download PDF

Info

Publication number
CN110716746B
CN110716746B CN201910828490.7A CN201910828490A CN110716746B CN 110716746 B CN110716746 B CN 110716746B CN 201910828490 A CN201910828490 A CN 201910828490A CN 110716746 B CN110716746 B CN 110716746B
Authority
CN
China
Prior art keywords
style
platform
node
format
applet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910828490.7A
Other languages
English (en)
Other versions
CN110716746A (zh
Inventor
朴惠姝
邓竹立
彭飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuba Co Ltd
Original Assignee
Wuba Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuba Co Ltd filed Critical Wuba Co Ltd
Priority to CN201910828490.7A priority Critical patent/CN110716746B/zh
Publication of CN110716746A publication Critical patent/CN110716746A/zh
Application granted granted Critical
Publication of CN110716746B publication Critical patent/CN110716746B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开一种将RN样式代码转换为小程序样式代码的方法及装置,该方法包括:若目标AST的视图节点中包括未封装格式的平台样式、且该视图节点引用目标AST的样式节点中封装格式的非平台特有的变量样式,则将该视图节点所引用的封装格式的非平台特有的变量样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第一类节点;若该视图节点中包括未封装格式的平台样式、且该视图节点引用目标AST的样式节点中封装格式的平台样式,则将该视图节点所引用的封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第二类节点;基于所生成的小程序节点,生成小程序的布局文件。

Description

将RN样式代码转换为小程序样式代码的方法及装置
技术领域
本发明涉及信息处理技术领域,特别是涉及一种将RN样式代码转换为小程序样式代码的方法及装置。
背景技术
在移动开发领域,自从Facebook推出React Native(简称RN)跨平台移动应用开发框架后,基于JavaScript的跨平台开发逐渐成为移动开发领域中的热门领域。RN推出不久,国内一些互联网公司基于本公司的平台,例如腾讯公司基于微信平台,推出了小程序开发框架,开发者可以在小程序开发框架下,开发能够在微信中运行的小程序。目前,虽然RN代码和小程序代码均是使用JavaScript语言开发的,但是由于语法规则彼此不同,因此开发者需要学习两套开发框架技术,开发两套代码,导致开发成本比较高。为了降低开发成本,迫切需要一种能够将RN代码转换为小程序代码的技术;在将RN代码转换为小程序代码的过程中,样式代码是业务开发的核心之一,涉及的情况比较复杂,因此如何将RN样式代码转换为小程序样式代码,已成为本领域技术人员亟待解决的问题。
发明内容
本发明实施例提供一种将RN样式代码转换为小程序样式代码的方法及装置,以解决现有技术中重复开发所造成的开发成本较高的技术问题。
根据本发明的第一方面,公开了一种将RN样式代码转换为小程序样式代码的方法,所述方法包括:
若目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式,则将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点;
若所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式,则将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点;
基于所生成的小程序节点,生成小程序的布局文件;以及基于所述目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
可选地,作为一个实施例,所述方法还包括:
遍历所述目标AST的样式节点,得到所述样式节点中封装格式的样式;
若所述封装格式的样式中包括封装格式的非平台特有的常量样式,则以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中;
若所述封装格式的样式中包括封装格式的非平台特有的变量样式,则以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中;
若所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式,则以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的常量样式保存至所述预设常量样式字典中;
若所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式,则以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的变量样式保存至所述预设变量样式字典中。
可选地,作为一个实施例,所述小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点;
所述将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点,包括:
获取所述视图节点所引用的封装格式的非平台特有的变量样式;
复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点;
将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第一备用节点的未封装格式的平台样式中,得到第一小程序节点;以及,
将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
基于预设第一条件创建用于关联所述第一、二小程序节点的第一条件运算节点;其中,所述预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点;
所述将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点,包括:
获取所述视图节点所引用的封装格式的平台样式;
若所述视图节点所引用的封装格式的平台样式中包括变量样式,则复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点;
将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第三备用节点的未封装格式的平台样式中,得到第三小程序节点;以及,
将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第四备用节点的未封装格式的平台样式中,得到第四小程序节点;
基于预设第二条件创建用于关联所述第三、四小程序节点的第二条件运算节点;其中,所述预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述方法还包括:
若所述视图节点所引用的封装格式的平台样式中包括常量样式,则在向所述第三、四备用节点插入变量样式之前,将所述第三备用节点和所述第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
可选地,作为一个实施例,所述方法还包括:
若所述变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空,则确定所述视图节点所引用的封装格式的平台样式中包括变量样式;
其中,所述第一样式名为所述视图节点所引用的封装格式的平台样式的样式名。
可选地,作为一个实施例,所述方法还包括:
若所述变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空,则确定所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式;
其中,所述第二样式名为所述视图节点中封装格式的样式的样式名。
可选地,作为一个实施例,所述方法还包括:
获取所述视图节点的属性名;
通过所述属性名+平台名对所述视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置所述视图节点的平台key值为所述属性名+平台名。
可选地,作为一个实施例,所述方法还包括:
若所述视图节点的平台key值不为空,则确定所述视图节点引用所述目标AST的样式节点中封装格式的平台样式。
可选地,作为一个实施例,所述基于所生成的小程序节点,生成小程序的布局文件,包括:
遍历所生成的小程序节点,将所述小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;
将所述去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
根据本发明的第二方面,公开了一种将RN样式代码转换为小程序样式代码的装置,所述装置包括:
第一生成模块,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点;
第二生成模块,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点;
第三生成模块,用于基于所生成的小程序节点,生成小程序的布局文件;
第四生成模块,用于基于所述目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
可选地,作为一个实施例,所述装置还包括:
遍历模块,用于遍历所述目标AST的样式节点,得到所述样式节点中封装格式的样式;
第一存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的常量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中;
第二存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的变量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中;
第三存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的常量样式保存至所述预设常量样式字典中;
第四存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的变量样式保存至所述预设变量样式字典中。
可选地,作为一个实施例,所述小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点;
所述第一生成模块包括:
第一获取子模块,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,获取所述视图节点所引用的封装格式的非平台特有的变量样式;
第一设置子模块,用于复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点;
第一生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第一备用节点的未封装格式的平台样式中,得到第一小程序节点;以及,
第二生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
第三生成子模块,用于基于预设第一条件创建用于关联所述第一、二小程序节点的第一条件运算节点;其中,所述预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点;
所述第二生成模块包括:
第二获取子模块,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,获取所述视图节点所引用的封装格式的平台样式;
第二设置子模块,用于在所述视图节点所引用的封装格式的平台样式中包括变量样式的情况下,复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点;
第四生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第三备用节点的未封装格式的平台样式中,得到第三小程序节点;以及,
第五生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第四备用节点的未封装格式的平台样式中,得到第四小程序节点;
第六生成子模块,用于基于预设第二条件创建用于关联所述第三、四小程序节点的第二条件运算节点;其中,所述预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述第二生成模块还包括:
修改子模块,用于在所述视图节点所引用的封装格式的平台样式中包括常量样式的情况下,在向所述第三、四备用节点插入变量样式之前,将所述第三备用节点和所述第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
可选地,作为一个实施例,所述装置还包括:
第一确定模块,用于在所述变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点所引用的封装格式的平台样式中包括变量样式;
其中,所述第一样式名为所述视图节点所引用的封装格式的平台样式的样式名。
可选地,作为一个实施例,所述装置还包括:
第二确定模块,用于在所述变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式;
其中,所述第二样式名为所述视图节点中封装格式的样式的样式名。
可选地,作为一个实施例,所述装置还包括:
获取模块,用于获取所述视图节点的属性名;
处理模块,用于通过所述属性名+平台名对所述视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置所述视图节点的平台key值为所述属性名+平台名。
可选地,作为一个实施例,所述装置还包括:
第三确定模块,用于在所述视图节点的平台key值不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的平台样式。
可选地,作为一个实施例,所述第三生成模块包括:
去重子模块,用于遍历所生成的小程序节点,将所述小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;
解析子模块,用于将所述去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
根据本发明的第三方面,公开了一种转换设备,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述将RN样式代码转换为小程序样式代码的方法中的步骤。
根据本发明的第四方面,公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述将RN样式代码转换为小程序样式代码方法中的步骤。
考虑到RN文件中包括封装格式和未封装格式的常量样式、变量样式和平台样式,而小程序的样式文件中只允许包括常量样式,不允许包括变量样式和平台样式,本发明实施例中,通过遍历RN文件的抽象语法树,查找该抽象语法树中包含未封装格式的平台样式的视图节点、该视图节点所引用的封装格式的变量样式(非平台特有的)和封装格式的平台样式,将该视图节点所引用的封装格式的变量样式和封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成对应小程序的语法树节点,之后解析为小程序代码输出到小程序的布局文件中,使得RN文件中的变量样式和平台样式通过转换能够直接在小程序环境中运行。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率。
附图说明
图1是本发明的一个实施例的将RN样式代码转换为小程序样式代码的方法的流程图;
图2是本发明的一个实施例的一种样式节点中封装格式的样式的存储方法的流程图;
图3是本发明的一个实施例的步骤101的一种实施方式的流程图;
图4是本发明的一个实施例的步骤102的一种实施方式的流程图;
图5是本发明的一个实施例的将RN样式代码转换为小程序样式代码的装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
本发明实施例提供了一种将RN样式代码转换为小程序样式代码的方法及装置。
为了便于理解,下面首先对本发明实施例中涉及到的一些概念进行介绍。
React Native(简称为“RN”)是一种由FaceBook推出的开源跨平台移动应用开发框架,RN使用JavaScript语言,通过iOS和Android平台提供的JS解析引擎,来调用iOS和Android平台的Native功能。
小程序是一种不需要下载安装即可使用的应用程序,用户扫一扫或者搜一下即可打开应用,不用关心是否安装太多应用的问题。
微信小程序是一种由腾讯公司推出的、基于微信APP的跨平台移动应用开发框架,微信小程序使用JavaScript语言,调用微信APP中具有的功能,从而来支持基于其上运行的移动应用的开发。
RN文件(又可以称为“RN工程”),是使用JavaScript语言,基于RN语法规则编写的文件。
小程序文件(又可以称为“小程序工程”),是使用JavaScript语言,基于小程序语法规则编写的文件。
AST(Abstract Syntax Tree,抽象语法树)是用树状表现形式来展现源代码的抽象语法结构,利用抽象语法树可以方便地实现多种源程序处理工具,例如智能编辑器和语言翻译器等。
Babel是一种JavaScript语言编译器,Babel提供的API接口可以用来操作JavaScript代码的抽象语法树,从而来实现代码转化。
CSS(Cascading Style Sheets,层叠样式表),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言,CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
常量样式,指的是CSS样式中的样式值为常量或常量运算,例如,颜色为红色,宽度为100像素等。
变量样式,指的是CSS样式中的样式值为变量或变量运算,例如,宽度为当前屏幕宽度的一半等。
平台样式,指的是根据当前平台(平台可以包括:IOS平台和安卓平台)设置不同的样式,例如,iOS平台的左边距设置为10像素,安卓平台的左边距设置为20像素等。
按照是否为平台特有,可以将样式划分为四类,分别为:非平台特有的常量样式、非平台特有的变量样式、平台特有的常量样式和平台特有的变量样式,其中,平台特有的常量样式包括:IOS平台特有的常量样式和安卓平台特有的常量样式,平台特有的变量样式包括:IOS平台特有的变量样式和安卓平台特有的变量样式。
接下来对本发明实施例提供的一种将RN文件转换为小程序文件的方法进行介绍。
图1是本发明的一个实施例的将RN样式代码转换为小程序样式代码的方法的流程图,该方法由转换设备执行,在实际应用中,该转换设备可以包括:服务器、电脑和桌面机等计算机设备,也可以包括:智能手机、平板电脑和个人数字助理等移动终端,如图1所示,该方法可以包括以下步骤:步骤101、步骤102、步骤103和步骤104,其中,
在步骤101中,若目标AST的视图节点中包括未封装格式的平台样式、且该视图节点引用目标AST的样式节点中封装格式的非平台特有的变量样式,则将该视图节点所引用的封装格式的非平台特有的变量样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第一类节点;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
本发明实施例中,考虑到相较于直接分析源代码,抽象语法树更易于进行语法和内容分析,并且抽象语法树中记录了源代码的关键信息,因此在将RN样式代码转换为小程序样式代码时,可以首先将待转换RN文件的代码转换为对应的AST,之后基于RN文件的AST,生成小程序布局文件的抽象语法树节点,最后小程序布局文件的抽象语法树节点解析为小程序的布局文件,从而实现将RN样式代码转换为小程序样式代码。
本发明实施例中,在将待转换RN文件的代码转换为目标AST时,可以根据该RN文件的文件路径,读取该RN文件,之后调用Babel提供的API(例如transform)对该RN文件进行处理,生成该RN文件的AST。
可见,本发明实施例中,可以将待转换RN文件的代码转换为对应的AST,之后再基于待转换RN文件的AST进行样式代码的转换,与直接基于待转换RN文件的代码进行样式代码的转换相比,由于AST更易于语法和内容分析,因此本发明实施例技术方案更易于程序化实现。
本发明实施例中,可以依据目标AST的视图节点是否设置过封装格式和该视图节点的属性,来判断该视图节点中是否包括未封装格式的平台样式;具体的,若该视图节点未设置过封装格式,则根据该视图节点的属性进一步判断该视图节点中是否包括平台样式,若包括平台样式,则确定该视图节点中包括未封装格式的平台样式。
在本发明提供的一个实施例中,可以在遍历目标AST时,获取该AST的每个样式节点中封装格式的样式,将每个样式节点中封装格式的样式预先保存在预先创建的字典内,以方便在用到该封装格式的样式时直接去字典中获取,提高处理效率,此时,如图2所示,图2是本发明的一个实施例的一种样式节点中封装格式的样式的存储方法的流程图,该方法可以包括以下步骤:步骤201、步骤202、步骤203、步骤204和步骤205,其中,
在步骤201中,遍历目标AST的样式节点,得到该样式节点中封装格式的样式。
本发明实施例中,通过遍历目标AST,获取该目标AST的每个样式节点中封装格式的样式,这里提到的“封装格式的样式”指的是封装格式的样式的样式值。
本发明实施例中,在获取目标AST的样式节点中封装格式的样式后,判断该样式是常量样式还是变量样式,以样式名作为key值,将常量样式和变量样式分别保存到预设常量样式字典和预设变量样式字典中。若有平台特有的样式,判断平台特有的样式是否包含常量样式和变量样式,以样式名+平台名作为key值,将平台特有的常量样式和变量样式分别保存到预设常量样式字典和预设变量样式字典中。
本发明实施例中,预设常量样式字典用于存储目标AST的每个样式节点中封装格式的常量样式(包括:非平台特有的常量样式和平台特有的常量样式),预设变量样式字典用于存储目标AST的每个样式节点中封装格式的变量样式(包括:非平台特有的变量样式和平台特有的变量样式),预设常量样式字典和预设变量样式字典均为JSON格式的文件。
在步骤202中,若上述封装格式的样式中包括封装格式的非平台特有的常量样式,则以该封装格式的样式的样式名作为key值,将该封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中。
本发明实施例中,在将封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中时,该非平台特有的常量样式可以以数组(Array)的方式保存在预设常量样式字典中。
在步骤203中,若上述封装格式的样式中包括封装格式的非平台特有的变量样式,则以该封装格式的样式的样式名作为key值,将该封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中。
本发明实施例中,在将封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中时,该非平台特有的变量样式可以以数组的方式保存在预设变量样式字典中。
在步骤204中,若上述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式,则以该封装格式的样式的样式名+平台名作为key值,将该封装格式的样式中封装格式的平台特有的常量样式保存至预设常量样式字典中。
本发明实施例中,在将封装格式的样式中封装格式的平台特有的常量样式保存至预设常量样式字典中时,该平台特有的常量样式可以以数组的方式保存在预设常量样式字典中。
在步骤205中,若上述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式,则以该封装格式的样式的样式名+平台名作为key值,将该封装格式的样式中封装格式的平台特有的变量样式保存至预设变量样式字典中。
本发明实施例中,在将封装格式的样式中封装格式的平台特有的变量样式保存至预设变量样式字典中时,该平台特有的变量样式可以以数组的方式保存在预设变量样式字典中。
在一个例子中,预设常量样式字典为:名为“styleWithName”的字典(简称为styleWithName字典),预设变量样式字典为:名为“varStyleWithName”的字典(简称为varStyleWithName字典),根据封装格式的样式的样式名为key值进行保存,封装格式的常量样式保存到styleWithName字典中,封装格式的变量样式保存到varStyleWithName字典中。
在一个更为具体的例子中,例如,对于样式名为“viewStyle”的封装格式的样式,若该封装格式的样式中包括a个非平台特有的常量样式,则以viewStyle为key值,将这a个非平台特有的常量样式保存至styleWithName字典中,例如,styleWithName[viewStyle];
若该封装格式的样式中包括b个非平台特有的变量样式,则以viewStyle为key值,将这b个非平台特有的变量样式保存至varStyleWithName字典中,例如,varStyleWithName[viewStyle];
若该封装格式的样式中包括c个IOS平台特有的常量样式,则以viewStyle+IOS平台名为key值,将这c个IOS平台特有的常量样式保存至styleWithName字典中,例如,styleWithName[viewStyle_ios];
若该封装格式的样式中包括d个IOS平台特有的变量样式,则以viewStyle+IOS平台名为key值,将这d个IOS平台特有的变量样式保存至varStyleWithName字典中,例如,varStyleWithName[viewStyle_ios];
若该封装格式的样式中包括e个安卓平台特有的常量样式,则以viewStyle+安卓平台名为key值,将这e个安卓平台特有的常量样式保存至styleWithName字典中,例如,styleWithName[viewStyle_andr];
若该封装格式的样式中包括f个安卓平台特有的变量样式,则以viewStyle+安卓平台名为key值,将这f个安卓平台特有的变量样式保存至varStyleWithName字典中,例如,varStyleWithName[viewStyle_andr]。
在本发明提供的一个实施例中,可以依据步骤201至205中所得到的预设变量样式字典,来判断视图节点是否引用该目标AST的样式节点中封装格式的非平台特有的变量样式,此时,图1所示实施例还可以增加以下步骤:
若变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空,则确定视图节点引用目标AST的样式节点中封装格式的非平台特有的变量样式;其中,第二样式名为视图节点中封装格式的样式的样式名。
本发明实施例中,可以首先获取该视图节点中封装格式的样式的样式名,之后判断预设变量样式字典中是否包括取值为该视图节点中封装格式的样式的样式名的key值、且该key值对应的数组不为空,若是,则确定该视图节点引用目标AST的样式节点中封装格式的非平台特有的变量样式。
在本发明提供的一个实施例中,小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点,此时,如图3所示,上述步骤101具体可以包括以下步骤:步骤301、步骤302、步骤303、步骤304和步骤305,其中,
在步骤301中,获取视图节点所引用的封装格式的非平台特有的变量样式。
本发明实施例中,可以根据视图节点的属性名,从步骤201至205中所得到的预设变量样式字典中获取该视图节点所引用的封装格式的非平台特有的变量样式。
在步骤302中,复制两个视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点。
在步骤303中,将视图节点所引用的封装格式的非平台特有的变量样式插入到第一备用节点的未封装格式的平台样式中,得到第一小程序节点。
在步骤304中,将视图节点所引用的封装格式的非平台特有的变量样式插入到第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
在步骤305中,基于预设第一条件创建用于关联第一、二小程序节点的第一条件运算节点;其中,预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可见,本发明实施例中,可以通过复制视图节点,在设置所复制节点的平台样式后,将该视图节点所引用的封装格式的非平台特有的变量样式插入到已设置平台样式的复制节点中的方式,实现将该视图节点所引用的封装格式的非平台特有的变量样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第一类节点。
在步骤102中,若目标AST的视图节点中包括未封装格式的平台样式、且该视图节点引用目标AST的样式节点中封装格式的平台样式,则将该视图节点所引用的封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第二类节点。
在本发明提供的一个实施例中,为了便于后续判断视图节点是否引用目标AST的样式节点中封装格式的平台样式,在遍历目标AST过程中可以预先设置视图节点的平台key值,此时,图1所示实施例还可以增加以下步骤:
获取视图节点的属性名;
通过该属性名+平台名对该视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置视图节点的平台key值为属性名+平台名。
例如,若只有iOS平台特有的样式,则设置iOS平台key值为封装样式名+“_”+ios,若也有安卓平台特有的样式,则设置安卓平台的key值为封装样式名+“_”+andr,若不包含平台特有的样式,不设置任何平台key值。
在上述情况下,可以通过视图节点的平台key值,来判断视图节点是否引用目标AST的样式节点中封装格式的平台样式,此时,图1所示实施例还可以增加以下步骤:
若视图节点的平台key值不为空,则确定该视图节点引用目标AST的样式节点中封装格式的平台样式。
在本发明提供的一个实施例中,小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点,此时,如图4所示,上述步骤102具体可以包括以下步骤:步骤401、步骤402、步骤403、步骤404和步骤405,其中,
在步骤401中,获取视图节点所引用的封装格式的平台样式。
本发明实施例中,可以根据该视图节点的属性名+平台名,从步骤201至205中所得到的预设变量样式字典中获取该视图节点所引用的封装格式的平台特有的变量样式。
在步骤402中,若视图节点所引用的封装格式的平台样式中包括变量样式,则复制两个视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点。
在本发明提供的一个实施例中,可以依据步骤201至205中所得到的预设变量样式字典,来判断视图节点引用封装格式的平台样式中是否包括平台特有的变量样式时,此时,图1所示实施例还可以增加以下步骤:
若变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空,则确定视图节点所引用的封装格式的平台样式中包括变量样式;其中,第一样式名为视图节点所引用的封装格式的平台样式的样式名。
本发明实施例中,首选获取该封装格式的平台样式的样式名,之后判断预设变量样式字典中是否包括取值为该视图节点中封装格式的样式的样式名+平台名的key值、且该key值对应的数组不为空,若是,则确定该封装格式的平台样式中包括平台特有的变量样式。
在步骤403中,将视图节点所引用的封装格式的平台样式中的变量样式插入到第三备用节点的未封装格式的平台样式中,得到第三小程序节点。
在步骤404中,将视图节点所引用的封装格式的平台样式中的变量样式插入到第四备用节点的未封装格式的平台样式中,得到第四小程序节点。
在本发明提供的一个实施例中,若视图节点所引用的封装格式的平台样式中包括常量样式,则在向第三、四备用节点插入变量样式之前,将第三备用节点和第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
例如,之前的属性名为“key”,修改后的属性名变为“key key_ios”或“key key_andr”。
本发明实施例中,可以依据步骤201至205中所得到的预设常量样式字典,来判断视图节点引用封装格式的平台样式中是否包括平台特有的常量样式时,此时,可以首先获取该封装格式的平台样式的样式名,之后判断预设常量样式字典中是否包括取值为该视图节点中封装格式的样式的样式名+平台名的key值、且该key值对应的数组不为空,若是,则确定该封装格式的平台样式中包括平台特有的常量样式。
在步骤405中,基于预设第二条件创建用于关联第三、四小程序节点的第二条件运算节点;其中,预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可见,本发明实施例中,可以通过复制视图节点,在设置所复制节点的平台样式后,将该视图节点所引用的封装格式的平台样式中的变量样式插入到已设置平台样式的复制节点中的方式,实现将该视图节点所引用的封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成小程序的第二类节点。
在步骤103中,基于所生成的小程序节点,生成小程序的布局文件。
本发明实施例中,考虑到每次出现视图节点中包含平台样式时,都要复制两份同样的视图节点,分开去设置iOS样式以及安卓样式,因此所生成的小程序节点中可能会出现多余的平台判断,为了解决上述问题,上述步骤103具体可以包括:
遍历所生成的小程序节点,将该小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;将去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
在步骤104中,基于目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件。
本发明实施例中,可以直接将RN文件的AST的样式节点中封装格式的常量样式,输出到小程序的样式文件中。
由上述实施例可见,该实施例中,考虑到RN文件中包括封装格式和未封装格式的常量样式、变量样式和平台样式,而小程序的样式文件中只允许包括常量样式,不允许包括变量样式和平台样式,本发明实施例中,通过遍历RN文件的抽象语法树,查找该抽象语法树中包含未封装格式的平台样式的视图节点、该视图节点所引用的封装格式的变量样式(非平台特有的)和封装格式的平台样式,将该视图节点所引用的封装格式的变量样式和封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成对应小程序的语法树节点,之后解析为小程序代码输出到小程序的布局文件中,使得RN文件中的变量样式和平台样式通过转换能够直接在小程序环境中运行。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率。
图5是本发明的一个实施例的将RN样式代码转换为小程序样式代码的装置的结构示意图,如图5所示,将RN样式代码转换为小程序样式代码的装置500,可以包括:第一生成模块501、第二生成模块502、第三生成模块503和第四生成模块504,其中,
第一生成模块501,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点;
第二生成模块502,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点;
第三生成模块503,用于基于所生成的小程序节点,生成小程序的布局文件;
第四生成模块504,用于基于所述目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
由上述实施例可见,该实施例中,考虑到RN文件中包括封装格式和未封装格式的常量样式、变量样式和平台样式,而小程序的样式文件中只允许包括常量样式,不允许包括变量样式和平台样式,本发明实施例中,通过遍历RN文件的抽象语法树,查找该抽象语法树中包含未封装格式的平台样式的视图节点、该视图节点所引用的封装格式的变量样式(非平台特有的)和封装格式的平台样式,将该视图节点所引用的封装格式的变量样式和封装格式的平台样式插入到该视图节点的未封装格式的平台样式中,生成对应小程序的语法树节点,之后解析为小程序代码输出到小程序的布局文件中,使得RN文件中的变量样式和平台样式通过转换能够直接在小程序环境中运行。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率。
可选地,作为一个实施例,将RN样式代码转换为小程序样式代码的装置500,还可以包括:
遍历模块,用于遍历所述目标AST的样式节点,得到所述样式节点中封装格式的样式;
第一存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的常量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中;
第二存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的变量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中;
第三存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的常量样式保存至所述预设常量样式字典中;
第四存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的变量样式保存至所述预设变量样式字典中。
可选地,作为一个实施例,所述小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点;
所述第一生成模块501,可以包括:
第一获取子模块,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,获取所述视图节点所引用的封装格式的非平台特有的变量样式;
第一设置子模块,用于复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点;
第一生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第一备用节点的未封装格式的平台样式中,得到第一小程序节点;以及,
第二生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
第三生成子模块,用于基于预设第一条件创建用于关联所述第一、二小程序节点的第一条件运算节点;其中,所述预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点;
所述第二生成模块502,可以包括:
第二获取子模块,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,获取所述视图节点所引用的封装格式的平台样式;
第二设置子模块,用于在所述视图节点所引用的封装格式的平台样式中包括变量样式的情况下,复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点;
第四生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第三备用节点的未封装格式的平台样式中,得到第三小程序节点;以及,
第五生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第四备用节点的未封装格式的平台样式中,得到第四小程序节点;
第六生成子模块,用于基于预设第二条件创建用于关联所述第三、四小程序节点的第二条件运算节点;其中,所述预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
可选地,作为一个实施例,所述第二生成模块502,还可以包括:
修改子模块,用于在所述视图节点所引用的封装格式的平台样式中包括常量样式的情况下,在向所述第三、四备用节点插入变量样式之前,将所述第三备用节点和所述第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
可选地,作为一个实施例,将RN样式代码转换为小程序样式代码的装置500,还可以包括:
第一确定模块,用于在所述变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点所引用的封装格式的平台样式中包括变量样式;
其中,所述第一样式名为所述视图节点所引用的封装格式的平台样式的样式名。
可选地,作为一个实施例,将RN样式代码转换为小程序样式代码的装置500,还可以包括:
第二确定模块,用于在所述变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式;
其中,所述第二样式名为所述视图节点中封装格式的样式的样式名。
可选地,作为一个实施例,将RN样式代码转换为小程序样式代码的装置500,还可以包括:
获取模块,用于获取所述视图节点的属性名;
处理模块,用于通过所述属性名+平台名对所述视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置所述视图节点的平台key值为所述属性名+平台名。
可选地,作为一个实施例,将RN样式代码转换为小程序样式代码的装置500,还可以包括:
第三确定模块,用于在所述视图节点的平台key值不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的平台样式。
可选地,作为一个实施例,所述第三生成模块503,可以包括:
去重子模块,用于遍历所生成的小程序节点,将所述小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;
解析子模块,用于将所述去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
根据本发明的一个实施例,本发明还提供了一种转换设备,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述任意一个实施例所述的将RN样式代码转换为小程序样式代码的方法中的步骤。
根据本发明的一个实施例,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一个实施例所述的将RN样式代码转换为小程序样式代码的方法中的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包括有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包括”或者其任何其他变体意在涵盖非排他性的包括,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种将RN样式代码转换为小程序样式代码的方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (22)

1.一种将RN样式代码转换为小程序样式代码的方法,其特征在于,所述方法包括:
若目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式,则将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点;
若所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式,则将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点;
基于所生成的小程序节点,生成小程序的布局文件;以及基于所述目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
遍历所述目标AST的样式节点,得到所述样式节点中封装格式的样式;
若所述封装格式的样式中包括封装格式的非平台特有的常量样式,则以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中;
若所述封装格式的样式中包括封装格式的非平台特有的变量样式,则以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中;
若所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式,则以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的常量样式保存至所述预设常量样式字典中;
若所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式,则以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的变量样式保存至所述预设变量样式字典中。
3.根据权利要求1或2所述的方法,其特征在于,所述小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点;
所述将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点,包括:
获取所述视图节点所引用的封装格式的非平台特有的变量样式;
复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点;
将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第一备用节点的未封装格式的平台样式中,得到第一小程序节点;以及,
将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
基于预设第一条件创建用于关联所述第一、二小程序节点的第一条件运算节点;其中,所述预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
4.根据权利要求2所述的方法,其特征在于,所述小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点;
所述将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点,包括:
获取所述视图节点所引用的封装格式的平台样式;
若所述视图节点所引用的封装格式的平台样式中包括变量样式,则复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点;
将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第三备用节点的未封装格式的平台样式中,得到第三小程序节点;以及,
将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第四备用节点的未封装格式的平台样式中,得到第四小程序节点;
基于预设第二条件创建用于关联所述第三、四小程序节点的第二条件运算节点;其中,所述预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述视图节点所引用的封装格式的平台样式中包括常量样式,则在向所述第三、四备用节点插入变量样式之前,将所述第三备用节点和所述第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述预设变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空,则确定所述视图节点所引用的封装格式的平台样式中包括变量样式;
其中,所述第一样式名为所述视图节点所引用的封装格式的平台样式的样式名。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述预设变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空,则确定所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式;
其中,所述第二样式名为所述视图节点中封装格式的样式的样式名。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述视图节点的属性名;
通过所述属性名+平台名对所述视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置所述视图节点的平台key值为所述属性名+平台名。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若所述视图节点的平台key值不为空,则确定所述视图节点引用所述目标AST的样式节点中封装格式的平台样式。
10.根据权利要求1所述的方法,其特征在于,所述基于所生成的小程序节点,生成小程序的布局文件,包括:
遍历所生成的小程序节点,将所述小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;
将所述去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
11.一种将RN样式代码转换为小程序样式代码的装置,其特征在于,所述装置包括:
第一生成模块,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第一类节点;
第二生成模块,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,将所述视图节点所引用的封装格式的平台样式插入到所述视图节点的未封装格式的平台样式中,生成小程序的第二类节点;
第三生成模块,用于基于所生成的小程序节点,生成小程序的布局文件;
第四生成模块,用于基于所述目标AST的样式节点中封装格式的常量样式,生成小程序的样式文件;其中,目标AST为待转换RN文件的AST,一个RN文件对应一个RN页面。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
遍历模块,用于遍历所述目标AST的样式节点,得到所述样式节点中封装格式的样式;
第一存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的常量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的常量样式保存至预设常量样式字典中;
第二存储模块,用于在所述封装格式的样式中包括封装格式的非平台特有的变量样式的情况下,以所述封装格式的样式的样式名作为key值,将所述封装格式的样式中封装格式的非平台特有的变量样式保存至预设变量样式字典中;
第三存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的常量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的常量样式保存至所述预设常量样式字典中;
第四存储模块,用于在所述封装格式的样式中包括封装格式的平台样式、且该平台样式中包括平台特有的变量样式的情况下,以所述封装格式的样式的样式名+平台名作为key值,将所述封装格式的样式中封装格式的平台特有的变量样式保存至所述预设变量样式字典中。
13.根据权利要求11或12所述的装置,其特征在于,所述小程序的第一类节点包括:第一小程序节点、第二小程序节点和第一条件运算节点;
所述第一生成模块包括:
第一获取子模块,用于在目标抽象语法树AST的视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式的情况下,获取所述视图节点所引用的封装格式的非平台特有的变量样式;
第一设置子模块,用于复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第一备用节点,将复制的另一个节点设置为安卓平台样式得到第二备用节点;
第一生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第一备用节点的未封装格式的平台样式中,得到第一小程序节点;以及,
第二生成子模块,用于将所述视图节点所引用的封装格式的非平台特有的变量样式插入到所述第二备用节点的未封装格式的平台样式中,得到第二小程序节点;
第三生成子模块,用于基于预设第一条件创建用于关联所述第一、二小程序节点的第一条件运算节点;其中,所述预设第一条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
14.根据权利要求12所述的装置,其特征在于,所述小程序的第二类节点包括:第三小程序节点、第四小程序节点和第二条件运算节点;
所述第二生成模块包括:
第二获取子模块,用于在所述视图节点中包括未封装格式的平台样式、且所述视图节点引用所述目标AST的样式节点中封装格式的平台样式的情况下,获取所述视图节点所引用的封装格式的平台样式;
第二设置子模块,用于在所述视图节点所引用的封装格式的平台样式中包括变量样式的情况下,复制两个所述视图节点,将复制的一个节点设置为IOS平台样式得到第三备用节点,将复制的另一个节点设置为安卓平台样式得到第四备用节点;
第四生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第三备用节点的未封装格式的平台样式中,得到第三小程序节点;以及,
第五生成子模块,用于将所述视图节点所引用的封装格式的平台样式中的变量样式插入到所述第四备用节点的未封装格式的平台样式中,得到第四小程序节点;
第六生成子模块,用于基于预设第二条件创建用于关联所述第三、四小程序节点的第二条件运算节点;其中,所述预设第二条件包括:判断当前平台是否为安卓平台,若当前平台为安卓平台,则展示安卓平台样式,否则展示IOS平台样式。
15.根据权利要求14所述的装置,其特征在于,所述第二生成模块还包括:
修改子模块,用于在所述视图节点所引用的封装格式的平台样式中包括常量样式的情况下,在向所述第三、四备用节点插入变量样式之前,将所述第三备用节点和所述第四备用节点的属性名均修改为:该常量样式的样式名该常量样式的样式名+平台名。
16.根据权利要求14所述的装置,其特征在于,所述装置还包括:
第一确定模块,用于在所述预设变量样式字典中包括取值为第一样式名+平台名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点所引用的封装格式的平台样式中包括变量样式;
其中,所述第一样式名为所述视图节点所引用的封装格式的平台样式的样式名。
17.根据权利要求12所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于在所述预设变量样式字典中包括取值为第二样式名的key值、且该key值对应的数组不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的非平台特有的变量样式;
其中,所述第二样式名为所述视图节点中封装格式的样式的样式名。
18.根据权利要求11所述的装置,其特征在于,所述装置还包括:
获取模块,用于获取所述视图节点的属性名;
处理模块,用于通过所述属性名+平台名对所述视图节点进行遍历,判断遍历结果是否为空,若为空,则不作处理,否则设置所述视图节点的平台key值为所述属性名+平台名。
19.根据权利要求18所述的装置,其特征在于,所述装置还包括:
第三确定模块,用于在所述视图节点的平台key值不为空的情况下,确定所述视图节点引用所述目标AST的样式节点中封装格式的平台样式。
20.根据权利要求11所述的装置,其特征在于,所述第三生成模块包括:
去重子模块,用于遍历所生成的小程序节点,将所述小程序节点中重复的平台判断内容删除,得到去重后的小程序节点;
解析子模块,用于将所述去重后的小程序节点解析为小程序代码,输出到小程序的布局文件中。
21.一种转换设备,其特征在于,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至10任一项所述的将RN样式代码转换为小程序样式代码的方法中的步骤。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述的将RN样式代码转换为小程序样式代码的方法中的步骤。
CN201910828490.7A 2019-09-03 2019-09-03 将rn样式代码转换为小程序样式代码的方法及装置 Active CN110716746B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910828490.7A CN110716746B (zh) 2019-09-03 2019-09-03 将rn样式代码转换为小程序样式代码的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910828490.7A CN110716746B (zh) 2019-09-03 2019-09-03 将rn样式代码转换为小程序样式代码的方法及装置

Publications (2)

Publication Number Publication Date
CN110716746A CN110716746A (zh) 2020-01-21
CN110716746B true CN110716746B (zh) 2023-04-07

Family

ID=69210273

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910828490.7A Active CN110716746B (zh) 2019-09-03 2019-09-03 将rn样式代码转换为小程序样式代码的方法及装置

Country Status (1)

Country Link
CN (1) CN110716746B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2548334A1 (en) * 2003-12-15 2005-07-28 Evolveware Information Technology (India) Pvt. Ltd. An apparatus for migration and conversion of software code from any source platform to any target platform
CN104346146A (zh) * 2013-07-29 2015-02-11 腾讯科技(深圳)有限公司 一种跨平台转换应用代码的方法及装置
CN108268262A (zh) * 2017-12-27 2018-07-10 广东耐思尼克信息技术有限公司 实现将html转换为微信小程序的方法、装置及系统
CN108984174A (zh) * 2018-07-03 2018-12-11 百度在线网络技术(北京)有限公司 跨平台的应用创建方法、装置、服务器和存储介质
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN110109681A (zh) * 2019-05-08 2019-08-09 上海携程商务有限公司 不同平台间代码的转换方法及系统
WO2019155462A1 (en) * 2018-02-08 2019-08-15 Valid Network Ltd Code conversion method and system

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9886249B2 (en) * 2015-11-16 2018-02-06 Sap Se Universal transcompiling framework

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2548334A1 (en) * 2003-12-15 2005-07-28 Evolveware Information Technology (India) Pvt. Ltd. An apparatus for migration and conversion of software code from any source platform to any target platform
CN104346146A (zh) * 2013-07-29 2015-02-11 腾讯科技(深圳)有限公司 一种跨平台转换应用代码的方法及装置
CN108268262A (zh) * 2017-12-27 2018-07-10 广东耐思尼克信息技术有限公司 实现将html转换为微信小程序的方法、装置及系统
WO2019155462A1 (en) * 2018-02-08 2019-08-15 Valid Network Ltd Code conversion method and system
CN108984174A (zh) * 2018-07-03 2018-12-11 百度在线网络技术(北京)有限公司 跨平台的应用创建方法、装置、服务器和存储介质
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN110109681A (zh) * 2019-05-08 2019-08-09 上海携程商务有限公司 不同平台间代码的转换方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Wafaa S.El-kassas.Enhanced code Conversion Approach for the Integrated Cross-Platform Mobile Development(ICPMD).IEEE Transactions on Software Engineering.2016,第42卷(第42期),1036-1053. *

Also Published As

Publication number Publication date
CN110716746A (zh) 2020-01-21

Similar Documents

Publication Publication Date Title
JP6629848B2 (ja) モバイルアプリ用ページ処理
CN110442330B (zh) 列表组件转换方法、装置、电子设备及存储介质
CN108415702B (zh) 一种移动终端应用界面动态渲染方法和装置
WO2019233293A1 (zh) 一种应用程序的开发方法和装置
TW201732647A (zh) 一種網頁腳本載入方法和裝置
CN110795088B (zh) 前端工程项目构建方法和工具、计算机可读存储介质
CN110362792B (zh) 将rn文件转换为小程序文件的方法、装置及转换设备
CN111427583A (zh) 组件的编译方法、装置和电子设备及计算机可读存储介质
CN112947934A (zh) 一种动态变换业务逻辑的方法、设备及介质
CN111240987B (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN110716746B (zh) 将rn样式代码转换为小程序样式代码的方法及装置
CN110941443A (zh) 修改sdk中文件名的方法、装置及电子设备
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN110554867B (zh) 一种应用程序的处理方法和装置
CN114840822A (zh) 代码保护方法、装置、设备及存储介质
JP7059757B2 (ja) Api処理方法、端末、api処理プログラム
CN111399863A (zh) 依赖文件打包方法、装置、设备与计算机可读存储介质
CN112947938B (zh) 一种文件转化方法、装置、电子设备及存储介质
CN111273944B (zh) 生成程序文件并上传至代码仓库的方法及装置
CN117149252A (zh) 程序包的体积调整方法、装置、电子设备及可读存储介质
CN116069331A (zh) 一种代理类生成方法、装置、设备及存储介质
CN117667089A (zh) 前端表单生成方法、装置、存储介质及电子设备
CN115543316A (zh) 一种基于vue的UI库组件效果实时显示方法、装置及应用
CN113687973A (zh) 一种日志动态化输出的控制方法、设备及介质
CN114691107A (zh) 一种前端埋点方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant