Can a script count how many lines, words and characters there is in a Text Layer?

Explorer ,
Aug 20, 2022 Aug 20, 2022

Copy link to clipboard

Copied

I've been browsing here and I found this script that counts the words and characters in a text layer, but it can't count how many lines there is in it. I've found other scripts that should count the lines but they didn't work.
So is it possible to add a line counter in the selected text layer?

Also, how would I add a line in the code that breaks the line (add an enter) at a specific point, for example, breaks the line in the second word of the text layer, or the forth word, I'm asking because this would help me too.

Image example:

ex.png

// 

/*

<javascriptresource>

<name>Count Words and Characters</name>

</javascriptresource>

*/

function run()

{

var layer = activeDocument.activeLayer;

    if (layer.kind == LayerKind.TEXT)

        {

  

    var words = layer.textItem.contents;

            words = words.replace(/(\r\n|\n|\r)/gm," ");

var countwords = words.split(" ").length;

var countletters = words.split(" ").join(" ").length;

alert("\n " + countwords + " Words\n " + countletters + " Characters","Count");

}

else

    {

    alert("Select a text layer.","Count");

    }

}

run();


 

TOPICS
Actions and scripting , Windows

Views

127

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Aug 21, 2022 Aug 21, 2022

The line-counting Script is on the Indesign Forum, so I assume it is for Indesign. 

 

// determine lines in point text;
// 2022, use it at your own risk;
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var myLayer = myDocument.activeLayer;
    if (myLayer.kind == LayerKind.TEXT) {
        var theText = myLayer.textItem.contents;
// carriage return;
        var theRegExp = /\r/g;
        alert (theText.match(theRegExp).length+1)
    }
};

 

For Point Text try this; it

...

Likes

Translate

Translate
Community Expert ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied


Also, how would I add a line in the code that breaks the line (add an enter) at a specific point, for example, breaks the line in the second word of the text layer, or the forth word, I'm asking because this would help me too.

Could you post meaningful screenshots to illustrate what you mean? 

 


I've found other scripts that should count the lines but they didn't work.

If you want to talk about Scripts you might want to actually show them/post links. 

 

Is the Type Layer Point Text or Paragraph Text? 

In Point Text one should be able to determine the number of carriage returns (edited), and with Paragraph Text one could duplicate the Type Layer and convert it to Point Text. 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

I guess I'm asking too many things at the same time and it's a bit confusing, sorry.


\Could you post meaningful screenshots to illustrate what you mean? 

Yes. I posted an image illustrating it better, but basically I wanna write a script that will break the line of text for me, the second and sixth word is just an arbitrary number that I chose, I just wanna learn how would I do it so I can try to write a very specific piece of code that will break the line in specific points.

\If you want to talk about Scripts you might want to actually show them/post links. 

(here's the link where I got the code that counts characters and words,it works!)
https://community.adobe.com/t5/photoshop-ecosystem-discussions/need-help-to-count-characters-in-mult...   

(and I found this script to count lines but when I tried it, I got an error. I'm not sure if I did something wrong.)
https://community.adobe.com/t5/indesign-discussions/is-there-a-script-can-count-how-many-lines-and-o...

\Is the Type Layer Point Text or Paragraph Text? In Point Text one should be able to determine the number of carriage returns (edited), and with Paragraph Text one could duplicate the Type Layer and convert it to Point Text. 

The text layers that I'm working with are all Point Texts.

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

The line-counting Script is on the Indesign Forum, so I assume it is for Indesign. 

 

// determine lines in point text;
// 2022, use it at your own risk;
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var myLayer = myDocument.activeLayer;
    if (myLayer.kind == LayerKind.TEXT) {
        var theText = myLayer.textItem.contents;
// carriage return;
        var theRegExp = /\r/g;
        alert (theText.match(theRegExp).length+1)
    }
};

 

For Point Text try this; it should give an alert of the count of carriage returns + 1. 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

It works, thanks. Do you know if it's possible to create a script that add a specific text inside the text layer, in this case it would be the "Enter Key" as a way to break the line.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

If I remember correctly you can change the contents even with DOM code. 

Though that may mess up formatting if the Type Layer did not have uniform parameters (font, size, color, …), in which case you would need to use AM code, which might get a bit inconvenient to implement. 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

the format is usually uniform, it has the same size, color and font, I reallu just wanna break the line by adding an enter.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

I'm not sure what DOM code is, but I was asking if it's possible with a regular script because I wanna be adding some If's and elses to the code eventually.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 21, 2022 Aug 21, 2022

Copy link to clipboard

Copied

Document Object Model 

Action Manager 

 

Just set the 

layer.textItem.contents = 

to whatever String you want. 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 23, 2022 Aug 23, 2022

Copy link to clipboard

Copied

LATEST

Thanks!!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines