Returns at the end of the file

Get help using and writing Nisus Writer Pro macros.
Post Reply
matt_wiseman
Posts: 3
Joined: 2008-04-18 09:17:38

Returns at the end of the file

Post by matt_wiseman » 2008-04-18 09:21:39

Most documents I work with end up in InDesign. By default, most documents I get have a return as the last character of the file. Is there a way to delete this?

Don't say the backspace key... I mean like in a macro...

Find: \n <---- followed by an end of file character
Replace: end of file character.

Thanks. That last return often makes a text block problematic in InDesign. I'd like to include deleting it in a macro.

User avatar
martin
Official Nisus Person
Posts: 4288
Joined: 2002-07-11 17:14:10
Location: San Diego, CA
Contact:

Post by martin » 2008-04-18 13:33:39

The special PowerFind Pro anchor for "end of document" is "\Z", but that will actually match the end of other text areas as well, eg: table cells. I'd use this macro myself:

Code: Select all

Require Application Version "3.1"

$doc = Document.active
$text = $doc.text
If $text.length > 0 
    # check for newline character at end of main body
    $lastIndex = $text.length - 1
    $lastChar = $text.characterAtIndex($lastIndex)
    If $lastChar == 10
        # delete just the final character
        $lastCharRange = Range.new($lastIndex, 1)
        $text.deleteInRange($lastCharRange)
    End
End
I almost forgot to say, this macro requires version 1.1, which is now in public beta.

Kino
Posts: 400
Joined: 2008-05-17 04:02:32

Re: Returns at the end of the file

Post by Kino » 2010-09-20 06:26:56

Since NWP 1.3, a single command can do the job.

Code: Select all

Find and Replace '\n+\z', '', 'E', '-am'
which replaces the return(s) at the document end (\n+\z) with nothing in the main body (-am).

What is inconvenient with it is that the caret will move to the document end when Find and Replace has worked successfully. The following macro get the caret back to the original position by executing Previous Selection when and only when Find and Replace has actually removed the return(s).

Code: Select all

Require Pro Version 1.3
if Find and Replace '\n+\z', '', 'E', '-am'
	Menu ':Edit:Select:Previous Selection'
end
Edit: Modified the code so that multiple returns will be removed.

Edit: It seems that Previous Selection does not always work as expected. Perhaps I misunderstand how it works, though.

Edit: Then, the following is better.

Code: Select all

Require Pro Version 1.3
$doc = Document.active
$doc.text.findAndReplace '\n+\z', '', 'E', '-am'
Edit: Alternatively, you can use something like this (assuming you are not using setMark: usually).

Code: Select all

Require Pro Version 1.3
Send Selector 'setMark:'
if Find and Replace '\n+\z', '', 'E', '-am'
	Send Selector 'selectToMark:'
	Select Start
end
There’s more than a way to do it . . .

Post Reply