summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-08-31 23:07:20 +0200
committerJules Laplace <julescarbon@gmail.com>2020-08-31 23:07:20 +0200
commit22721a013bdd10d5eb395ba18453585f5f3f1f7f (patch)
tree5a920e31d6026ed5dc55265e5fd057febccc50e3 /StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js
parentd22d51a1ae49680015326857360eb699f31efced (diff)
rebuild the ios platform and the plugins
Diffstat (limited to 'StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js')
-rw-r--r--StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js b/StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js
new file mode 100644
index 00000000..9e200b50
--- /dev/null
+++ b/StoneIsland/platforms/ios/cordova/lib/BridgingHeader.js
@@ -0,0 +1,123 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+'use strict';
+
+const fs = require('fs-extra');
+const CordovaError = require('cordova-common').CordovaError;
+
+function BridgingHeader (bridgingHeaderPath) {
+ this.path = bridgingHeaderPath;
+ this.bridgingHeaders = null;
+ if (!fs.existsSync(this.path)) {
+ throw new CordovaError('BridgingHeader.h is not found.');
+ }
+ this.bridgingHeaders = this.__parseForBridgingHeader(fs.readFileSync(this.path, 'utf8'));
+}
+
+BridgingHeader.prototype.addHeader = function (plugin_id, header_path) {
+ this.bridgingHeaders.push({ type: 'code', code: `#import "${header_path}"\n` });
+};
+
+BridgingHeader.prototype.removeHeader = function (plugin_id, header_path) {
+ this.bridgingHeaders = this.bridgingHeaders.filter(function (line) {
+ if (this.found) {
+ return true;
+ }
+ if (line.type === 'code') {
+ const re = new RegExp(`#import\\s+"${preg_quote(header_path)}"(\\s*|\\s.+)(\\n|$)`);
+ if (re.test(line.code)) {
+ this.found = true;
+ return false;
+ }
+ }
+ return true;
+ }, { found: false });
+};
+
+BridgingHeader.prototype.write = function () {
+ const text = this.__stringifyForBridgingHeader(this.bridgingHeaders);
+ fs.writeFileSync(this.path, text, 'utf8');
+};
+
+BridgingHeader.prototype.__stringifyForBridgingHeader = function (bridgingHeaders) {
+ return bridgingHeaders.map(obj => obj.code).join('');
+};
+
+BridgingHeader.prototype.__parseForBridgingHeader = function (text) {
+ let i = 0;
+ const list = [];
+ let type = 'code';
+ let start = 0;
+ while (i < text.length) {
+ switch (type) {
+ case 'comment':
+ if (i + 1 < text.length && text[i] === '*' && text[i + 1] === '/') {
+ i += 2;
+ list.push({ type, code: text.slice(start, i) });
+ type = 'code';
+ start = i;
+ } else {
+ i += 1;
+ }
+ break;
+ case 'line-comment':
+ if (i < text.length && text[i] === '\n') {
+ i += 1;
+ list.push({ type, code: text.slice(start, i) });
+ type = 'code';
+ start = i;
+ } else {
+ i += 1;
+ }
+ break;
+ case 'code':
+ default:
+ if (i + 1 < text.length && text[i] === '/' && text[i + 1] === '*') { // comment
+ if (start < i) {
+ list.push({ type, code: text.slice(start, i) });
+ }
+ type = 'comment';
+ start = i;
+ } else if (i + 1 < text.length && text[i] === '/' && text[i + 1] === '/') { // line comment
+ if (start < i) {
+ list.push({ type, code: text.slice(start, i) });
+ }
+ type = 'line-comment';
+ start = i;
+ } else if (i < text.length && text[i] === '\n') {
+ i += 1;
+ list.push({ type, code: text.slice(start, i) });
+ start = i;
+ } else {
+ i += 1;
+ }
+ break;
+ }
+ }
+ if (start < i) {
+ list.push({ type, code: text.slice(start, i) });
+ }
+ return list;
+};
+
+function preg_quote (str, delimiter) {
+ return (`${str}`).replace(new RegExp(`[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\${delimiter || ''}-]`, 'g'), '\\$&');
+}
+
+module.exports.BridgingHeader = BridgingHeader;