blob: eff2e649b4c60d787239249950474a1dccdb1f04 [file] [log] [blame]
/*jslint vars: true , plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
/*global app, bm_eventDispatcher, bm_projectManager, bm_shapeHelper, bm_renderManager, ParagraphJustification*/
var bm_textShapeHelper = (function () {
'use strict';
var ob = {}, chars = [], comp, layers = [];
function reset() {
chars.length = 0;
layers.length = 0;
}
function addTextLayer(layer) {
layers.push(layer);
}
function addChar(ch, size, font, style) {
var i = 0, charData, len = chars.length;
while (i < len) {
if (chars[i].ch === ch && chars[i].font === font && chars[i].style === style) {
return false;
}
i += 1;
}
charData = {
ch: ch,
size: size,
font: font,
style: style
};
chars.push(charData);
return charData;
}
function resetProp(p, def) {
if (!p) {
return;
}
if (p.isModified) {
if (p.expression !== "") {
p.expression = "";
}
while (p.numKeys > 0) {
p.removeKey(1);
}
p.setValue(def);
}
return;
}
function removeLayerAnimators(textLayer) {
var layerInfo = textLayer.property("Text");
var i, len = layerInfo.numProperties;
for (i = 0; i < len; i += 1) {
if (layerInfo.property(i + 1).matchName === "ADBE Text Animators") {
var animatorInfo = layerInfo.property(i + 1);
var j, jLen = animatorInfo.numProperties;
for (j = 0; j < jLen; j += 1) {
if (animatorInfo.property(j + 1).matchName === "ADBE Text Animator") {
animatorInfo.property(j + 1).remove();
j -= 1;
jLen -= 1;
}
}
}
}
if ((textLayer.mask && textLayer.mask.numProperties > 0)) {
textLayer.mask(1).remove();
}
resetProp(textLayer.transform.position, [0, 0, 0]);
resetProp(textLayer.transform.rotation, 0);
}
function createNewChar(layerInfo, ch, charData) {
if (ch === ' ' || ch.charCodeAt(0) === 13) {
return;
}
var shapeLayer;
var l, lLen;
var cmdID = bm_projectManager.getCommandID('shapesFromText');
layerInfo.copyToComp(comp);
var dupl = comp.layers[1];
removeLayerAnimators(dupl);
var textProp = dupl.property("Source Text");
var textDocument = textProp.value;
textDocument.text = ch;
textDocument.fontSize = 100;
textDocument.justification = ParagraphJustification.LEFT_JUSTIFY;
textProp.setValue(textDocument);
dupl.enabled = true;
dupl.selected = true;
app.executeCommand(cmdID);
dupl.selected = false;
shapeLayer = comp.layers[1];
charData.data = {};
bm_shapeHelper.exportShape(shapeLayer, charData.data, 1, true);
lLen = charData.data.shapes[0].it.length;
for (l = 0; l < lLen; l += 1) {
var ks = charData.data.shapes[0].it[l].ks;
if (ks) {
var k, kLen = ks.k.i.length;
for (k = 0; k < kLen; k += 1) {
ks.k.i[k][0] += ks.k.v[k][0];
ks.k.i[k][1] += ks.k.v[k][1];
ks.k.o[k][0] += ks.k.v[k][0];
ks.k.o[k][1] += ks.k.v[k][1];
}
} else {
charData.data.shapes[0].it.splice(l, 1);
l -= 1;
lLen -= 1;
}
}
shapeLayer.selected = false;
}
function exportChars(fonts) {
comp = app.project.items.addComp('bm_fontHelper', 1000, 1000, 1, 1, 1);
comp.openInViewer();
var layerCollection = comp.layers;
var i, len = layers.length, layerInfo;
for (i = 0; i < len; i += 1) {
layerInfo = layers[i];
var textProp = layerInfo.property("Source Text");
var textDocument = textProp.value;
var font = textDocument.font;
var fontFamily = textDocument.fontFamily;
var fontStyle = textDocument.fontStyle;
var fontSize = textDocument.fontSize;
var text = textDocument.text;
var j, jLen = text.length;
var l, lLen;
for (j = 0; j < jLen; j += 1) {
var ch = text.substr(j, 1);
var charData = addChar(ch, fontSize, font, fontStyle);
if (charData !== false) {
createNewChar(layerInfo, ch, charData);
l = 0;
lLen = fonts.list.length;
while (l < lLen) {
if (fonts.list[l].fName === charData.font) {
charData.fFamily = fonts.list[l].fFamily;
break;
}
l += 1;
}
}
}
}
comp.remove();
bm_renderManager.setChars(chars);
}
ob.reset = reset;
ob.addChar = addChar;
ob.addTextLayer = addTextLayer;
ob.exportChars = exportChars;
return ob;
}());