Skip to main content
added a script
Source Link

This question follows on from @Ian who asked a similar question in 2015 — to which @mdomino very kindly supplied a fantastic script that generates a contextual indent...

This script works well, unless my text frame and copy already has a left indent applied. I usually have a default left indent so that that lists, bullets etc can be set to hang outside the left margin. So it would be super useful to know how to adapt a script to take into account any existing indent value.

In this example below, my text has an existing 40pt left indent, and the script has done its thing and left-indented to the end of the preceding line — but ADDING the existing indent to the newly calculated indent value... (you can see the text BEFORE running the scrip at the bottom...)

I am new to scripting and .jsx — if anyone knows how to adapt this script to take into account a global indent value that would be very helpful. It coudl be that this value is added manually to the script, or via a dialogue request...?

thanks for your time!

text AFTER running the script on text with 40pt left indent

text BEFORE running the script

Here's the script that was posted in 2015

#target InDesign

var defaultIndent = 0;

//Checks if a text frame with 2 or more paragraphs was selected.
if (app.selection.length < 1 || !(app.selection[0].parentStory.paragraphs.length > 1)) {
  alert("Error\nSelect a text frame with at least 2 paragraphs and try again.");
  exit();
}

var story = app.selection[0].parentStory;
var paragraphs = story.paragraphs;

// loops through all paragraphs, checks the position of the last letter of the previous
// paragraph and sets the indent of the first line of the current paragraph accordingly.
for (var i = 1; i < paragraphs.length; i += 1) {

  // leaves the script, if the paragraph has moved out of the last text frame in the meantime.
  if(paragraphs[i].parentTextFrames.length === 0){
    break;
    }

  var prevChar = paragraphs[i - 1].characters[-2];
  var leftEdge = paragraphs[i].parentTextFrames[0].geometricBounds[1];
  var indentPos = prevChar.endHorizontalOffset - leftEdge;

  paragraphs[i].firstLineIndent = indentPos;

  // if the paragraph has moved out of the textframe it means that the first word
  // does not fit in the first line and indent will be reset to the default value.
  if(paragraphs[i].parentTextFrames.length === 0){
    paragraphs[i].firstLineIndent = defaultIndent;
  }
};

This question follows on from @Ian who asked a similar question in 2015 — to which @mdomino very kindly supplied a fantastic script that generates a contextual indent...

This script works well, unless my text frame and copy already has a left indent applied. I usually have a default left indent so that that lists, bullets etc can be set to hang outside the left margin. So it would be super useful to know how to adapt a script to take into account any existing indent value.

In this example below, my text has an existing 40pt left indent, and the script has done its thing and left-indented to the end of the preceding line — but ADDING the existing indent to the newly calculated indent value... (you can see the text BEFORE running the scrip at the bottom...)

I am new to scripting and .jsx — if anyone knows how to adapt this script to take into account a global indent value that would be very helpful. It coudl be that this value is added manually to the script, or via a dialogue request...?

thanks for your time!

text AFTER running the script on text with 40pt left indent

text BEFORE running the script

This question follows on from @Ian who asked a similar question in 2015 — to which @mdomino very kindly supplied a fantastic script that generates a contextual indent...

This script works well, unless my text frame and copy already has a left indent applied. I usually have a default left indent so that that lists, bullets etc can be set to hang outside the left margin. So it would be super useful to know how to adapt a script to take into account any existing indent value.

In this example below, my text has an existing 40pt left indent, and the script has done its thing and left-indented to the end of the preceding line — but ADDING the existing indent to the newly calculated indent value... (you can see the text BEFORE running the scrip at the bottom...)

I am new to scripting and .jsx — if anyone knows how to adapt this script to take into account a global indent value that would be very helpful. It coudl be that this value is added manually to the script, or via a dialogue request...?

thanks for your time!

text AFTER running the script on text with 40pt left indent

text BEFORE running the script

Here's the script that was posted in 2015

#target InDesign

var defaultIndent = 0;

//Checks if a text frame with 2 or more paragraphs was selected.
if (app.selection.length < 1 || !(app.selection[0].parentStory.paragraphs.length > 1)) {
  alert("Error\nSelect a text frame with at least 2 paragraphs and try again.");
  exit();
}

var story = app.selection[0].parentStory;
var paragraphs = story.paragraphs;

// loops through all paragraphs, checks the position of the last letter of the previous
// paragraph and sets the indent of the first line of the current paragraph accordingly.
for (var i = 1; i < paragraphs.length; i += 1) {

  // leaves the script, if the paragraph has moved out of the last text frame in the meantime.
  if(paragraphs[i].parentTextFrames.length === 0){
    break;
    }

  var prevChar = paragraphs[i - 1].characters[-2];
  var leftEdge = paragraphs[i].parentTextFrames[0].geometricBounds[1];
  var indentPos = prevChar.endHorizontalOffset - leftEdge;

  paragraphs[i].firstLineIndent = indentPos;

  // if the paragraph has moved out of the textframe it means that the first word
  // does not fit in the first line and indent will be reset to the default value.
  if(paragraphs[i].parentTextFrames.length === 0){
    paragraphs[i].firstLineIndent = defaultIndent;
  }
};
title needed clarifying
Link

Adapt existing script that indent paragraphindents paragraphs to the end of previous linelines — taking EXISTING left indent into account?

Source Link

Adapt existing script that indent paragraph to end of previous line — taking EXISTING left indent into account?

This question follows on from @Ian who asked a similar question in 2015 — to which @mdomino very kindly supplied a fantastic script that generates a contextual indent...

This script works well, unless my text frame and copy already has a left indent applied. I usually have a default left indent so that that lists, bullets etc can be set to hang outside the left margin. So it would be super useful to know how to adapt a script to take into account any existing indent value.

In this example below, my text has an existing 40pt left indent, and the script has done its thing and left-indented to the end of the preceding line — but ADDING the existing indent to the newly calculated indent value... (you can see the text BEFORE running the scrip at the bottom...)

I am new to scripting and .jsx — if anyone knows how to adapt this script to take into account a global indent value that would be very helpful. It coudl be that this value is added manually to the script, or via a dialogue request...?

thanks for your time!

text AFTER running the script on text with 40pt left indent

text BEFORE running the script