Arran 发表于 2018-5-24 03:10:37

解决dsl词典部分内容不显示问题

本帖最后由 Arran 于 2018-5-24 03:13 编辑

先说结论,把附件解压得到的article-style.css放到~/.goldendict/下面就好,windows应该是%APPDATA%/goldendict
其实就是把官方的article-style.css第450行关于.dst_opt的内容从display:none改成了display:inline.

下了一个dsl版本的longman DOCE 5th,然后发现好多内容是白的,如下图。


最开始我以为是字典下坏了,不过语音什么都是正常的,能清晰地听到“apple pie”,然后我就把dsl.dz解压打开看了下,没问题呀,有这个短语。


关于怎么打开dsl.dz有够折腾的- -

后来发现mac版的goldendict好像是用的mac自带的webkit内核浏览器控件,自带一个“审核元素”,看到一个很可恶的none


通过元素审查器查看css文件以后,第一句话就是
<!-- Built-in css -->
然后我去github上看了下代码库,是内置的article-style.css,本来我以为这种资源文件应该会被放在application包内的某个文件夹下面,找了一圈发现并没有,应该是被QT直接嵌到某个静态资源文件里面了。
本来打算clone下来修改好从新编译下,后来发现他存配置文件的目录~/.goldendict下面有个style文件夹,猜测是放自定义样式的,放进去以后并没有用,Google了一下应该放到~/.goldendict文件下面,放进去以后真的管用了。


下面是打开dsl.dz的过程,可能跟c语言程序有点关系不感兴趣的可以返回了。
------------------------------------------------睿智的分割线------------------------------------------
dsl.dz使用dictzip压缩的文件,打算在mac上装一个。
从github上clone下来以后发现并没有做mac平台适配,并且6年没更新了,跟着他的INSTALL装了一下,然后就发现他用的libtool编译的。
都知道macOS上面Xcode Command Tools装的libtool和Linux的libtool完全是两个东西,于是装个一个glibtool,接着把Makefile里面,LIBTOOL = libtool这一行改成LIBTOOL = glibtool。
总算是能开始编译了。
我不知道写这个程序的人6年前是怎么编译通过的,有一行#include "getopt_long.h"但是他的代码库里面并没有这个文件,Google了一波说是有个头文件叫<getopt.h>里面定义了函数getopt_long(**),看了一下他确实是用了getopt_long这个函数,于是帮他改成了#include <getopt.h>顺便还加上了#include <limits.h>。
接着就是一大段的“Undefined symbols”,大量用到了一个"PRINTF(**)"看上去明显是一个自定义宏,但是cat *.h | grep PRINTF并没有找到这个定义,Google一下也没找到这个是哪个库的宏。
本来想算了懒得搞了,不过注意到他PRINTF的用法是PRINTF(DBG_**, ("**", **))。“DBG”,直觉上讲是DEBUG的缩写,看上去应该是打印debug信息调试用的,于是全部注释掉。
还不错编译完了。
接着就是喜闻乐见的"segmentation fault",不过好在在看dictzip用法的时候发现他man写的不错,应该是不打算维护了然后写下来交给别人的。
description第一句话就是"dictzipcompresses files using the gzip(1) algorithm (LZ77) in a manner which is completely compatible with the gzip file format."
于是直接mv成.gz,然后gunzip就解出来dsl了,dsl又是纯文本文件能直接打开,虽然大了点,不过好点的文本编辑器都支持分段加载多以打开也是很快的。
emmm....所以,为啥不直接用gzip呢。

simonfire 发表于 2018-5-24 05:16:29

本帖最后由 simonfire 于 2018-5-24 05:28 编辑

不用那么麻烦,在首选项→高级里勾选展开可选部分就行了。
当年我也遇到这个问题,死活搞不懂,因为之前那个版本的GD是可以显示的,就没往设置上想,当时的解决办法是用老版的配置文件覆盖新版的。直到有一次看到设置里这个展开可选部分选项,瞬间泪流满面。

我当时覆盖的应该是配置文件config里的这一句,0就不显示,1是显示
<alwaysExpandOptionalParts>1</alwaysExpandOptionalParts>

Arran 发表于 2018-5-24 10:01:04

simonfire 发表于 2018-5-24 05:16
不用那么麻烦,在首选项→高级里勾选展开可选部分就行了。
当年我也遇到这个问题,死活搞不懂,因为之前那 ...

蓝瘦……_(:3」∠)_

hyqq2015 发表于 2018-5-24 12:10:54

都是牛人,所以杀鸡习惯用牛刀{:4_91:}

Arran 发表于 2018-5-24 13:08:47

hyqq2015 发表于 2018-5-24 12:10
都是牛人,所以杀鸡习惯用牛刀

至少折腾数来dsl.dz是咋回事了。
打算抽空弄明白goldendict是怎么把那dsl标签变成html标签的,说不定能弄出来一个自动做anki卡片的小玩意。

hyqq2015 发表于 2018-5-24 13:50:17

Arran 发表于 2018-5-24 13:08
至少折腾数来dsl.dz是咋回事了。
打算抽空弄明白goldendict是怎么把那dsl标签变成html标签的,说不定能弄 ...

折腾肯定是有收获的。

期待你的anki小玩意。

vigorous 发表于 2018-5-24 19:48:08

本帖最后由 vigorous 于 2018-5-24 20:26 编辑

不知道你用的是什么版本,不钩选“展开可选部分”选项时,试试点击最上面主词条右边的“+”号切换显示和隐藏 [​*][/*] 的内容。
还有一个快捷键是 Ctrl+8,这个操作会重新加载页面。

Ctrl+8, Ctrl+* (In main and popup windows) expand/collapse optional areas for all articles

如果卡片太长,您可以减少屏幕上显示的文本数量。使用 [​*] 和 [/*] 标记将卡片的某些部分标为可选:
这些部分仅在完整方式下才显示。您可以将卡片除词条之外的任何部分用 [​*] 和 [/*] 标记括起来。ABBYY Lingvo x3 以不同的颜色显示可选文本。
DSL 标签可以参考官方的文档 DSL卡片结构

不过感觉 GoldenDict 上的 DSL 词典只用到最基本的功能,可能复杂的功能不支持?

Arran 发表于 2018-5-26 13:24:53

vigorous 发表于 2018-5-24 19:48
不知道你用的是什么版本,不钩选“展开可选部分”选项时,试试点击最上面主词条右边的“+”号切换显示和隐 ...

他的文档里面倒是有结构和标签说明,应该是要自己想怎么换成html,直接用GoldenDict的逻辑好了,他的代码有关读取和转换dsl的部分就放在"dsl.cc"和"dsl_details.cc"里面。解析dsl成DOM-tree也还好,麻烦的是可能会有很多非闭合标签,各种不正常的嵌套关系,类似于apple这种

yuanjiehui 发表于 2018-6-26 11:15:57

2楼的很管用,很方便。谢谢!顺便问一下,这个软件是免费的,不存在侵权问题吧?

bbs 发表于 2018-6-26 22:17:07

谢谢楼主。难得找到一个定义得这么全面的css。下载试试GD手机版有没有效。
页: [1]
查看完整版本: 解决dsl词典部分内容不显示问题