【Deepin Linux 下 软开神器Lazarus支持中文变量名的安装方法】

本文主要是介绍【Deepin Linux 下 软开神器Lazarus支持中文变量名的安装方法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Deepin Linux 下 软开神器Lazarus支持中文变量名的安装方法

  • 前言:
  • 一、下载
  • 二、修改源码
    • 1. 修改 fpc 编译器 源码
    • 2. 修改 Lazarus 源码
  • 三、编译并测试
  • 四、后记

**

前言:

**
国产Linux在美国的打压下迎来了春天,但Linux天生软件很少,开发工具更是寒岑,不擅长GUI 的C++、缓慢的python 、Java、庞大的QT ,麻烦的Electron,又大又慢又贵的.Net, 就没有一个能打的。
没想到1999年出生的开发神器Lazarus2终于成熟,它继承了曾经的王者Delphi的血统,新增大量优点:开源、跨平台、原生编译、优雅简洁、Bug极少,最快的编译和运行速度-没有之一,支持几乎所有OS和CPU(包括咱的龙芯),消耗很少的资源,甚至能跑在树梅派之类的小板板上;虽然它用的Free Pascal 语言十分简洁且强壮,但功能一点不少,语法上支持大部分C++的特性,重载操作符/函数/模板/泛型/接口…
它有多简单?菜鸟我只需花一天不和女神聊天就为神器新增“中文变量名”功能,从此告别迷一样的拼音变量名和蹩脚冗长的英文名。本文在Deepin Linux 15.8 和 20.3 均测试无恙!

一、下载

用GUI 工具fpcupdeluxe下载最方便。
在黑终端直接运行 ./fpcupdeluxe-x86_64-linux进入如下界面
fpcupdeluxe-x86_64-linux界面
设置为中文好看,选择fpc stable 和lazarus 2.2.4版本下载安装。
默认安装在主目录下的fpcupdeluxe中

二、修改源码

感谢网友“秋·风”的神作, 参考后,修改一些bug, 本菜鸟亲自编写的如下2个脚本:
首先是修改编译器fpc , 其次修改ide : lazarus

1. 修改 fpc 编译器 源码

#!/bin/bash
if [ ! -d "./fpcsrc" ];thenecho "./fpcsrc 目录不存在, 请确保有才能执行!"exit 1
fi
sed -i "4054c\ 'A'..'Z',#\$80..#\$FF :" 						./fpcsrc/compiler/scanner.pas
sed -i "4729c\ if (c in ['A'..'Z','a'..'z','_',#\$80..#\$FF]) then " 		./fpcsrc/compiler/scanner.pas
sed -i "4822c\  if not ((c in ['_','A'..'Z','a'..'z',#\$80..#\$FF])) then " 	./fpcsrc/compiler/scanner.pas
sed -i "5456c\ 'a'..'z', #\$80..#\$FF:"							./fpcsrc/compiler/scanner.pas
echo "修改./fpcsrc/compiler/scanner.pas..."sed -i "815c\ Alpha = ['A'..'Z', 'a'..'z', '_',#\$80..#\$FF];" 	./fpcsrc/rtl/objpas/sysutils/sysstr.inc
echo "修改./fpcsrc/rtl/objpas/sysutils/sysstr.inc..."sed -i "1321c\  'a'..'z',#\$80..#\$FF :" 	./fpcsrc/compiler/assemble.pas
echo "修改./fpcsrc/compiler/assemble.pas..."sed -i "96c\  else if not(value_str[i] in ['_','A'..'Z','a'..'z','0'..'9',':',#\$80..#\$FF]) then " ./fpcsrc/compiler/objcutil.pas
echo "修改./fpcsrc/compiler/objcutil.pas..."sed -i "181c\   if (s='') or not (s[1] in ['A'..'Z','a'..'z','_',#\$80..#\$FF]) then " ./fpcsrc/compiler/options.pas
sed -i "184c\   if not (s[I] in ['A'..'Z','a'..'z','0'..'9','_',#\$80..#\$FF]) then " ./fpcsrc/compiler/options.pas
sed -i "2714c\  while (i<length(fn)) and (fn[i+1] in ['a'..'z','A'..'Z','0'..'9','_','-',#\$80..#\$FF]) do " ./fpcsrc/compiler/options.pas
echo "修改./fpcsrc/compiler/options.pas..."sed -i "82c\   Result:=fBuf[fPos] in ['_','A'..'Z','a'..'z',#\$80..#\$FF]; " 	./fpcsrc/rtl/objpas/classes/parser.inc
sed -i "444c\  '_','A'..'Z','a'..'z',#\$80..#\$FF : HandleAlphaNum; " 		./fpcsrc/rtl/objpas/classes/parser.inc
echo "修改./fpcsrc/rtl/objpas/classes/parser.inc..."sed -i "75c\  Result:=pchar(fLine)[fLinePos] in ['_','A'..'Z','a'..'z',#\$80..#\$FF]; " ./fpcsrc/packages/fcl-res/src/dfmreader.pp
echo "修改./fpcsrc/packages/fcl-res/src/dfmreader.pp..."
echo "增加fpc3.2.2对中文支持,全部完成。 若要laz支持中文,请在laz目录下运行sh laz2cn.sh"

把以上代码保存为 fpc2cn.sh , 放在fpcupdeluxe目录下,运行之:

sh fpc2cn.sh

然后用fpcupdeluxe编译,为了防止它下载新代码覆盖我们刚做的修改,注意在“设置”中勾选“仅重新构建”如下图,然后回到主界面,点击“安装fpc”。
如果手动 make 编译 fpc 会导致”没有3.06版本“错误,因为它用自己旧版编译新版,并不像其他语言一样,要用C语言编译器编译。这样的好处是能充分验证自己编译器,大大减少自己的Bug。

勾选仅构建

2. 修改 Lazarus 源码


#!/bin/bash
# sed 后如要引用单引号需要用双引号,引用$需要转意用\$, 单引号内的$不需要转意
if [ ! -d "./lazarus" ];then  #[空格 布尔条件 空格] 必须要有空格, 分号表示一行多指令, 这里是为了接then  echo "./lazarus 目录不存在, 请确保有才能执行!"exit 1
fi# the follow code for linux下Lazarus 2.2.0 GTK2版代码编辑器及SynEdit控件不支持中文输入
sed -i '4a\  {$ifdef linux}' 		./lazarus/components/synedit/lazsyngtk2imm.pas
sed -i '5a\   {$define WITH_GTK2_IM}  {$define LCLGtk2}' 	./lazarus/components/synedit/lazsyngtk2imm.pas
sed -i '6a\  {$endif}' 			./lazarus/components/synedit/lazsyngtk2imm.passed -i '12a\  {$ifdef linux}' 		./lazarus/lcl/interfaces/gtk2/gtk2globals.pp
sed -i '13a\   {$define WITH_GTK2_IM}' 	./lazarus/lcl/interfaces/gtk2/gtk2globals.pp
sed -i '14a\  {$endif}' 			./lazarus/lcl/interfaces/gtk2/gtk2globals.ppsed -i '20a\  {$ifdef linux}' 		./lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc 
sed -i '21a\   {$define WITH_GTK2_IM}' 	./lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
sed -i '22a\  {$endif}' 			./lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
sed -i '246a\ if ord(str[0])>127 then im_context_use:=true' ./lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
sed -i '247a\ else if length(str)>1 Then im_context_use:=true;' ./lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
echo "修复lazarus在linux搜狗词组只能输入第一个字的Bug..."sed -i '21a\  {$ifdef linux}' 		./lazarus/lcl/interfaces/gtk2/gtk2proc.inc
sed -i '22a\   {$define WITH_GTK2_IM}' 	./lazarus/lcl/interfaces/gtk2/gtk2proc.inc
sed -i '23a\  {$endif}' 			./lazarus/lcl/interfaces/gtk2/gtk2proc.incsed -i '21a\  {$ifdef linux}' 		./lazarus/components/synedit/synedit.inc
sed -i '22a\   {$define Gtk2IME}' 	./lazarus/components/synedit/synedit.inc
sed -i '23a\  {$endif}' 			./lazarus/components/synedit/synedit.inc
echo "解决GTK2版代码编辑器及SynEdit控件不支持中文输入..."sed -i "13c\ unitdir=../../lcl/interfaces/gtk2 ../../packager/units/\$(CPU_TARGET)-\$(OS_TARGET) ../lazutils/lib/\$(CPU_TARGET)-\$(OS_TARGET) ../freetype/lib/\$(CPU_TARGET)-\$(OS_TARGET) ../../lcl/units/\$(CPU_TARGET)-\$(OS_TARGET) ../../lcl/units/\$(CPU_TARGET)-\$(OS_TARGET)/\$(LCL_PLATFORM) . " ./lazarus/components/synedit/Makefile.fpc
#synedit/Makefile.fpc 13行修改加入../../lcl/interfaces/gtk2 到 unitdir= ../../packager/...” 中
# 再执行 fpcmake 帮我们生成新的makefile. 否则编译时会出现找不到gtk2globals
fpcmake ./lazarus/components/synedit/Makefile.fpc
echo "修改./lazarus/components/synedit/Makefile.fpc 生成新的makefile"# lazarus linux使用StringGrid和DBGrid等控件时,如果内容包含#13时会出现乱码
sed -i '1311a\ i:integer; ' 					./lazarus/lcl/interfaces/gtk2/gtk2devicecontext.inc
sed -i '1321a\ for i:=0 to length(AText)-1 do ' 		./lazarus/lcl/interfaces/gtk2/gtk2devicecontext.inc
sed -i '1322a\   if ord(AText[i])<32 Then AText[i]:=#32; ' 	./lazarus/lcl/interfaces/gtk2/gtk2devicecontext.inc
echo "解决Grid等控件时,如果内容包含#13时会出现乱码..."# 支持中文标识符
echo "增加支持中文标识符..."
sed -i "851c\ IsIdentStartChar[c]:=c in ['a'..'z','A'..'Z','_',#\$80..#\$FF];" 	./lazarus/components/codetools/keywordfunclists.pas
sed -i "852c\ IsIdentChar[c]:=c in ['a'..'z','A'..'Z','_','0'..'9',#\$80..#\$FF];" ./lazarus/components/codetools/keywordfunclists.pas
echo "修改./lazarus/components/codetools/keywordfunclists.pas..."#sed -i lazarus/lcl/interfaces/gtk2/gtk2winapi.inc
sed -i "1167c\ '_','A'..'Z','a'..'z',#\$80..#\$FF: " 	./lazarus/components/codetools/customcodetool.pas
sed -i '1342c\  { #192..#255: ' 				./lazarus/components/codetools/customcodetool.pas
sed -i '1365c\  end; } ' 					./lazarus/components/codetools/customcodetool.pas
sed -i "1621c\  'A'..'Z','a'..'z',#\$80..#\$FF: " 	./lazarus/components/codetools/customcodetool.pas
echo "修改./lazarus/components/codetools/customcodetool.pas"sed -i "720c\  if not (Name[i] in ['0'..'9','_','a'..'z','A'..'Z',#\$80..#\$FF]) then " 	./lazarus/lcl/lresources.pp
sed -i "1344c\  if (not (c in ['a'..'z','A'..'Z','0'..'9','_',#\$80..#\$FF])) then " 	./lazarus/lcl/lresources.pp
sed -i "2039c\  if c in ['a'..'z','A'..'Z','0'..'9','_',#\$80..#\$FF] then " 		./lazarus/lcl/lresources.pp
sed -i "2083c\  and (LFMSource[p] in ['a'..'z','A'..'Z','0'..'9','_',#\$80..#\$FF]) do " ./lazarus/lcl/lresources.pp
sed -i "2091c\  and (LFMSource[p] in ['a'..'z','A'..'Z','0'..'9','_',#\$80..#\$FF]) do " ./lazarus/lcl/lresources.pp
sed -i "2099c\  and (LFMSource[p] in ['a'..'z','A'..'Z','0'..'9','_',#\$80..#\$FF]) do " ./lazarus/lcl/lresources.pp
sed -i "5465c\ Result:=fBuf[fPos] in ['_','A'..'Z','a'..'z',#\$80..#\$FF]; " 		./lazarus/lcl/lresources.pp
sed -i "5777c\  '_','A'..'Z','a'..'z',#\$80..#\$FF : HandleAlphaNum; " 			./lazarus/lcl/lresources.pp
echo "修改./lazarus/lcl/lresources.pp..."sed -i "1420c\   Alpha = ['A'..'Z', 'a'..'z', '_',#\$80..#\$FF]; " 	./lazarus/components/lazutils/lazstringutils.pas
echo "修改./lazarus/components/lazutils/lazstringutils.pas..."sed -i "4927c (Result[I] in ['a'..'z', 'A'..'Z', '_',#\$80..#\$FF]) or " ./lazarus/components/ideintf/propedits.pp
echo "修改./lazarus/components/ideintf/propedits.pp..."
echo "laz2.2.4修改bug和汉化全部完成。另外需要运行sh fpc2cn.sh修改fpc3.2.2"

该脚本保存为 laz2cn.sh, 终端中进入目录运行之:

cd ~/fpcupdeluxe
sh laz2cn.sh

眨眼就结束,结果如图:
修改源码结果

三、编译并测试

重新编译,为了简单,因为fpc已经OK了,我们就直接用命令编译:

cd lazarus
make all

简单吧,哈哈哈!
在我的8年前的联想X250电脑上只需几分钟,编译完成如下图:
编译完成
完成后,桌面自动生成了快捷图标,美丽的花豹!双击运行。
填入测试代码如下图:
测试中文变量名
我这里的变量和控件名都用了中文!
用快捷 F9 编译运行如下:
运行结果

四、后记

自己动手快速为一个大型开发工具新增“中文变量名”支持功能,在以前依赖别人的商品软件时代是不可想象的。我从未见过如此厚颜NB 之物,现在你就见到咯,它就是开源的Lazarus !
现在我正在用它为客户开发一套跨平台的中文软件,速度快得惊人,我可以直接用它写需求分析模型,让用户立马可见所期望的软件模样…。
别人996加班写bug找bug,有了它,我就可自由吃饭游泳打东东!

这篇关于【Deepin Linux 下 软开神器Lazarus支持中文变量名的安装方法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425414

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal