I've looked through the manual but can't find it. Is there a way to find a words or characters having colored text?
Any help appreciated.
Find colored text
Re: Find colored text
If you want to find and select all texts in the same colour (manually applied, not defined in a style), put the insertion point somewhere in a text in that colour and choose ‘Select All’ from the pull-down menu (click on a coloured circle) in the status bar at the bottom of the document window.
If you want to find and select all texts in different colours, I think the macro below will do the job.
In either case, if you need looking at each one of selected texts, adding Bookmarks to them (Insert:Bookmarks:Add Bookmark) and visiting them one by one from Navigator (View:Show Navigator and switch to Bookmarks from Table of Content) would be handy.
Code: Select all
Require Pro Version 1.3
$doc = Document.active
if $doc == undefined
exit
end
$black = Color.newWithRGBA 0, 0, 0, 1
$white = Color.newWithRGBA 1, 1, 1, 1
$colors = Hash.new
$samples = Array.new
$TC = Cast to String '[text] '
$BG = Cast to String '[back] '
$HL = Cast to String '[highlight] '
$sep = Cast to String '/'
$showSamples = Cast to String 'Show Samples'
$language = Language.systemLanguage
foreach $text in $doc.allTexts
$textRanges = Array.new
if $text.tables.count # then, exclude special texts enclosing tables
$tableRanges = Array.new
foreach $table in $text.tables
$tableRanges.appendValue $table.enclosingTextRange
end
$tableRanges.sort
$i = 0
foreach $tableRange in $tableRanges
$range = Range.newWithLocationAndBound $i, $tableRange.location
$textRanges.appendValue $range
$i = $tableRange.bound
end
$range = Range.newWithLocationAndBound $i, $text.length
else
$range = Range.new 0, $text.length
end
$textRanges.appendValue $range
foreach $textRange in $textRanges
$i = $textRange.location
while $i < $textRange.bound
$attr = $text.displayAttributesAtIndex $i
$range = $text.rangeOfDisplayAttributesAtIndex $i
$sel = TextSelection.new $text, $range
if $attr.textColor != $black
$key = $TC & $attr.textColor.hexTriplet
$key &= $sep & $attr.textColor.opacity
if $colors{$key} == undefined
$colors{$key} = Array.new
$sample = $key
Push Target Text $sample
Set Text Color $attr.textColor
Pop Target Text
$samples.appendValue $sample
end
$colors{$key}.appendValue $sel
end
if $attr.textBackgroundColor != $white
$key = $BG & $attr.textBackgroundColor.hexTriplet
$key &= $sep & $attr.textBackgroundColor.opacity
if $colors{$key} == undefined
$colors{$key} = Array.new
$sample = $key
Push Target Text $sample
Set Background Color $attr.textBackgroundColor
Pop Target Text
$samples.appendValue $sample
end
$colors{$key}.appendValue $sel
end
if Defined $attr.textHighlightColor
$key = $HL & $attr.textHighlightColor.hexTriplet
$key &= $sep & $attr.textHighlightColor.opacity
if $colors{$key} == undefined
$colors{$key} = Array.new
$sample = $key
Push Target Text $sample
Set Highlight Color $attr.textHighlightColor
Pop Target Text
$samples.appendValue $sample
end
$colors{$key}.appendValue $sel
end
$i = $range.bound
end
end
end
if ! $colors.keys.count
exit 'No color found, exiting...'
end
$keys = $colors.keys
$keys.sort 'li', $language
$keys.appendValue $showSamples
$keys = Prompt Checkboxes '', '', '', $keys
if ! $keys.count
exit # nothing checked
end
if $keys.lastValue == $showSamples
$showSamples = true
$keys.pop
end
if $keys.count
$sels = Array.new
foreach $key in $keys
$sels.appendValuesFromArray $colors{$key}
end
$doc.setSelections $sels
end
if $showSamples == true
$LF = Cast to String "\n"
$samples.sort 'li', $language
$samples = $samples.join $LF
Document.newWithText $samples
end- martin
- Official Nisus Person
- Posts: 5230
- Joined: 2002-07-11 17:14:10
- Location: San Diego, CA
- Contact:
Re: Find colored text
Kino's macro and tip about the color tag's "select all" menu are a good way to go. Another option is to use attribute sensitive search:
1. Open the Find and Replace dialog.
2. By the "find what" field, click the gear icon to insert a PowerFind bubble for Wild Card > AnyText.
3. Select that bubble and use the formatting menus (eg: Format > Text Color > Red).
(Applying formatting to the bubble should automatically turn on the "attribute sensitive" option just below)
4. Use the Find Next / Find All buttons as you normally would.
1. Open the Find and Replace dialog.
2. By the "find what" field, click the gear icon to insert a PowerFind bubble for Wild Card > AnyText.
3. Select that bubble and use the formatting menus (eg: Format > Text Color > Red).
(Applying formatting to the bubble should automatically turn on the "attribute sensitive" option just below)
4. Use the Find Next / Find All buttons as you normally would.