2010년 9월 14일 화요일

eclispse monkey

[code javascript] /* * Menu: Actionscript > Convention Generator * Key: M3+1 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript * Author: Yi Tan * MoreInfo: http://code.google.com/p/yis-eclipse-monkey-scripts-for-flash-builder/ */ /** * [What's this] * This script automatically converts input to class properties. * * For example: * * Your enter: * -propertyName:n= * * It will be converted to: * private var propertyName:Number= 0; * * * [Shortcut Key] * * Alt + 1 * * [How to use] * * Pleae check the how to slides * * http://www.slideshare.net/halfmile/convention-generator-yis-eclipse-monkey-scripts-for-flash-builder * * [Change log] * * 2009/11/11 Fix bug: fail to parse property name when there is input for the data type * 2009/11/6 Add condition checking for nil selection * 2009/10/31 First version * */ var ACCESS_TYPE_PUBLIC = "+"; var ACCESS_TYPE_PRIVATE = "-"; var ACCESS_TYPE_PROTECTED = "*"; var ALL_ACCESS_TYPES = "+-*"; var ACCESS_TYPES = {"+":"public", "-":"private", "*":"protected"}; var MEMBER_TYPE_METHOD = "method"; var MEMBER_TYPE_PROPERTY = "property"; var DATA_TYPE_DEFAULT_VALUES = { "Object":"{}", "String":'""', "Boolean":"false", "Array":"[]", "Number":"0", "int":"0", "uint":"0", "Vector":"new Vector.<>()", "XML":'""' }; var DATA_TYPE_ABBRES = { "o":"Object", "s":"String", "b":"Boolean", "a":"Array", "n":"Number", "i":"int", "u":"uint", "v":"Vector", "x":"XML" } function main() { var editor = editors.activeEditor var source = editor.source if (!editor.selectionRange) return; var range = editor.selectionRange; var offset = range.startingOffset; var text = (offset == range.endingOffset)? editor.source.split(editor.lineDelimiter)[editor.getLineAtOffset(editor.currentOffset)].replace(/^\s+|\s+$/g, ''): source.substring (offset, range.endingOffset); if (range.startingOffset == range.endingOffset) // when there is no selection offset -= text.length; if (text.length < 1) { alert("Please select your input."); return; } // auto TODO if (text == "td") { editor.applyEdit(offset, range.endingOffset - offset, "// TODO: Need Implementation "); return; } // detect property type var memberType = (text.search(/\(\)/) != -1) ? MEMBER_TYPE_METHOD : MEMBER_TYPE_PROPERTY; // add default access type if (ALL_ACCESS_TYPES.indexOf(text[0]) == -1) text = "+"+text; switch(memberType){ case MEMBER_TYPE_METHOD: // result = generateMethod(text); text = text.replace(text[0], ACCESS_TYPES[text[0]] + " function "); var dataType = text.match(/\:\w+/) if(! dataType) { text += ":void"; } else { dataType = dataType[0].replace(":",""); // parse data type abbrevations if (dataType.length == 1) { var fullDataType = DATA_TYPE_ABBRES[dataType.toLowerCase()] || dataType; // alert("fullDataType :"+fullDataType ); text = text.replace(":"+dataType, ":"+fullDataType); } } text += "\n{\n\n}" ; break; case MEMBER_TYPE_PROPERTY: // get propertyName and data type if(text.indexOf(":") != -1) { var propertyName = text.match(/\w+\:/)[0].replace(/\:/,""); var dataType = text.match(/\:\w+/)[0].replace(":",""); } else { // no input for data type var propertyName = text.match(/\w+/)[0]; var dataType = "* "; } // append declaration var declaration = " var "; if (text.indexOf("$$") != -1) // $$ -> static const { declaration = " static const "; text = text.replace(propertyName, propertyName.toUpperCase()); text = text.replace("$$", ""); } else if(text.indexOf("$") != -1) // $ -> static { declaration = " static var "; text = text.replace("$", ""); } text = text.replace(text[0], ACCESS_TYPES[text[0]] + declaration); // parse data type abbrevations if (dataType.length == 1) { var fullDataType = DATA_TYPE_ABBRES[dataType.toLowerCase()] || dataType; // alert("fullDataType :"+fullDataType ); text = text.replace(":"+dataType, ":"+fullDataType); dataType = fullDataType; } // append default value if required if (text.lastIndexOf("=") == text.length -1 ) { var defaultValue = DATA_TYPE_DEFAULT_VALUES[dataType] || "null" ; text += " "+defaultValue; } if (text.lastIndexOf("n") == text.length -1 ) { var defaultValue = DATA_TYPE_DEFAULT_VALUES[dataType] || " new "+dataType+"()" ; text = text.substr(0,text.lastIndexOf("n"))+defaultValue; } text += ";"; // auto getter and setter if(propertyName[0] == "_") { // alert("// auto getter and setter"); var accessorName = propertyName.substr(1); text += "\n\t\tpublic function get " + accessorName + "():" + dataType + " {"; text += "\n\t\t\treturn " + propertyName + ";"; text += "\n\t\t}\n\n"; text += "\t\tpublic function set " + accessorName + "("+accessorName+":" + dataType + "):void {"; text += "\n\t\t\t" + propertyName + " = "+accessorName+";"; text += "\n\t\t}\n"; } break; } // var result = "public static const " + text + ":String = '" + text.toLowerCase() + "';"; editor.applyEdit(offset, range.endingOffset - offset, text); } [/code] 원래 출처: http://code.google.com/p/yis-eclipse-monkey-scripts-for-flash-builder/
원본 저자: Yi Tan (yi2004@gmail.com)

eclipse monkey

몇가지 불편한거 추가..

setter/getter 이상한거 수정
property:Type= n -> 실행시
property:Type= new Type(); 으로 변환 되는 기능 추가

댓글 없음:

댓글 쓰기