Преобразование объекта MathType в MathML на Mac - PullRequest
0 голосов
/ 01 февраля 2012

Я использую MathType SDK из Python для получения MathML из объектов MathType.В Windows MTXFormEqn() может заменить объект OLE MathType в буфере обмена его преобразованным эквивалентом.Кажется, это стандартный подход.

lib.MTXFormSetTranslator(4, TRANSLATOR_TDL_FILENAME)
lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None)

Я пытаюсь перенести это на OSX, но не могу понять, какие данные передать в MTXFormEqn().Вызов приведенного выше кода простого возврата mtOK и MTXFormGetStatus() сообщает об общей ошибке.

Эта диаграмма предполагает, что источником должен быть файл 'вместо'.В документации указан «PICT» в качестве возможного формата ввода.MTEquationOnClipboard() сообщает объект буфера обмена MathType как тип WMF (2), но я могу получить его PICT эквивалент, используя NSPasteboard.

pb = NSPasteboard.generalPasteboard()
data = pb.dataForType_(NSPICTPboardType)

Кто-нибудь успешно использовал MTXFormEqn() для перевода MathTypeобъекты на Mac?Я не могу найти никаких примеров (в документации или в Интернете), которые используют что-либо, кроме стандартного метода буфера обмена в буфер обмена из Windows.


Вот урезанная версия рабочего кода Windows.Проверка ошибок и определения констант опущены для краткости.

import sys
from ctypes import *

TRANSLATOR_TDL = 'MathML2 (namespace attr).tdl'

def main():
    # On OSX, use the following line instead:
    #    lib = cdll.LoadLibrary('/Library/Frameworks/MT6Lib.framework/MT6Lib')
    lib = windll.LoadLibrary('MT6.dll')
    lib.MTAPIConnect(0, 30)
    lib.MTXFormSetTranslator(4, TRANSLATOR_TDL)

    eq_type = lib.MTEquationOnClipboard()
    if eq_type == 8:            # mtOLE2_EQUATION -- Windows only
        lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
                       mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
                       '', None)
        #
        # MathML contents now on clipboard as string
        #
    elif eq_type == 2:          # mtWMF_EQUATION -- Mac OSX
        ???
    return 0

if __name__ == "__main__":
    sys.exit(main())

1 Ответ

0 голосов
/ 03 февраля 2012

Если в буфере обмена (любого типа) есть данные уравнения MathType, то

lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None) 

должно работать на любой платформе (Mac или Win). Как вы получаете данные MT eqn в буфер обмена? У вас есть способ сказать, что на самом деле находится в буфере обмена, когда вы вызываете MTXFormEqn?

...