Инструмент для преобразования.Glade (или XML) файла в исходный код C
Я ищу инструмент, который может конвертировать.Glade (или XML) файл в C источника.
Я пробовал g2c (Glade To C Translator), но я ищу бинарный Windows.
Любой знает хороший инструмент для окна.
Спасибо,
PP.
3 ответа
Решение
У меня glade2 работает. хотя, если вы используете новые функции glade3, это вам не поможет..
Вам не нужен инструмент. Просто напишите скрипт на вашем любимом языке сценариев, чтобы отформатировать ваш файл glade как строковый литерал C:
Например, давайте назовем это glade_file.c
:
const gchar *my_glade_file =
"<interface>"
"<object class=\"GtkDialog\">"
"<et-cetera />"
"</object>"
"</interface>";
компилировать glade_file.c
в свою программу, а затем сделайте это при создании интерфейса:
extern const gchar *my_glade_file;
result = gtk_builder_add_from_string(builder, my_glade_file, -1, &error);
Для этого мне пришлось написать небольшой скрипт на python, надеюсь, это поможет другим:
import xml.dom.minidom
class XmlWriter:
def __init__(self):
self.snippets = []
def write(self, data):
if data.isspace(): return
self.snippets.append(data)
def __str__(self):
return ''.join(self.snippets)
if __name__ == "__main__":
writer = XmlWriter()
xml = xml.dom.minidom.parse("example.glade")
xml.writexml(writer)
strippedXml = ("%s" % (writer)).replace('"', '\\"')
byteCount = len(strippedXml)
baseOffset=0
stripSize=64
output = open("example.h", 'w')
output.write("static const char gladestring [] = \n{\n")
while baseOffset < byteCount:
skipTrailingQuote = 0
if baseOffset+stripSize < byteCount and strippedXml[baseOffset+stripSize] == '"':
skipTrailingQuote = 1
output.write(' "%s"\n' % (strippedXml[baseOffset:baseOffset+stripSize+skipTrailingQuote]))
baseOffset += stripSize + skipTrailingQuote
output.write("};\n")
output.close()