NISUS Archives

June 2010

NISUS@LISTSERV.DARTMOUTH.EDU

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Nobumi Iyanaga <[log in to unmask]>
Reply To:
Date:
Sat, 5 Jun 2010 09:53:43 +0900
Content-Type:
text/plain
Parts/Attachments:
text/plain (172 lines)
Hello Kino,

Thank you very much for your reply.

On Jun 3, 2010, at 11:15 PM, Kino wrote:

> On Jun 3, 2010, at 11:58 AM, Nobumi Iyanaga wrote:
>
>> On Jun 1, 2010, at 8:00 PM, Kino wrote:
>>
>>> Surely there would be other ways to do so but my usual procedure is
>>>
>>> 	$variable = Cast to String 'something' # unnecessary if  
>>> 'something' is already plain text
>>> 	Push Target Text $variable
>>> 		Set Font Name 'Hiragino Mincho Pro'
>>> 	Pop Target Text
>>
>> Ah, I didn't know these commands. I read the explanation in Nisus  
>> Macro Reference, but I don't understand well what is the point.  
>> Could you give me a more detailed explanation on these commands...?
>
> But what details? All I know is that it allows you to apply some  
> attributes on a variable (text object). Isn't it handy?

Ah, that was the "details" that I was looking for. Yes, it is  
certainly very useful.

>>
>> Another thing (unrelated to this subject) that I found in writing  
>> this macro is that the command "$text.find xxx"... is VERY VERY  
>> slow. I could replace them with "$text.rangeOfString xxx" -- but  
>> this should really be improved, like perl's "$text =~ /xxx/"...  
>> command.
>
> Really? How did you test it? For me, find command seems to be 2 or  
> 3 times slower but is it fair to call it "VERY VERY slow" for that?  
> It is much more featured and it would not be a good idea to use it  
> when rangeOfString is sufficient. I don't know what perl's  
> equivalent of rangeOfString is but, as to s///, sed is much faster  
> than perl and perl's tr/// is much faster than its s///. However, I  
> don't think you will blame perl for that.

Below are two results of code profiling (I am sorry, they are  
long..., and certainly VERY VERY clumsy...). Perhaps I used  
"$text.find ..." in a wrong way? Anyway, the comparison seems evident...

And thank you VERY MUCH for your very useful macro "Styles2LaTeX".  
This is the kind of things I wanted for a long time.

Best regard,

Nobumi Iyanaga
Tokyo,
Japan

-------

Profiling result using "$text.find...":

Total macro elapsed time: 19.4 seconds
Total profiled execution time: 8.2 seconds
The following lists the percent of profiled time spent on each line:

	Debug.setCodeProfilingEnabled true
	$doc = Document.active
	if $doc == undefined
		exit
	end
	
	$sels = Array.new
	$ranges = Array.new
	# $selects = Array.new
	
  0.2	foreach $text in $doc.allTexts
		if $text.length
			$i = 0
  0.2			while $i < $text.length
  0.8				$attr = $text.displayAttributesAtIndex $i
  0.8				$fname = $attr.fontName
  0.8				$range = $text.rangeOfDisplayAttributesAtIndex $i
95.9				if $fname.find '^Mojikyo', 'E'
	#			if $fname.rangeOfString 'Mojikyo'
  0.4					$theChar = $text.subtextInRange $range
					if $theChar.length > 1
						$charList = $theChar.split ('')
						foreach $a_char in $charList
							if $a_char == "\n"
								$the_location = $range.location + 1
								$range = Range.new ($the_location, 1)
							else
								$sels.appendValue $a_char, $fname
								$a_range = Range.new ($range.location, 1)
								$ranges.appendValue $a_range
								$the_location = $range.location + 1
								$range = Range.new ($the_location, 1)
							end
						end
					elsif $theChar != "\n"
  0.2						$sels.appendValue $theChar, $fname
						$ranges.appendValue $range
					end
				end
  0.6				$i = $range.bound
			end
		end
	end
	
	Debug.log $sels
	# Debug.log $ranges
	exit

-----

Profiling result using "$text.rangeOfString ...":

Total macro elapsed time: 3.4 seconds
Total profiled execution time: 0.3 seconds
The following lists the percent of profiled time spent on each line:

	Debug.setCodeProfilingEnabled true
	$doc = Document.active
	if $doc == undefined
		exit
	end
	
	$sels = Array.new
	$ranges = Array.new
	# $selects = Array.new
	
	foreach $text in $doc.allTexts
  5.6		if $text.length
			$i = 0
11.1			while $i < $text.length
16.7				$attr = $text.displayAttributesAtIndex $i
27.8				$fname = $attr.fontName
16.7				$range = $text.rangeOfDisplayAttributesAtIndex $i
	#			if $fname.find '^Mojikyo', 'E'
  5.6				if $fname.rangeOfString 'Mojikyo'
  5.6					$theChar = $text.subtextInRange $range
					if $theChar.length > 1
						$charList = $theChar.split ('')
						foreach $a_char in $charList
							if $a_char == "\n"
								$the_location = $range.location + 1
								$range = Range.new ($the_location, 1)
							else
								$sels.appendValue $a_char, $fname
								$a_range = Range.new ($range.location, 1)
								$ranges.appendValue $a_range
								$the_location = $range.location + 1
								$range = Range.new ($the_location, 1)
							end
						end
					elsif $theChar != "\n"
						$sels.appendValue $theChar, $fname
						$ranges.appendValue $range
					end
				end
  5.6				$i = $range.bound
			end
		end
	end
	
  5.6	Debug.log $sels
	# Debug.log $ranges
	exit
	# Prompt $sels
	# Prompt $ranges
	
	

ATOM RSS1 RSS2