Commenting Code

In the Xcode Applescript menu there is a sub menu comments.

It is possible to un/comment a selected section of Objective-C code from this menu.

I thought it would be a simple matter of duplicating this Perl script and changing the reference to // with – and it would work with ASOC.

It does not.

It does work if you have Objective-C code in the ASOC script using – instead of //.

Not being competent enough in Perl, does anyone have a working version they would be willing to share?

All the best

Terry

You can put this in the Xcode scripts for commenting, I did:

Commenter:

tell application "Xcode"
	set contents of selection to ("(*" & (contents of selection) & "*)")
end tell

De-commenter:

set valdia to button returned of (display dialog "Would you like to remove (* *)s or --s or all comment script?" buttons {"(* *)", "--", "All"} default button 3 with title "De-Commenter")
tell application "Xcode"
	set valtxt to contents of selection
	if valdia is "(* *)" then
		set AppleScript's text item delimiters to "(*"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
		set AppleScript's text item delimiters to "*)"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
	else if valdia is "--" then
		set AppleScript's text item delimiters to "--"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
	else
		set AppleScript's text item delimiters to "(*"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
		set AppleScript's text item delimiters to "*)"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
		set AppleScript's text item delimiters to "--"
		set the valtxt to every text item of valtxt
		set AppleScript's text item delimiters to ""
		set valtxt to the valtxt as string
	end if
	set contents of selection to valtxt
end tell

Hi Richard,

Thanks for your suggestions. It got me thinking of Applescript instead of Perl.

I have come up with a simple un/comment script for ASOC which just uses “–” which is my preferred comment method as it allows you to trial and error individual lines of code.

The script removes “–” if the line starts with a comment or adds a comment to the start of the line if it is not commented.

Here it is. If you or others have suggestions then please post:

tell application "Xcode"
	set tOldCont to contents of selection
	set tNum to number of paragraphs in tOldCont
	set tNewCont to ""
	repeat with n from 1 to tNum
		set tPara to paragraph n of tOldCont
		if tPara starts with "--" then
			set oldDelims to AppleScript's text item delimiters
			set AppleScript's text item delimiters to "--"
			set tPara to every text item of tPara
			set AppleScript's text item delimiters to oldDelims
			if n < tNum then
				set tPara to (tPara as string) & return
			else
				set tPara to (tPara as string)
			end if
		else
			if n < tNum then
				set tPara to "--" & paragraph n of tOldCont & return
			else
				set tPara to "--" & paragraph n of tOldCont
			end if
		end if
		set tNewCont to tNewCont & tPara
	end repeat
	set contents of selection to tNewCont
end tell

All the best

–Terry

Hmmm To me that one is annoying because it opposites everything, say you wanted a section of script with a few comments entirely block commented with dashes. But the way you wrote that is very good, I can’t say the same for mine it is a modified part of an ASE script folder script. :wink:

Hi,

I was trying to replicate the un/comment script for Objective-C which I have used at various times so it has become familiar.

However, I just noticed that the Objective-C version makes it’s choice as to whether to comment or uncomment based upon the first line of the selection.

So, if the first line does not have a comment then comments are added to all lines in the selection. That means if another line in the selection has a comment it will now have two. I am not sure if that is really to be desired.

I think I will change my script so that the first line of the selection makes the choice as to whether to uncomment or comment then that choice is applied to all lines rather than the way it is at the moment.

What do you think?

All the best

–Terry

Hi again,

On second thoughts the Apple way seems to be correct. You can have multiple comments on the same line allowing you to uncomment selected sections but keeping individual lines still commented.

Here, is my script.If you see any errors please correct and repost.

tell application "Xcode"
	set tOldCont to contents of selection
	set tNum to number of paragraphs in tOldCont
	set tNewCont to ""
	set tPara to paragraph 1 of tOldCont
	if tPara starts with "--" then
		set tAddFlag to false
	else
		set tAddFlag to true
	end if
	
	-- THIS SECTION REMOVES COMMENTS
	if tAddFlag = false then
		repeat with n from 1 to tNum
			set tPara to paragraph n of tOldCont
			if tPara starts with "--" then
				set tPara to (characters 3 thru -1 of tPara) as string
			else
				set tPara to every text item of tPara
			end if
			if n < tNum then
				set tPara to (tPara as string) & return
			else
				set tPara to (tPara as string)
			end if
			set tNewCont to tNewCont & tPara
		end repeat
	end if
	
	--THIS SECTION ADDS COMMENTS
	if tAddFlag = true then
		repeat with n from 1 to tNum
			set tPara to paragraph n of tOldCont
			if tPara starts with "--" then
				set tPara to every text item of tPara
			end if
			if n < tNum then
				set tPara to "--" & paragraph n of tOldCont & return
			else
				set tPara to "--" & paragraph n of tOldCont
			end if
			set tNewCont to tNewCont & tPara
		end repeat
	end if
	
	set contents of selection to tNewCont
end tell

All the best

–Terry

You could always just put it all in the if rather than flag sections to be run or not.

Hi,

Famous last words, the following now seems to work correctly.

It now removes tabbing from the selection as that was interfering with the placement and removal of “–”.

If anyone could provide some optimisations then I would be grateful.

tell application "Xcode"
	set tComment to "--"
	set tOldCont to contents of selection
	set tNum to number of paragraphs in tOldCont
	set tNewCont to ""
	
	--REMOVE ALL TABS FROM THE SELECTION
	set tCont to ""
	repeat with n from 1 to tNum
		set tPara to paragraph n of tOldCont
		set oldDelims to AppleScript's text item delimiters
		set AppleScript's text item delimiters to tab
		set tPara to every text item of tPara
		set AppleScript's text item delimiters to oldDelims
		if n = tNum then
			set tCont to tCont & tPara
		else
			set tCont to tCont & tPara & return
		end if
	end repeat
	
	--SET WHETHER OR NOT TO ADD A COMMENT FLAG
	set tPara to paragraph 1 of tCont
	set tAddComment to true
	if tPara starts with "--" then
		set tAddComment to false
	end if
	
	--REPEAT THROUGH EACH LINE OF THE SELECTION
	repeat with n from 1 to tNum
		set tPara to paragraph n of tCont
		if n < tNum then
			if tAddComment is true then
				set tOutputString to tComment & tPara & return
			else
				if tPara starts with "--" then
					set tOutputString to (characters 3 thru -1 of tPara) & return
				else
					set tOutputString to tPara & return
				end if
			end if
		else
			if tAddComment is true then
				set tOutputString to tComment & tPara
				if tOutputString = "--" then
					set tOutputString to ""
				end if
			else
				if tPara starts with "--" then
					set tOutputString to (characters 3 thru -1 of tPara)
				else
					set tOutputString to tPara
				end if
			end if
		end if
		set tNewCont to tNewCont & tOutputString
	end repeat
	
	--SET THE SELECTION
	set contents of selection to tNewCont
end tell

All the best

–Terry