Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch orefkov-develop Excluding Merge-Ins
This is equivalent to a diff from 25bbbf6a80 to 3a0874858c
2011-12-09
| ||
09:54 | Перенос разработок в основную ветку check-in: 3cef153517 user: orefkov tags: trunk | |
09:33 | Начата разработка окружения для кодогенераторов Leaf check-in: 3a0874858c user: orefkov tags: orefkov-develop | |
2011-12-07
| ||
13:13 | Начат скрипт по кодогенерации для будущей версии спта check-in: 0a9a17f581 user: orefkov tags: orefkov-develop | |
08:07 | Скрываю сообщения типа 'Объект Роль.Менеджер заблокирован.' check-in: 25bbbf6a80 user: artbear tags: trunk | |
2011-12-06
| ||
11:08 | Исправлена ошибка определения координат курсора в случае, когда альтернативный маркер позиции курсора находится ниже стандартного маркера (Попытка <?> Исключение <|> КонецПопытки). check-in: 1faf3daa2c user: kuntashov tags: trunk | |
Added code_gen/create_doc.js.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
$engine JScript $uname codegen_create_doc $dname Генератор Документов $addin codegen_manager $addin stdlib $addin vbs // (c) Александр Орефков orefkov at gmail.com // Скрипт - генератор кода создания нового документа // var attrTypeCategory = "{30E571BC-A897-4A78-B2E5-1EA6D48B5742}" codegen_manager.registerCodeGen("Документы/Новый/С заполнением всех реквизитов", genarateNewDoc) function genarateNewDoc(param) { // Для начала выберем вид документа var docKind = snegopat.parseTemplateString('<?"Выберите вид документа", Документ>') if(!docKind.length) return false vbs.result = "док" + docKind var varName = vbs.DoExecute('InputString result, "Укажите название группы"') // Получим список возможных типов var tf = new codegen_manager.TypeFinder() var mdObj = param.mdCont.rootObject.childObject("Документы", docKind) var defLangID = stdlib.getUuidFomMDRef(param.mdCont.rootObject.property("ОсновнойЯзык")) //var defLangMD = metadata.current.rootObject.childObject("Языки", defLangID) var defLangMD = param.mdCont.findByUUID(defLangID) var syn = mdObj.synonym(defLangMD.property("КодЯзыка")) if(!syn.length) syn = docKind var text = '//{ Создание документа "' + syn + '" в ' + varName +'\n' + varName + ' = Документы.' + docKind + '.СоздатьДокумент();\n' // Обработаем реквизиты документа text += processAttribs(" Заполнение реквизитов", "", "", varName, mdObj, tf) // Обработаем табличные части var tabPartsCount = mdObj.childObjectsCount("ТабличныеЧасти") if(tabPartsCount) { var lineVarName = varName + "Строка", indent = profileRoot.getValue("ModuleTextEditor/ReplaceTabOnInput") ? codegen_manager.fillLine(" ", profileRoot.getValue("ModuleTextEditor/TabSize")) : "\t" if(tabPartsCount > 1) text += "//{ Заполнение табличных частей\n" for(var i = 0; i < tabPartsCount; i++) { var tp = mdObj.childObject("ТабличныеЧасти", i) text += processAttribs(" Заполнение табличной части " + tp.name, "Для Каждого Из Цикл\n\t" + lineVarName + " = " + varName + "." + tp.name + ".Добавить();\n" , "КонецЦикла;\n", indent + lineVarName, tp, tf) } if(tabPartsCount > 1) text += "//} Заполнение табличных частей\n" } text += "//} Создание документа " + docKind + " в " + varName param.text = text return true } function processAttribs(comment, header, footer, line, obj, tf) { var lines = [] for(var i = 0, cnt = obj.childObjectsCount("Реквизиты"); i < cnt; i++) { var attr = obj.childObject("Реквизиты", i) var l = line + "." + attr.name + " = ; // " + tf.getTypeString(attr) var c = attr.comment if(c.length) l += " / " + c lines.push(l) } if(lines.length) return "//{ " + comment + "\n" + header + codegen_manager.formatAssign(lines) + footer + "//} " + comment + "\n" else return "" } |
Added code_gen/gen_mgr.js.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
$engine JScript $uname codegen_manager $dname Менеджер генераторов кода $addin stdlib // (c) Александр Орефков orefkov at gmail.com // Скрипт - для запуска различных генераторов кода // Данный скрипт должен быть загружен в addins.ini РАНЕЕ других скриптов - генераторов кода var attrTypeCategory = "{30E571BC-A897-4A78-B2E5-1EA6D48B5742}" // Сразу загрузим форму, т.к. ее дерево будет использоваться для хранения функций-кодогенераторов var codeGens = [], form form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self) form.ИспользоватьМетаданные = 1 form.Дерево.Колонки.Добавить("caller") // Регистрация функции кодогенератора. function registerCodeGen(description, caller) { var descr = description.split("/") var root = form.Дерево.Строки for(var i = 0; i < descr.length - 1; i++) { var row = root.Найти(descr[i], "Генератор") if(!row) { row = root.Добавить() row.Генератор = descr[i] row.Картинка = 0 } root = row.Строки } // Сначала попробуем найти, может такая запись уже есть. // Это позволит перезагружать скрипты-кодогенераторы row = root.Найти(descr[i]) if(!row) { row = root.Добавить() row.Генератор = descr[i] } row.Картинка = 1 row.caller = caller } // Собственно, выбор и запуск генерации SelfScript.Self["macrosХочу Кода!!!"] = function() { var pathToForm = SelfScript.fullPath.replace(/js$/, 'ssf') // Обработку событий формы привяжем к самому скрипту if(form.ОткрытьМодально()) { var mdCont = form.ИспользоватьМетаданные == 1 ? metadata.ib : metadata.current var caller = form.ЭлементыФормы.Дерево.ТекущиеДанные.caller var param = {mdCont:mdCont, text:"", caretToBegin:true} if(!caller(param)) return var text = param.text var txtWnd = snegopat.activeTextWindow() if(!txtWnd || txtWnd.readOnly) Message(text) else { // Надо получить отступ var sel = txtWnd.getSelection() var textLine = txtWnd.line(sel.beginRow) // Курсор может быть за концом строки while(textLine.length < sel.beginCol - 1) textLine += ' ' // Оставим только часть строки перед курсором textLine = textLine.substr(0, sel.beginCol - 1) var m = textLine.match(/^\s+/) if(m) // Есть пробельные символы в начале строки text = text.replace(/\n/g, '\n' + m[0]) // Заменим переводы строк на перевод строк + отступ text = text.replace(/\s+$/m, '') // СокрП // Вставим текст txtWnd.selectedText = text if(param.caretToBegin) txtWnd.setCaretPos(sel.beginRow, sel.beginCol) } } } // Обработчики событий формы function ПриОткрытии() { // Если текущая конфа не открыта или не отличается от конфы ИБ, // то нет смысла выбирать метаданные if(!stdlib.isConfigOpen() || !stdlib.isConfigsDifferent()) { form.ИспользоватьМетаданные = 1 form.ЭлементыФормы.ОткрытаяКонфигурация.Доступность = false } else form.ЭлементыФормы.ОткрытаяКонфигурация.Доступность = true } function КоманднаяПанель1ОК(Кнопка) { form.Закрыть(true) } function ДеревоПриАктивизацииСтроки(Элемент) { form.ЭлементыФормы.КоманднаяПанель1.Кнопки.Ок.Доступность = !!Элемент.val.ТекущиеДанные.caller } function ДеревоВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) { if(Элемент.val.ТекущиеДанные.caller) form.Закрыть(true) } ///////////////////////////////////////////////////////// // Разные полезняшки для кодогенераторов // Класс для получения названий типов объекта матаданных, т.к. штатный объект ОписаниеТипов в // режиме Конфигуратора не выдает типы, основанные на метаданных. function TypeFinder() { var types = new VBArray(metadata.current.typeList(attrTypeCategory, 1)).toArray() for(var i in types) { var t = types[i].split(",") this[t[1]] = t[0] } } TypeFinder.prototype.getTypeString = function(mdObj) { var text = [] var types = new VBArray(mdObj.types()).toArray() for(var i in types) text.push(this[types[i]]); return text.join(", ") } // Функция, обрабатывает переданный массив строк, выравнивая в них знаки "=" function formatAssign(lines) { var tabSize = profileRoot.getValue("ModuleTextEditor/TabSize") var ll = [] maxEqualPos = -1 for(var l in lines) { var line = {text: lines[l]} line.eqRealPos = line.text.indexOf("=") if(line.eqRealPos >= 0) { line.eqPosInSpaces = 0 for(var k = 0; k < line.eqRealPos; k++) { if(line.text.charAt(k) == "\t") line.eqPosInSpaces += tabSize - (line.eqPosInSpaces % tabSize) else line.eqPosInSpaces++ } if(line.eqPosInSpaces > maxEqualPos) maxEqualPos = line.eqPosInSpaces } ll.push(line) } var text = "" for(var l in ll) { var line = ll[l] if(line.eqRealPos < 0) text += line.text + "\n" else text += line.text.substr(0, line.eqRealPos) + fillLine(" ", maxEqualPos - line.eqPosInSpaces) + line.text.substr(line.eqRealPos) + "\n" } return text } // Получить строку одинаковых символов указанной длины function fillLine(symbol, count) { var text = "" while(count--) text += symbol return text } |
Added code_gen/gen_mgr.ssf.
cannot compute difference between binary files
Changes to snippets.js.
153
154
155
156
157
158
159
160
161
162
163
164
165
166
...
523
524
525
526
527
528
529
530
531
|
Message("Не удалось создать объект 'Svcsvc.Service'. Зарегистрируйте svcsvc.dll");
return false;
}
//debugger;
return sel.FilterValue(values.join("\r\n"), 1 | 4, '', 0, 0, 350, 250);
}
////} SnippetsManager
////////////////////////////////////////////////////////////////////////////////////////
////{ SnippetParametersManager
////
function SnippetParametersManager() {
................................................................................
function GetSnippetsManager() {
if (!SnippetsManager._instance)
new SnippetsManager();
return SnippetsManager._instance;
}
GetSnippetsManager();
////} Startup
|
>
>
>
>
|
>
|
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
...
527
528
529
530
531
532
533
534
535
536
|
Message("Не удалось создать объект 'Svcsvc.Service'. Зарегистрируйте svcsvc.dll"); return false; } //debugger; return sel.FilterValue(values.join("\r\n"), 1 | 4, '', 0, 0, 350, 250); } SnippetsManager.prototype.onProcessTemplate = function(params) { //Message("Вставляется текст из шаблона '" + params.name + "':\n" + params.text + "\nОтступ '" + params.indent + "'") } ////} SnippetsManager //////////////////////////////////////////////////////////////////////////////////////// ////{ SnippetParametersManager //// function SnippetParametersManager() { ................................................................................ function GetSnippetsManager() { if (!SnippetsManager._instance) new SnippetsManager(); return SnippetsManager._instance; } events.connect(snegopat, "onProcessTemplate", GetSnippetsManager()); ////} Startup |