En un hilo de comentarios bastante oscuro, alguien explicó dónde se puede encontrar la lista de palabras que Apple utiliza para activar el salvapantallas. Está en /System/Library/Graphics/Quartz\ Composer\ Plug-Ins/WOTD.plugin/Contents/Resources/NOAD_wotd_list.txt
. El archivo tiene el siguiente aspecto:
m_en_us1282510 quinsy
m_en_us1273791 orbicular
m_en_us1220945 alimony
m_en_us1250517 genome
Es una lista de entradas separadas por pestañas. A la derecha tienes la palabra, y a la izquierda, lo que parece un ID. Pero, ¿para qué es un ID, y cómo podrías encontrarlo para otra palabra que no esté ya en la lista?
Como es de esperar, el ID se refiere a una entrada del diccionario por defecto de Apple, el "New Oxford American Dictionary". (Eso es lo que significa "NOAD" en la ruta de la lista de palabras de arriba).
Cómo encontrar las identificaciones para otros ¿palabras?
Un compañero llamado Joseph Gentle, en una serie de entradas de blog, muestra cómo llegar a los datos subyacentes a los diccionarios de Apple. En su "Los diccionarios de Apple, parte 2" post, señala el código que desempaqueta el archivo binario correspondiente (almacenado en /Library/Dictionaries
) en XML. Utilizando el dedict.c
y strip.c
archivos encontrados aquí y siguiendo el ejemplo de Gentle, utilicé los siguientes comandos bash para llegar al XML de la NOAD (estos comandos se ejecutan desde el directorio donde se descargó el dedict.c
y strip.c
archivos):
clang dedict.c -Wall -lz -o dedict
clang strip.c -Wall -lz -o strip
./dedict "New Oxford American Dictionary" | ./strip > dict.xml
Cuando head
-ed las primeras líneas del dict.xml
archivo, vi algo prometedor, con entradas que se parecían a esto:
<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="m_en_us1219333" d:title="abode" class="entry">
Observe que id
param... ¡es un identificador exactamente igual al de la lista de palabras del salvapantallas!
Escribí el siguiente Ruby script para analizar el XML, y luego, usando mi propia lista de palabras, crear un nuevo archivo de salvapantallas que asigna mis propias palabras a sus identificaciones en el diccionario:
raw = File.open("./dict.xml").read
my_words = File.open("./word_list.csv").readlines.map { |line| line.split(',')[1] }
word_id_map = {}
raw.scan(/<d:entry .*? id="(.*?)" d:title="(.*?)" class="entry">/).each do |entry|
word_id_map[entry[1]] = entry[0]
end
my_words.each do |word|
if id = word_id_map[word]
puts [id, word].join(' ')
end
end
Cuando sustituí el archivo original del salvapantallas por este nuevo, funcionó. Ahora puedes tener un salvapantallas "Palabra del día" que da definiciones para las palabras que elijas.
1 votos
¿Ha habido suerte? Parece que no tiene ningún sentido que sólo se puedan seleccionar los diccionarios de inglés y japonés, pero no he encontrado ninguna forma de evitarlo.
1 votos
Parece un proyecto a medias/huevo de pascua abandonado después de OS X 10.8.