Saturday, February 7, 2009

[emeditor宏] 插入HTML标签

不知道如何解释,用过 DW 的人应该知道 Ctrl + T ,这个就是模拟那个的,不过没有自动提示就是了。
建议将这个宏也设置快捷键 Ctrl + T 。(具体设置请参见 Emeditor Macros Help)

输入(将~换成空格)输出
table <table>{原来选中的文字}</table>
table~ <table width="100%" border="0" cellpadding="0" cellspacing="0">{原来选中的文字}</table>
table~,tbody,tr,td <table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td>{原来选中的文字}</td></tr></tbody></table>
div#abc,p <div id="abc"><p>{原来选中的文字}</p>>div>
div#abc,p,a~,img~ <div id="abc"><p><a href="#"><img src="" width="" height=""/>{原来选中的文字}</a></p>>div>
规则:
  • 将输入作为标签名,补齐开始和结束标所需
  • 如果只是签名和空格,则将空格用一些默认属性填充,具体见 autoprop
  • 遇到逗号(,),则将逗号分割的各词单独补齐成为标签,并将后面的标签添加为前面标签的子标签
  • 之前选中的文字则作为最内层标签的内容,如果最内层是自闭合标签,则之前选中的内容跟随最内层标签后面
待完善功能:
  • 是否使用其他符号替代空格来补齐默认属性
  • 可以更好的交互编辑,类似 TextMate 的 tab 模式
  • 增加同层节点,现在只能创建多层子节点
var tag, autoprop={ a: 'href="#"', div: 'class=""', style: 'type="text/css"', link: 'type="text/css" rel="stylesheet" href=""', script: 'type="text/javascript" src=""', input: 'type="" name="" value=""', img: 'src="" width="" height=""', table: 'width="100%" border="0" cellpadding="0" cellspacing="0"', iframe: 'frameborder="0" scrolling="no" width="" height="" src=""' }, sigletag={'br':1, 'link':1, 'hr':1, 'col':1, 'input':1, 'meta':1, 'img':1}; if(tag = prompt("请输入标签:", "div")){ if(tag.indexOf(',')==-1){ var t = buildTag(tag); document.selection.Text = t[1] + document.selection.Text + t[2]; }else{ var tags = tag.split(/, */), rstr = '', rstr2 = ''; for(var i=0,iM=tags.length;i<iM;i++){ tag = buildTag(tags[i]); rstr += tag[1]; rstr2 = tag[2] + rstr2; } document.selection.Text = rstr + document.selection.Text + rstr2; } } /* 返回 [标签,起始标签,结束标签] */ function buildTag(t){ var tagname=t.split(/ +/)[0]; var autoa = (t == tagname + ' ') && (tagname in autoprop); if(tagname.match(/[#\.]/)){ var id = tagname.match(/#([^\.]+)/), cls = tagname.match(/\.[^\.]+/g); t = tagname = tagname.match(/^([^#\.]+)/)[1]; if(id)t += ' id="' + id[1] + '"'; if(cls){ t += ' class="' + cls.join(' ').replace(/\./g, '').replace(/ +/g, ' ') + '"'; } if(autoa)t += ' '; } if(autoa){ t += autoprop[tagname]; } return [tagname, "<" + t + (tagname in sigletag ? ' />' : '>'), tagname in sigletag ? '' : ("</" + tagname + ">")]; }

No comments: