Reply to topic  [ 2 posts ] 
Adding and removing styles from a document 
Author Message
User avatar

Joined: 2007-02-07 00:58:12
Posts: 876
Location: Japan
Over in another thread Þorvarður asks whether it's possible to remove or add (from some file) styles via macro. The answer is of course yes. But since this is a technical discussion, I'm moving the answer over here.

Removing all styles from a document can be done like this.
Code:
$doc = Document.active
foreach $style in $doc.allStyles
   $doc.removeStyle $style
end

But of course this is a bit like taking a sledgehammer to your document. If any styles are actually used, that formatting will vanish.

A more clever way is to remove only the styles not actually used:
Code:
$doc = Document.active
foreach $style in $doc.allStyles
   If ! Find($style)
      $doc.removeStyle $style
   end
end

This still has one problem, if some of your used styles are based on others that are themselves not used, you might still lose formatting (and you'll change the styles).

So I attach a more elaborate macro here:
Attachment:
Remove Unused Styles.nwm [7.41 KiB]
Downloaded 15 times

The basic idea of the macro is to go through the styles 3 times:
  1. On the first pass, find all the used styles (as above), but don't remove them. Instead create a "flag" array (actually a hash) that marks whether a style is used or not
  2. On the second pass, check all styles to see whether they are (a) used, and (b) based on another. If yes, then follow the 'based-on' path to the end and mark all these styles as used
  3. On the third pass, eliminate all styles for which the used flag is set to @false

Now to adding styles from another file, for example, one of the files in the Style Library.
Code:
$doc = Document.active
# Adjust path to point to the desired file
$styleFile = '~/Nisus Documents/Style Library/MyStyles.rtf'
File.requireAccessAtPath $styleFile
$styleDoc = Document.open $styleFile, @false
$doc.addStyles $styleDoc.allStyles, 'replace'
$styleDoc.close

For this your best bet is to hard code the file path into the macro, as I have done here. Alternatively one could use a "Choose" command to let the user select the relevant file. [Thanks to Þorvarður for the correction.]

The macro opens the style file (hidden), copies the styles and replaces the ones in the current document. Finally it closes the style file again. The addStyles command allows you to set the style conflict resolution as you would by hand. Here I have chosen the replace option, but rename or ignore are possible as well.

Finally as a variation, I add a macro that lets you choose one of your Style Library files for style import:
Attachment:
Add All Styles from StyleLib File.nwm [6.21 KiB]
Downloaded 16 times

_________________
philip


Last edited by phspaelti on 2018-02-04 06:28:14, edited 2 times in total.



2018-01-25 00:59:01
Profile

Joined: 2012-12-19 05:02:52
Posts: 225
This is great. Thank you so much, Philip
I merged the two macros, and I'll be using them a lot. I still have many Nisus Classic documents with old styles that I want to get rid of when I convert them.

Needless to say, these macros would solve the original poster's problem, but I don't think he's listening. :roll:


2018-02-03 04:53:02
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software