Skip to content

Commit

Permalink
Make legacy API v1 work again
Browse files Browse the repository at this point in the history
  • Loading branch information
th-we committed Feb 8, 2024
1 parent 818229a commit 9f99f14
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 16 deletions.
2 changes: 1 addition & 1 deletion plgconfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ var config = {
plgCategory: 'MEI Export',
pluginFilename: 'sibmei4.plg',
linkLibraries: [
'libmei4.plg', 'sibmei4_batch_mxml.plg', 'sibmei4_batch_sib.plg', 'sibmei4_test_runner.plg', 'sibmei4_extension_test.plg'
'libmei4.plg', 'sibmei4_batch_mxml.plg', 'sibmei4_batch_sib.plg', 'sibmei4_test_runner.plg', 'sibmei4_extension_test.plg', 'sibmei4_legacy_extension_api_v1_test.plg'
],
importDir: './import',
buildDir: './build',
Expand Down
97 changes: 85 additions & 12 deletions src/Extensions.mss
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ function RegisterAvailableExtensions (availableExtensions, apiVersionByPlgName)
{
error = null;
}
case (extensionSemver[0] = '1') {
// It's O.K., we're giving it a legacy version of the API
error = null;
}
case (
(apiSemver[0] < extensionSemver[0])
or (apiSemver[0] = extensionSemver[0] and apiSemver[1] < extensionSemver[1])
Expand Down Expand Up @@ -164,13 +168,40 @@ function CreateApiObject (apiVersion) {
'FormattedText', FormattedText,
'UnformattedText', UnformattedText
);
apiObject.SetMethod('RegisterSymbolHandlers', Self, 'ExtensionAPI_RegisterSymbolHandlers');
apiObject.SetMethod('RegisterTextHandlers', Self, 'ExtensionAPI_RegisterTextHandlers');
apiObject.SetMethod('RegisterLineHandlers', Self, 'ExtensionAPI_RegisterLineHandlers');
apiObject.SetMethod('MeiFactory', Self, 'ExtensionAPI_MeiFactory');
apiObject.SetMethod('AddFormattedText', Self, 'ExtensionAPI_AddFormattedText');
apiObject.SetMethod('GenerateControlEvent', Self, 'ExtensionAPI_GenerateControlEvent');
apiObject.SetMethod('GenerateModifier', Self, 'ExtensionAPI_GenerateModifier');


switch (apiVersion)
{
case (2)
{
// Current version
apiObject.SetMethod('RegisterSymbolHandlers', Self, 'ExtensionAPI_RegisterSymbolHandlers');
apiObject.SetMethod('RegisterTextHandlers', Self, 'ExtensionAPI_RegisterTextHandlers');
apiObject.SetMethod('RegisterLineHandlers', Self, 'ExtensionAPI_RegisterLineHandlers');
apiObject.SetMethod('MeiFactory', Self, 'ExtensionAPI_MeiFactory');
apiObject.SetMethod('AddFormattedText', Self, 'ExtensionAPI_AddFormattedText');
apiObject.SetMethod('GenerateControlEvent', Self, 'ExtensionAPI_GenerateControlEvent');
apiObject.SetMethod('GenerateModifier', Self, 'ExtensionAPI_GenerateModifier');
}
case (1) {
// Legacy version
apiObject.SetMethod('RegisterSymbolHandlers', Self, 'LegacyExtensionAPIv1_RegisterSymbolHandlers');
apiObject.SetMethod('RegisterTextHandlers', Self, 'LegacyExtensionAPIv1_RegisterTextHandlers');
apiObject.SetMethod('RegisterLineHandlers', Self, 'LegacyExtensionAPIv1_RegisterLineHandlers');
apiObject.SetMethod('HandleControlEvent', Self, 'LegacyExtensionAPIv1_HandleControlEvent');
apiObject.SetMethod('HandleModifier', Self, 'LegacyExtensionAPIv1_HandleModifier');
apiObject.SetMethod('AddFormattedText', Self, 'ExtensionAPI_AddFormattedText');
apiObject.SetMethod('GenerateControlEvent', Self, 'LegacyExtensionAPIv1_GenerateControlEvent');
apiObject.SetMethod('AddControlEventAttributes', Self, 'LegacyExtensionAPIv1_AddControlEventAttributes');
apiObject.SetMethod('HandleLineTemplate', Self, 'LegacyExtensionAPIv1_HandleLineTemplate');
apiObject.SetMethod('MeiFactory', Self, 'LegacyExtensionAPIv1_MeiFactory');
}
default
{
ExitPlugin('Unsupported extension API version: ' & apiVersion);
}
}

return apiObject;
} //$end

Expand Down Expand Up @@ -210,11 +241,53 @@ function ExtensionAPI_GenerateModifier (this, bobj, element) {
} //$end


function HandleTemplate (this, bobj, template) {
element = MeiFactory(template, bobj);
GenerateControlEvent(bobj, element);
return element;
} //$end

///// Legacy methods
function LegacyExtensionAPIv1_RegisterSymbolHandlers (this, symbolHandlerDict, plugin) {
for each Name symbolIdType in symbolHandlerDict
{
RegisterHandlers(SymbolHandlers[symbolIdType], symbolHandlerDict[symbolIdType], plugin);
}
} //$end

function LegacyExtensionAPIv1_RegisterTextHandlers (this, textHandlerDict, plugin) {
for each Name styleType in textHandlerDict
{
RegisterHandlers(TextHandlers[styleType], textHandlerDict[styleType], plugin);
}
} //$end

function LegacyExtensionAPIv1_RegisterLineHandlers (this, lineHandlerDict, plugin) {
for each Name styleType in lineHandlerDict
{
RegisterHandlers(LineHandlers[styleType], lineHandlerDict[styleType], plugin);
}
} //$end

function LegacyExtensionAPIv1_HandleControlEvent (this, bobj, template) {
return GenerateControlEvent(bobj, MeiFactory(template));
} //$end

function LegacyEtensionAPIv1_HandleModifier (this, bobj, template) {
return GenerateModifier(bobj, MeiFactory(template));
} //$end

function LegacyExtensionAPIv1_GenerateControlEvent (this, bobj, elementName) {
Trace(NGBLib.TypeOf(bobj));
return AddControlEventAttributes(bobj, libmei.@elementName());
} //$end

function LegacyExtensionAPIv1_AddControlEventAttributes (this, bobj, element) {
return AddControlEventAttributes(bobj, element);
} //$end

function LegacyExtensionAPIv1_HandleLineTemplate (this, lobj, template) {
return GenerateControlEvent(lobj, MeiFactory(template));
} //$end

function LegacyExtensionAPIv1_MeiFactory (this, templateObject, bobj) {
return MeiFactory(templateObject, bobj);
} //$end


function AssertIdType (isIdType, idType, functionName) {
Expand Down
9 changes: 6 additions & 3 deletions test/mocha/test-extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ const assert = require('assert');
const xpath = require('fontoxpath');
const utils = require('./utils');

describe("Extensions", function() {
const mei = utils.getTestMeiDom('extensions.mei');
describe("Extensions", function() {testExtension('extensions.mei');});
describe("Legacy extension API v1", function() {testExtension('legacy_extensions_api_v1.mei');});

function testExtension(meiFile) {
const mei = utils.getTestMeiDom(meiFile);
const symbols = xpath.evaluateXPath('//*:symbol', mei);
const text = xpath.evaluateXPath('//*:anchoredText', mei);
const line = xpath.evaluateXPath('//*:line', mei);
Expand All @@ -32,4 +35,4 @@ describe("Extensions", function() {
it("exports custom lines by name", function(){
utils.assertAttrValueFormat([line], 'type', 'myline');
});
});
}
5 changes: 5 additions & 0 deletions test/sib-test/Run.mss
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ function Run() {
CreateSparseArray('sibmei4_extension_test')
);

// Export with legacy API
sibmei4.InitGlobals(CreateSparseArray('sibmei4_legacy_extension_api_v1_test'));
score = sibmei4.GetScore(_SibTestFileDirectory & 'extensions.sib');
sibmei4.DoExport(score, _SibTestFileDirectory & 'legacy_extensions_api_v1.mei');

// Make sure we have an open window so Sibelius will neither crash nor
// decide to open a new window later that will force the mocha test results
// into the background.
Expand Down

0 comments on commit 9f99f14

Please sign in to comment.