ccc-tnt-psd2ui/npm-packages/mac-v2.4.x/ag-psd/dist/text.js
2023-07-24 11:13:08 +08:00

559 lines
22 KiB
JavaScript

"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.encodeEngineData = exports.decodeEngineData = void 0;
var defaultFont = {
name: 'MyriadPro-Regular',
script: 0,
type: 0,
synthetic: 0,
};
var defaultParagraphStyle = {
justification: 'left',
firstLineIndent: 0,
startIndent: 0,
endIndent: 0,
spaceBefore: 0,
spaceAfter: 0,
autoHyphenate: true,
hyphenatedWordSize: 6,
preHyphen: 2,
postHyphen: 2,
consecutiveHyphens: 8,
zone: 36,
wordSpacing: [0.8, 1, 1.33],
letterSpacing: [0, 0, 0],
glyphSpacing: [1, 1, 1],
autoLeading: 1.2,
leadingType: 0,
hanging: false,
burasagari: false,
kinsokuOrder: 0,
everyLineComposer: false,
};
var defaultStyle = {
font: defaultFont,
fontSize: 12,
fauxBold: false,
fauxItalic: false,
autoLeading: true,
leading: 0,
horizontalScale: 1,
verticalScale: 1,
tracking: 0,
autoKerning: true,
kerning: 0,
baselineShift: 0,
fontCaps: 0,
fontBaseline: 0,
underline: false,
strikethrough: false,
ligatures: true,
dLigatures: false,
baselineDirection: 2,
tsume: 0,
styleRunAlignment: 2,
language: 0,
noBreak: false,
fillColor: { r: 0, g: 0, b: 0 },
strokeColor: { r: 0, g: 0, b: 0 },
fillFlag: true,
strokeFlag: false,
fillFirst: true,
yUnderline: 1,
outlineWidth: 1,
characterDirection: 0,
hindiNumbers: false,
kashida: 1,
diacriticPos: 2,
};
var defaultGridInfo = {
isOn: false,
show: false,
size: 18,
leading: 22,
color: { r: 0, g: 0, b: 255 },
leadingFillColor: { r: 0, g: 0, b: 255 },
alignLineHeightToGridFlags: false,
};
var paragraphStyleKeys = [
'justification', 'firstLineIndent', 'startIndent', 'endIndent', 'spaceBefore', 'spaceAfter',
'autoHyphenate', 'hyphenatedWordSize', 'preHyphen', 'postHyphen', 'consecutiveHyphens',
'zone', 'wordSpacing', 'letterSpacing', 'glyphSpacing', 'autoLeading', 'leadingType',
'hanging', 'burasagari', 'kinsokuOrder', 'everyLineComposer',
];
var styleKeys = [
'font', 'fontSize', 'fauxBold', 'fauxItalic', 'autoLeading', 'leading', 'horizontalScale',
'verticalScale', 'tracking', 'autoKerning', 'kerning', 'baselineShift', 'fontCaps', 'fontBaseline',
'underline', 'strikethrough', 'ligatures', 'dLigatures', 'baselineDirection', 'tsume',
'styleRunAlignment', 'language', 'noBreak', 'fillColor', 'strokeColor', 'fillFlag',
'strokeFlag', 'fillFirst', 'yUnderline', 'outlineWidth', 'characterDirection', 'hindiNumbers',
'kashida', 'diacriticPos',
];
var antialias = ['none', 'crisp', 'strong', 'smooth', 'sharp'];
var justification = ['left', 'right', 'center'];
function upperFirst(value) {
return value.substr(0, 1).toUpperCase() + value.substr(1);
}
function decodeColor(color) {
var c = color.Values;
if (color.Type === 0) { // grayscale
return { r: c[1] * 255, g: c[1] * 255, b: c[1] * 255 }; // , c[0] * 255];
}
else { // rgb
return { r: c[1] * 255, g: c[2] * 255, b: c[3] * 255, a: c[0] }; // , c[0] * 255];
}
}
function encodeColor(color) {
if (color && 'r' in color) {
return ['a' in color ? color.a : 1, color.r / 255, color.g / 255, color.b / 255];
}
else {
return [0, 0, 0, 0];
}
}
function arraysEqual(a, b) {
if (!a || !b)
return false;
if (a.length !== b.length)
return false;
for (var i = 0; i < a.length; i++)
if (a[i] !== b[i])
return false;
return true;
}
function objectsEqual(a, b) {
if (!a || !b)
return false;
for (var _i = 0, _a = Object.keys(a); _i < _a.length; _i++) {
var key = _a[_i];
if (a[key] !== b[key])
return false;
}
for (var _b = 0, _c = Object.keys(b); _b < _c.length; _b++) {
var key = _c[_b];
if (a[key] !== b[key])
return false;
}
return true;
}
function findOrAddFont(fonts, font) {
for (var i = 0; i < fonts.length; i++) {
if (fonts[i].name === font.name)
return i;
}
fonts.push(font);
return fonts.length - 1;
}
function decodeObject(obj, keys, fonts) {
var result = {};
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
var Key = upperFirst(key);
if (obj[Key] === undefined)
continue;
if (key === 'justification') {
result[key] = justification[obj[Key]];
}
else if (key === 'font') {
result[key] = fonts[obj[Key]];
}
else if (key === 'fillColor' || key === 'strokeColor') {
result[key] = decodeColor(obj[Key]);
}
else {
result[key] = obj[Key];
}
}
return result;
}
function encodeObject(obj, keys, fonts) {
var _a;
var result = {};
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
var key = keys_2[_i];
var Key = upperFirst(key);
if (obj[key] === undefined)
continue;
if (key === 'justification') {
result[Key] = justification.indexOf((_a = obj[key]) !== null && _a !== void 0 ? _a : 'left');
}
else if (key === 'font') {
result[Key] = findOrAddFont(fonts, obj[key]);
}
else if (key === 'fillColor' || key === 'strokeColor') {
result[Key] = { Type: 1, Values: encodeColor(obj[key]) };
}
else {
result[Key] = obj[key];
}
}
return result;
}
function decodeParagraphStyle(obj, fonts) {
return decodeObject(obj, paragraphStyleKeys, fonts);
}
function decodeStyle(obj, fonts) {
return decodeObject(obj, styleKeys, fonts);
}
function encodeParagraphStyle(obj, fonts) {
return encodeObject(obj, paragraphStyleKeys, fonts);
}
function encodeStyle(obj, fonts) {
return encodeObject(obj, styleKeys, fonts);
}
function deduplicateValues(base, runs, keys) {
if (!runs.length)
return;
var _loop_1 = function (key) {
var value = runs[0].style[key];
if (value !== undefined) {
var identical = false;
if (Array.isArray(value)) {
identical = runs.every(function (r) { return arraysEqual(r.style[key], value); });
}
else if (typeof value === 'object') {
identical = runs.every(function (r) { return objectsEqual(r.style[key], value); });
}
else {
identical = runs.every(function (r) { return r.style[key] === value; });
}
if (identical) {
base[key] = value;
}
}
var styleValue = base[key];
if (styleValue !== undefined) {
for (var _a = 0, runs_1 = runs; _a < runs_1.length; _a++) {
var r = runs_1[_a];
var same = false;
if (Array.isArray(value)) {
same = arraysEqual(r.style[key], value);
}
else if (typeof value === 'object') {
same = objectsEqual(r.style[key], value);
}
else {
same = r.style[key] === value;
}
if (same)
delete r.style[key];
}
}
};
for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {
var key = keys_3[_i];
_loop_1(key);
}
if (runs.every(function (x) { return Object.keys(x.style).length === 0; })) {
runs.length = 0;
}
}
function decodeEngineData(engineData) {
var _a, _b, _c, _d, _e, _f;
// console.log('engineData', require('util').inspect(engineData, false, 99, true));
var engineDict = engineData.EngineDict;
var resourceDict = engineData.ResourceDict;
var fonts = resourceDict.FontSet.map(function (f) { return ({
name: f.Name,
script: f.Script,
type: f.FontType,
synthetic: f.Synthetic,
}); });
var text = engineDict.Editor.Text.replace(/\r/g, '\n');
var removedCharacters = 0;
while (/\n$/.test(text)) {
text = text.substr(0, text.length - 1);
removedCharacters++;
}
var result = {
text: text,
antiAlias: (_a = antialias[engineDict.AntiAlias]) !== null && _a !== void 0 ? _a : 'smooth',
useFractionalGlyphWidths: !!engineDict.UseFractionalGlyphWidths,
superscriptSize: resourceDict.SuperscriptSize,
superscriptPosition: resourceDict.SuperscriptPosition,
subscriptSize: resourceDict.SubscriptSize,
subscriptPosition: resourceDict.SubscriptPosition,
smallCapSize: resourceDict.SmallCapSize,
};
// shape
var photoshop = (_f = (_e = (_d = (_c = (_b = engineDict.Rendered) === null || _b === void 0 ? void 0 : _b.Shapes) === null || _c === void 0 ? void 0 : _c.Children) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.Cookie) === null || _f === void 0 ? void 0 : _f.Photoshop;
if (photoshop) {
result.shapeType = photoshop.ShapeType === 1 ? 'box' : 'point';
if (photoshop.PointBase)
result.pointBase = photoshop.PointBase;
if (photoshop.BoxBounds)
result.boxBounds = photoshop.BoxBounds;
}
// paragraph style
// const theNormalParagraphSheet = resourceDict.TheNormalParagraphSheet;
// const paragraphSheetSet = resourceDict.ParagraphSheetSet;
// const paragraphProperties = paragraphSheetSet[theNormalParagraphSheet].Properties;
var paragraphRun = engineData.EngineDict.ParagraphRun;
result.paragraphStyle = {}; // decodeParagraphStyle(paragraphProperties, fonts);
result.paragraphStyleRuns = [];
for (var i = 0; i < paragraphRun.RunArray.length; i++) {
var run_1 = paragraphRun.RunArray[i];
var length_1 = paragraphRun.RunLengthArray[i];
var style = decodeParagraphStyle(run_1.ParagraphSheet.Properties, fonts);
// const adjustments = {
// axis: run.Adjustments.Axis,
// xy: run.Adjustments.XY,
// };
result.paragraphStyleRuns.push({ length: length_1, style: style /*, adjustments*/ });
}
for (var counter = removedCharacters; result.paragraphStyleRuns.length && counter > 0; counter--) {
if (--result.paragraphStyleRuns[result.paragraphStyleRuns.length - 1].length === 0) {
result.paragraphStyleRuns.pop();
}
}
deduplicateValues(result.paragraphStyle, result.paragraphStyleRuns, paragraphStyleKeys);
if (!result.paragraphStyleRuns.length)
delete result.paragraphStyleRuns;
// style
// const theNormalStyleSheet = resourceDict.TheNormalStyleSheet;
// const styleSheetSet = resourceDict.StyleSheetSet;
// const styleSheetData = styleSheetSet[theNormalStyleSheet].StyleSheetData;
var styleRun = engineData.EngineDict.StyleRun;
result.style = {}; // decodeStyle(styleSheetData, fonts);
result.styleRuns = [];
for (var i = 0; i < styleRun.RunArray.length; i++) {
var length_2 = styleRun.RunLengthArray[i];
var style = decodeStyle(styleRun.RunArray[i].StyleSheet.StyleSheetData, fonts);
if (!style.font)
style.font = fonts[0];
result.styleRuns.push({ length: length_2, style: style });
}
for (var counter = removedCharacters; result.styleRuns.length && counter > 0; counter--) {
if (--result.styleRuns[result.styleRuns.length - 1].length === 0) {
result.styleRuns.pop();
}
}
deduplicateValues(result.style, result.styleRuns, styleKeys);
if (!result.styleRuns.length)
delete result.styleRuns;
return result;
}
exports.decodeEngineData = decodeEngineData;
function encodeEngineData(data) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
var text = "".concat((data.text || '').replace(/\r?\n/g, '\r'), "\r");
var fonts = [
{ name: 'AdobeInvisFont', script: 0, type: 0, synthetic: 0 },
];
var defFont = ((_a = data.style) === null || _a === void 0 ? void 0 : _a.font) || ((_c = (_b = data.styleRuns) === null || _b === void 0 ? void 0 : _b.find(function (s) { return s.style.font; })) === null || _c === void 0 ? void 0 : _c.style.font) || defaultFont;
var paragraphRunArray = [];
var paragraphRunLengthArray = [];
var paragraphRuns = data.paragraphStyleRuns;
if (paragraphRuns && paragraphRuns.length) {
var leftLength_1 = text.length;
for (var _i = 0, paragraphRuns_1 = paragraphRuns; _i < paragraphRuns_1.length; _i++) {
var run_2 = paragraphRuns_1[_i];
var runLength = Math.min(run_2.length, leftLength_1);
leftLength_1 -= runLength;
if (!runLength)
continue; // ignore 0 size runs
// extend last run if it's only for trailing \r
if (leftLength_1 === 1 && run_2 === paragraphRuns[paragraphRuns.length - 1]) {
runLength++;
leftLength_1--;
}
paragraphRunLengthArray.push(runLength);
paragraphRunArray.push({
ParagraphSheet: {
DefaultStyleSheet: 0,
Properties: encodeParagraphStyle(__assign(__assign(__assign({}, defaultParagraphStyle), data.paragraphStyle), run_2.style), fonts),
},
Adjustments: { Axis: [1, 0, 1], XY: [0, 0] },
});
}
if (leftLength_1) {
paragraphRunLengthArray.push(leftLength_1);
paragraphRunArray.push({
ParagraphSheet: {
DefaultStyleSheet: 0,
Properties: encodeParagraphStyle(__assign(__assign({}, defaultParagraphStyle), data.paragraphStyle), fonts),
},
Adjustments: { Axis: [1, 0, 1], XY: [0, 0] },
});
}
}
else {
for (var i = 0, last = 0; i < text.length; i++) {
if (text.charCodeAt(i) === 13) { // \r
paragraphRunLengthArray.push(i - last + 1);
paragraphRunArray.push({
ParagraphSheet: {
DefaultStyleSheet: 0,
Properties: encodeParagraphStyle(__assign(__assign({}, defaultParagraphStyle), data.paragraphStyle), fonts),
},
Adjustments: { Axis: [1, 0, 1], XY: [0, 0] },
});
last = i + 1;
}
}
}
var styleSheetData = encodeStyle(__assign(__assign({}, defaultStyle), { font: defFont }), fonts);
var styleRuns = data.styleRuns || [{ length: text.length, style: data.style || {} }];
var styleRunArray = [];
var styleRunLengthArray = [];
var leftLength = text.length;
for (var _o = 0, styleRuns_1 = styleRuns; _o < styleRuns_1.length; _o++) {
var run_3 = styleRuns_1[_o];
var runLength = Math.min(run_3.length, leftLength);
leftLength -= runLength;
if (!runLength)
continue; // ignore 0 size runs
// extend last run if it's only for trailing \r
if (leftLength === 1 && run_3 === styleRuns[styleRuns.length - 1]) {
runLength++;
leftLength--;
}
styleRunLengthArray.push(runLength);
styleRunArray.push({
StyleSheet: {
StyleSheetData: encodeStyle(__assign(__assign({ kerning: 0, autoKerning: true, fillColor: { r: 0, g: 0, b: 0 } }, data.style), run_3.style), fonts),
},
});
}
// add extra run to the end if existing ones didn't fill it up
if (leftLength && styleRuns.length) {
styleRunLengthArray.push(leftLength);
styleRunArray.push({
StyleSheet: {
StyleSheetData: encodeStyle(__assign({ kerning: 0, autoKerning: true, fillColor: { r: 0, g: 0, b: 0 } }, data.style), fonts),
},
});
}
var gridInfo = __assign(__assign({}, defaultGridInfo), data.gridInfo);
var WritingDirection = data.orientation === 'vertical' ? 2 : 0;
var Procession = data.orientation === 'vertical' ? 1 : 0;
var ShapeType = data.shapeType === 'box' ? 1 : 0;
var Photoshop = {
ShapeType: ShapeType,
};
if (ShapeType === 0) {
Photoshop.PointBase = data.pointBase || [0, 0];
}
else {
Photoshop.BoxBounds = data.boxBounds || [0, 0, 0, 0];
}
// needed for correct order of properties
Photoshop.Base = {
ShapeType: ShapeType,
TransformPoint0: [1, 0],
TransformPoint1: [0, 1],
TransformPoint2: [0, 0],
};
var defaultResources = {
KinsokuSet: [
{
Name: 'PhotoshopKinsokuHard',
NoStart: '、。,.・:;?!ー―’”)〕]}〉》」』】ヽヾゝゞ々ぁぃぅぇぉっゃゅょゎァィゥェォッャュョヮヵヶ゛゜?!)]},.:;℃℉¢%‰',
NoEnd: '‘“(〔[{〈《「『【([{¥$£@§〒#',
Keep: '―‥',
Hanging: '、。.,',
},
{
Name: 'PhotoshopKinsokuSoft',
NoStart: '、。,.・:;?!’”)〕]}〉》」』】ヽヾゝゞ々',
NoEnd: '‘“(〔[{〈《「『【',
Keep: '―‥',
Hanging: '、。.,',
},
],
MojiKumiSet: [
{ InternalName: 'Photoshop6MojiKumiSet1' },
{ InternalName: 'Photoshop6MojiKumiSet2' },
{ InternalName: 'Photoshop6MojiKumiSet3' },
{ InternalName: 'Photoshop6MojiKumiSet4' },
],
TheNormalStyleSheet: 0,
TheNormalParagraphSheet: 0,
ParagraphSheetSet: [
{
Name: 'Normal RGB',
DefaultStyleSheet: 0,
Properties: encodeParagraphStyle(__assign(__assign({}, defaultParagraphStyle), data.paragraphStyle), fonts),
},
],
StyleSheetSet: [
{
Name: 'Normal RGB',
StyleSheetData: styleSheetData,
},
],
FontSet: fonts.map(function (f) { return ({
Name: f.name,
Script: f.script || 0,
FontType: f.type || 0,
Synthetic: f.synthetic || 0,
}); }),
SuperscriptSize: (_d = data.superscriptSize) !== null && _d !== void 0 ? _d : 0.583,
SuperscriptPosition: (_e = data.superscriptPosition) !== null && _e !== void 0 ? _e : 0.333,
SubscriptSize: (_f = data.subscriptSize) !== null && _f !== void 0 ? _f : 0.583,
SubscriptPosition: (_g = data.subscriptPosition) !== null && _g !== void 0 ? _g : 0.333,
SmallCapSize: (_h = data.smallCapSize) !== null && _h !== void 0 ? _h : 0.7,
};
var engineData = {
EngineDict: {
Editor: { Text: text },
ParagraphRun: {
DefaultRunData: {
ParagraphSheet: { DefaultStyleSheet: 0, Properties: {} },
Adjustments: { Axis: [1, 0, 1], XY: [0, 0] },
},
RunArray: paragraphRunArray,
RunLengthArray: paragraphRunLengthArray,
IsJoinable: 1,
},
StyleRun: {
DefaultRunData: { StyleSheet: { StyleSheetData: {} } },
RunArray: styleRunArray,
RunLengthArray: styleRunLengthArray,
IsJoinable: 2,
},
GridInfo: {
GridIsOn: !!gridInfo.isOn,
ShowGrid: !!gridInfo.show,
GridSize: (_j = gridInfo.size) !== null && _j !== void 0 ? _j : 18,
GridLeading: (_k = gridInfo.leading) !== null && _k !== void 0 ? _k : 22,
GridColor: { Type: 1, Values: encodeColor(gridInfo.color) },
GridLeadingFillColor: { Type: 1, Values: encodeColor(gridInfo.color) },
AlignLineHeightToGridFlags: !!gridInfo.alignLineHeightToGridFlags,
},
AntiAlias: antialias.indexOf((_l = data.antiAlias) !== null && _l !== void 0 ? _l : 'sharp'),
UseFractionalGlyphWidths: (_m = data.useFractionalGlyphWidths) !== null && _m !== void 0 ? _m : true,
Rendered: {
Version: 1,
Shapes: {
WritingDirection: WritingDirection,
Children: [
{
ShapeType: ShapeType,
Procession: Procession,
Lines: { WritingDirection: WritingDirection, Children: [] },
Cookie: { Photoshop: Photoshop },
},
],
},
},
},
ResourceDict: __assign({}, defaultResources),
DocumentResources: __assign({}, defaultResources),
};
// console.log('encodeEngineData', require('util').inspect(engineData, false, 99, true));
return engineData;
}
exports.encodeEngineData = encodeEngineData;
//# sourceMappingURL=text.js.map