duangsuse::Echo
但是没有回应,因为他们吃光了所有牡蛎...
🤔 文本图层和普通图层、移动对象的方法都容易找到,我觉得如果有下次,可以写一个 GIMP 插件来画类似这样的动态图... 甚至可以自动执行过程可视化
总算让人省了一回心... (辣鸡 #Python 的 Unicode 支持不好,我使用 Unicode 符号做图层名,结果 python 索引到的字符串里居然都是不完整编码的,直接区间下标访问不方便,气死
duangsuse::Echo
这个脚本只是需要一个简单的逻辑,来帮助我完成对程序可视化图片的操作
规范大概是这样:
要提供一个 GUI,展示变量列表
List(Label, Textfield)
『同步』操作:利用正则表达式解析所有键值对 (k = v)
『更新』操作:替换原文本为更新值后的文本
这些图层的名字做固定处理即可得到相应数据指针的名字
每个项目都对照到了
提供一个『上移 Code 指针』操作和一个『下移 Code 指针』操作
Code 是一个文本图层,包含程式码,目前仅仅创建 VFS 不需要关心其内容Trace 是一个文本图层,包含变量的追踪要提供一个 GUI,展示变量列表
List(Label, Textfield)
『同步』操作:利用正则表达式解析所有键值对 (k = v)
/(\w+)\s*=\s*(.+)$/ 更新列表『更新』操作:替换原文本为更新值后的文本
Visual 是可视化图层组,包含所有需要可视化的图层这些图层的名字做固定处理即可得到相应数据指针的名字
Vals 是不变量的图层组,其中每个图层都对照了一个 Visual 里的图层,映射方式是 ("v" + x)
目前也只是建模,不做其他考虑Pointers 是可视化指针组,其中项目都是图层组,每个项目都对照到了
Visual 里的图层或 Code,映射方式是 ("p" + x.lower() + "s")
提供一个『更新箭头』操作,根据指定的『Trace 层』变量名自动显示 Trace 层变量指向(数组下标,从 0 起始)并且隐藏前一个箭头的显示(上次设置的箭头)提供一个『上移 Code 指针』操作和一个『下移 Code 指针』操作
duangsuse::Echo
规范大概是这样: Code 是一个文本图层,包含程式码,目前仅仅创建 VFS 不需要关心其内容 Trace 是一个文本图层,包含变量的追踪 要提供一个 GUI,展示变量列表 List(Label, Textfield) 『同步』操作:利用正则表达式解析所有键值对 (k = v) /(\w+)\s*=\s*(.+)$/ 更新列表 『更新』操作:替换原文本为更新值后的文本 Visual 是可视化图层组,包含所有需要可视化的图层 这些图层的名字做固定处理即可得到相应数据指针的名字 Vals 是不变…
需要使用的 GIMP API:
Gimp.message(str)
Gimp.get_foreground()
gimp.Image.layers
gimp.GroupLayer
gimp.Layer
gimp.Layer.visible~bool
gimp.pdb.gimp_text_layer_get_...
gimp.pdb.gimp_text_layer_set_...
如果从 get_text 读取到空,则读取 markup,忽视任何标签解析
替换的时候还要考虑到变更自动变色的选项,自动改为前景色
需要使用的 Tkintr API:
Gimp.message(str)
Gimp.get_foreground()
gimp.Image.layers
gimp.GroupLayer
gimp.Layer
gimp.Layer.visible~bool
gimp.pdb.gimp_text_layer_get_...
gimp.pdb.gimp_text_layer_set_...
如果从 get_text 读取到空,则读取 markup,忽视任何标签解析
替换的时候还要考虑到变更自动变色的选项,自动改为前景色
需要使用的 Tkintr API:
This media is not supported in your browser
VIEW IN TELEGRAM
之前吐槽 Ruby 的 Nokogiri 不友好的我现在可真的是想死 Nokogiri 了
我真的搞不懂,为什么这一群人要把 XML 解析器通通做成 Pull Parser 的形式,通过 XXXHandler Callbacks 来提供结构解析接口
都说『Pull Parser 性能是最高的』
可是我就不明白啊,有时候要这性能有毛用啊!
为啥我要为了剔除标签这种弱智的小问题,去专门写个 handler 去弄???
如果想要直观,就不能自己先建好了文档树提着来见?性能真的有必要让你『不提供』这种解析方式吗?
为啥 Python Regex 连个粘滞功能都没有?这真的很脑残
还不如 Perl 了,这么多年了标准库辣鸡,还是没有变啊,这都能叫『脚本语言』?
可是我就不明白啊,有时候要这性能有毛用啊!
为啥我要为了剔除标签这种弱智的小问题,去专门写个 handler 去弄???
如果想要直观,就不能自己先建好了文档树提着来见?性能真的有必要让你『不提供』这种解析方式吗?
为啥 Python Regex 连个粘滞功能都没有?这真的很脑残
还不如 Perl 了,这么多年了标准库辣鸡,还是没有变啊,这都能叫『脚本语言』?
Forwarded from Rachel 碎碎念 (IFTTT)
Twitter
清凌渡
从这个角度就很容易理解了
def trimMarks(m):
output = str()
waitClose = False
if len(m) == 0: return output
for i in range(0, len(m)):
char = m[i]
if char == '<': waitClose = True
if waitClose:
if char == '>': waitClose = False
else: output += char
return output
... 我只好手写了,手生... 居然还写了一段时间...
duangsuse::Echo
规范大概是这样: Code 是一个文本图层,包含程式码,目前仅仅创建 VFS 不需要关心其内容 Trace 是一个文本图层,包含变量的追踪 要提供一个 GUI,展示变量列表 List(Label, Textfield) 『同步』操作:利用正则表达式解析所有键值对 (k = v) /(\w+)\s*=\s*(.+)$/ 更新列表 『更新』操作:替换原文本为更新值后的文本 Visual 是可视化图层组,包含所有需要可视化的图层 这些图层的名字做固定处理即可得到相应数据指针的名字 Vals 是不变…
要提供这样的插件接口适配器:
class GimpAccess:
def init(self, gimp = gimp, pdb = gimp.pdb):
def message(self, text):
def layer_root(self):
def layer_is_group(self, layer):
def layer_get_children(self, layer):
def layer_hide(self, layer):
def layer_show(self, layer):
def get_text_layer_marks(self, layer):
def set_text_layer_marks(self, layer):
class VisualGimpAbstraction (GimpAccess):
def layer_get_by_name(name): # private
def layer_get_by_path(path):
def check_layers(): # private
def codeLayer():
def traceLayer():
def visualLayers():
def codePointerLayer():
def pointerLayerOf(layer):
def valLayerOf(name):
class VisualHelper (VisualGimpAbstraction):
def traceMap():
class Helpers: pass
def _trimMarks(m):
Helpers.trimMarkups = _trimMarkUps
class GimpAccess:
def init(self, gimp = gimp, pdb = gimp.pdb):
def message(self, text):
def layer_root(self):
def layer_is_group(self, layer):
def layer_get_children(self, layer):
def layer_hide(self, layer):
def layer_show(self, layer):
def get_text_layer_marks(self, layer):
def set_text_layer_marks(self, layer):
class VisualGimpAbstraction (GimpAccess):
def layer_get_by_name(name): # private
def layer_get_by_path(path):
def check_layers(): # private
def codeLayer():
def traceLayer():
def visualLayers():
def codePointerLayer():
def pointerLayerOf(layer):
def valLayerOf(name):
class VisualHelper (VisualGimpAbstraction):
def traceMap():
class Helpers: pass
def _trimMarks(m):
Helpers.trimMarkups = _trimMarkUps