OK, with help from Roland Küffner and Christopher Stone, I've been able to create the script I need. More on that in a bit.
There have been a number of suggestions that using find/replace with grep should work. That only works well if there are no nested spans (with inner spans that I want to keep ... i.e. spans with class attributes as opposed to span elements with no attributes). And matching beginning and closing tags is difficult in a nested element scenario. So, a script seems like the safest approach. So here is what I did. First, I started with the script from Roland that selected the outer tags of a balanced tag selection. I'll repeat that original script here: tell application "BBEdit" if (balance tags) then set x to characterOffset of selection set y to x + (length of selection) inside tag start range (x - 2) end range (x - 2) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set x to x - tagLength - 1 inside tag start range (y + 1) end range (y + 1) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set y to y + tagLength select characters x thru y of window 1 else beep -- script beeps if it could not create an initial balance end if end tell Then I modified it to remove the outer tags: tell application "BBEdit" if (balance tags) then set x to characterOffset of selection set y to x + (length of selection) inside tag start range (x - 2) end range (x - 2) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set xOpen to x - tagLength - 1 set lenOpen to tagLength set yOpen to xOpen + lenOpen inside tag start range (y + 1) end range (y + 1) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set xClose to y set lenClose to tagLength set yClose to xClose + lenClose -- set insertion point before character xClose tell window 1 to select (characters xClose thru yClose) tell window 1 to delete selection tell window 1 to select (characters xOpen thru yOpen) tell window 1 to delete selection else beep -- script beeps if it could not create an initial balance end if end tell Then I made it specific to a <span> element: tell application "BBEdit" set origInsPt to characterOffset of selection if (balance tags) then set x to characterOffset of selection set y to x + (length of selection) inside tag start range (x - 2) end range (x - 2) set t to tag of result if ("span" is equal to name of t) then set tagLength to (end_offset of t) - (start_offset of t) set xOpen to x - tagLength - 1 set lenOpen to tagLength set yOpen to xOpen + lenOpen inside tag start range (y + 1) end range (y + 1) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set xClose to y set lenClose to tagLength set yClose to xClose + lenClose -- set insertion point before character xClose tell window 1 to select (characters xClose thru yClose) tell window 1 to delete selection tell window 1 to select (characters xOpen thru yOpen) tell window 1 to delete selection else tell window 1 to select (insertion point before character origInsPt) beep -- script beeps if it outer element is not <span/> end if else beep -- script beeps if it could not create an initial balance end if end tell Then I used a script from Chris to create the wrapper code to find an empty span element and do some processing with it; I added a loop that repeated until there were no more empty <span> elements remaining: tell application "BBEdit" set keepGoing to true repeat while keepGoing = true tell text of window 1 set fndRsltStart to find "<span>" options ¬ {search mode:grep, case sensitive:false, starting at top:true} with selecting match end tell set keepGoing to found of fndRsltStart if keepGoing = true then set z to characterOffset of selection tell window 1 to select insertion point before character (z + 2) if (balance tags) then set x to characterOffset of selection set y to x + (length of selection) inside tag start range (x - 2) end range (x - 2) set t to tag of result if ("span" is equal to name of t) then set tagLength to (end_offset of t) - (start_offset of t) set xOpen to x - tagLength - 1 set lenOpen to tagLength set yOpen to xOpen + lenOpen inside tag start range (y + 1) end range (y + 1) set tagLength to (end_offset of tag of result) - (start_offset of tag of result) set xClose to y set lenClose to tagLength set yClose to xClose + lenClose -- now remove the closing and opening element tags tell window 1 to select (characters xClose thru yClose) tell window 1 to delete selection tell window 1 to select (characters xOpen thru yOpen) tell window 1 to delete selection else tell window 1 to select (insertion point before character origInsPt) end if end if end if end repeat end tell That is it!! I assigned a shortcut key to that script and am ripping through the nearly 100 files that need to be cleaned up. Very cool. Now, there could be more to be done here. I probably need an "on error" handler (Chris had one, but I didn't keep it). And I might need to be referencing the current document with something other than "window 1" ... or maybe check that window 1 is actually a text window. And I might want a "beep" if the script did no work. I'll probably add some of that clean up later (I anticipate need this script quite a bit). For now, I'm quite happy -- lots of tedium avoided. Thanks to everyone who contributed suggestions. All were appreciated. Awesome response folks! -- Dave Hein On 23 Aug, 2011, at 18:25, DaveHein wrote: > I have a lot of HTML files that have do-nothing <span> blocks in them. > I'd like to select all the text -- including the opening and closing > tags -- and then strip HTML. Actually I'd like to just strip the > opening and closing span tags, and leave what's inside them alone. > > The problem I'm running into is that Balance Tags will select the > innner HTML but not the span tags themselves. So if I put the cursor > somewhere on or in "<span>some normal text here</span>" and did a Cmd- > B, the "some normal text here" would be selected, but the opening > "<span>" and closing "</span>" would not be selected. > > I cannot see any way to get the tags that delimit the selected text to > be selected as well. > > Any ideas? > > > NOTE: what I really want to do is just click on the opening <span> tag > and have a command that will remove that tag (along with it's closing > tag) ... leaving the inner text alone. > > -- > You received this message because you are subscribed to the > "BBEdit Talk" discussion group on Google Groups. > To post to this group, send email to bbedit@googlegroups.com > To unsubscribe from this group, send email to > bbedit+unsubscr...@googlegroups.com > For more options, visit this group at > <http://groups.google.com/group/bbedit?hl=en> > If you have a feature request or would like to report a problem, > please email "supp...@barebones.com" rather than posting to the group. > Follow @bbedit on Twitter: <http://www.twitter.com/bbedit> -- You received this message because you are subscribed to the "BBEdit Talk" discussion group on Google Groups. To post to this group, send email to bbedit@googlegroups.com To unsubscribe from this group, send email to bbedit+unsubscr...@googlegroups.com For more options, visit this group at <http://groups.google.com/group/bbedit?hl=en> If you have a feature request or would like to report a problem, please email "supp...@barebones.com" rather than posting to the group. Follow @bbedit on Twitter: <http://www.twitter.com/bbedit>