Quantcast
Channel: Adobe Community: Message List - Photoshop Scripting
Viewing all articles
Browse latest Browse all 27456

Re: Re: How do I find the font for a specific character in a textItem?

$
0
0

This should get a list of the fonts used in Type Layers in the selected Group.

// get list of fonts used in the active group;
// based on code by paul riggott;
// 2014, use it at your own risk;
#target "photoshop-70.032"
if (app.documents.length > 0) {
var theFonts = main ();
alert ("the fonts used in the folder " + activeDocument.activeLayer.name + " are"+"\n"+theFonts.join("\n"))
};
////////////////////////////////////
function main () {
var theFonts = new Array;
var someLayerStuff = getActiveLayerIIndex();
if (someLayerStuff[1] != "layerSectionStart") {return []};
var aNumber = 0;
// get number of layers;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
// determine the start index;
if (activeDocument.layers[activeDocument.layers.length - 1].isBackgroundLayer == true) {var theStart = someLayerStuff[0] - 2}
else {var theStart = someLayerStuff[0] - 1};
//////
for (var p = theStart; p >= 0; p--) {
try {
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), p);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
var theName = layerDesc.getString(stringIDToTypeID('name'));
// check if group closes;
if (layerSet == "layerSectionStart") {aNumber++};
if (layerSet == "layerSectionEnd" && aNumber == 0) {return theFonts};
if (layerSet == "layerSectionEnd" && aNumber != 0) {aNumber--};
// if not layer group collect values;
if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" && isBackground != true) {
var hasText = layerDesc.hasKey(stringIDToTypeID("textKey"));
if (hasText == true) {
var textDesc = layerDesc.getObjectValue(stringIDToTypeID('textKey'));
var paragraphStyle = textDesc.getList(stringIDToTypeID('paragraphStyleRange'));
var kernRange = textDesc.getList(stringIDToTypeID('kerningRange'));
var rangeList = textDesc.getList(stringIDToTypeID('textStyleRange'));
for (var o = 0; o < rangeList.count; o++) {
var styleDesc = rangeList.getObjectValue(o).getObjectValue(stringIDToTypeID('textStyle'));
var aFont = styleDesc.getString(stringIDToTypeID('fontPostScriptName'));
// add to array;
var theCheck = true;
for (var n = 0; n < theFonts.length; n++) {
if (theFonts[n] == aFont) {theCheck = false}
};
if (theCheck  == true) {theFonts.push(aFont)}
}
}
}
}
catch (e) {};
}
return theFonts
};
////// get some stuff from the active layer //////
function getActiveLayerIIndex () {
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var layerDesc = executeActionGet(ref);
var theIndex = layerDesc.getInteger(stringIDToTypeID("itemIndex"));
var theSection = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var hasText = layerDesc.hasKey(stringIDToTypeID("textKey"));
return [theIndex, theSection, hasText]
};

Viewing all articles
Browse latest Browse all 27456


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>