Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var RussianNameProcessor = {
- sexM: 'm',
- sexF: 'f',
- gcaseIm: 'nominative', gcaseNom: 'nominative', // именительный
- gcaseRod: 'genitive', gcaseGen: 'genitive', // родительный
- rules: {
- lastName: {
- exceptions: [
- ' дюма,тома,дега,люка,ферма,гамарра,петипа,шандра . . . . .',
- ' гусь,ремень,камень,онук,богода,нечипас,долгопалец,маненок,рева,кива . . . . .',
- ' вий,сой,цой,хой -я -ю -я -ем -е'
- ],
- suffixes: [
- 'f б,в,г,д,ж,з,й,к,л,м,н,п,р,с,т,ф,х,ц,ч,ш,щ,ъ,ь . . . . .',
- 'f ска,цка -ой -ой -ую -ой -ой',
- 'f ая --ой --ой --ую --ой --ой',
- ' ская --ой --ой --ую --ой --ой',
- 'f на -ой -ой -у -ой -ой',
- ' иной -я -ю -я -ем -е',
- ' уй -я -ю -я -ем -е',
- ' ца -ы -е -у -ей -е',
- ' рих а у а ом е',
- ' ия . . . . .',
- ' иа,аа,оа,уа,ыа,еа,юа,эа . . . . .',
- ' их,ых . . . . .',
- ' о,е,э,и,ы,у,ю . . . . .',
- ' ова,ева -ой -ой -у -ой -ой',
- ' га,ка,ха,ча,ща,жа -и -е -у -ой -е',
- ' ца -и -е -у -ей -е',
- ' а -ы -е -у -ой -е',
- ' ь -я -ю -я -ем -е',
- ' ия -и -и -ю -ей -и',
- ' я -и -е -ю -ей -е',
- ' ей -я -ю -я -ем -е',
- ' ян,ан,йн а у а ом е',
- ' ынец,обец --ца --цу --ца --цем --це',
- ' онец,овец --ца --цу --ца --цом --це',
- ' ц,ч,ш,щ а у а ем е',
- ' ай -я -ю -я -ем -е',
- ' гой,кой -го -му -го --им -м',
- ' ой -го -му -го --ым -м',
- ' ах,ив а у а ом е',
- ' ший,щий,жий,ний --его --ему --его -м --ем',
- ' кий,ый --ого --ому --ого -м --ом',
- ' ий -я -ю -я -ем -и',
- ' ок --ка --ку --ка --ком --ке',
- ' ец --ца --цу --ца --цом --це',
- ' в,н а у а ым е',
- ' б,г,д,ж,з,к,л,м,п,р,с,т,ф,х а у а ом е'
- ]
- },
- firstName: {
- exceptions: [
- ' лев --ьва --ьву --ьва --ьвом --ьве',
- ' павел --ла --лу --ла --лом --ле',
- 'm шота . . . . .',
- 'm пётр ---етра ---етру ---етра ---етром ---етре',
- 'f рашель,нинель,николь,габриэль,даниэль . . . . .'
- ],
- suffixes: [
- ' е,ё,и,о,у,ы,э,ю . . . . .',
- 'f б,в,г,д,ж,з,й,к,л,м,н,п,р,с,т,ф,х,ц,ч,ш,щ,ъ . . . . .',
- 'f ь -и -и . ю -и',
- 'm ь -я -ю -я -ем -е',
- ' га,ка,ха,ча,ща,жа -и -е -у -ой -е',
- ' а -ы -е -у -ой -е',
- ' ия -и -и -ю -ей -и',
- ' я -и -е -ю -ей -е',
- ' ей -я -ю -я -ем -е',
- ' ий -я -ю -я -ем -и',
- ' й -я -ю -я -ем -е',
- ' б,в,г,д,ж,з,к,л,м,н,п,р,с,т,ф,х,ц,ч а у а ом е'
- ]
- },
- middleName: {
- suffixes: [
- ' ич а у а ем е',
- ' на -ы -е -у -ой -е'
- ]
- }
- },
- initialized: false,
- init: function() {
- if(this.initialized) return;
- this.prepareRules();
- this.initialized = true;
- },
- prepareRules: function() {
- for(var type in this.rules) {
- for(var key in this.rules[type]) {
- for(var i = 0, n = this.rules[type][key].length; i < n; i++) {
- this.rules[type][key][i] = this.rule(this.rules[type][key][i]);
- }
- }
- }
- },
- rule: function(rule) {
- var m = rule.match(/^\s*([fm]?)\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/);
- if(m) return {
- sex: m[1],
- test: m[2].split(','),
- mods: [m[3], m[4], m[5], m[6], m[7]]
- }
- return false;
- },
- // склоняем слово по указанному набору правил и исключений
- word: function(word, sex, wordType, gcase) {
- // исходное слово находится в именительном падеже
- if(gcase == this.gcaseNom) return word;
- // составные слова
- if(word.match(/[-]/)) {
- var list = word.split('-');
- for(var i = 0, n = list.length; i < n; i++) {
- list[i] = this.word(list[i], sex, wordType, gcase);
- }
- return list.join('-');
- }
- // Иванов И. И.
- if(word.match(/^[А-ЯЁ]\.?$/i)) return word;
- this.init();
- var rules = this.rules[wordType];
- if(rules.exceptions) {
- var pick = this.pick(word, sex, gcase, rules.exceptions, true);
- if(pick) return pick;
- }
- var pick = this.pick(word, sex, gcase, rules.suffixes, false);
- return pick || word;
- },
- // выбираем из списка правил первое подходящее и применяем
- pick: function(word, sex, gcase, rules, matchWholeWord) {
- wordLower = word.toLowerCase();
- for(var i = 0, n = rules.length; i < n; i++) {
- if(this.ruleMatch(wordLower, sex, rules[i], matchWholeWord)) {
- return this.applyMod(word, gcase, rules[i]);
- }
- }
- return false;
- },
- // проверяем, подходит ли правило к слову
- ruleMatch: function(word, sex, rule, matchWholeWord) {
- if(rule.sex == this.sexM && sex == this.sexF) return false; // male by default
- if(rule.sex == this.sexF && sex != this.sexF) return false;
- for(var i = 0, n = rule.test.length; i < n; i++) {
- var test = matchWholeWord ? word : word.substr(Math.max(word.length - rule.test[i].length, 0));
- if(test == rule.test[i]) return true;
- }
- return false;
- },
- // склоняем слово (правим окончание)
- applyMod: function(word, gcase, rule) {
- switch(gcase) {
- case this.gcaseNom: var mod = '.'; break;
- case this.gcaseGen: var mod = rule.mods[0]; break;
- default: throw "Unknown grammatic case: "+gcase;
- }
- for(var i = 0, n = mod.length; i < n; i++) {
- var c = mod.substr(i, 1);
- switch(c) {
- case '.': break;
- case '-': word = word.substr(0, word.length - 1); break;
- default: word += c;
- }
- }
- return word;
- }
- }
- // new RussianName('Козлов Евгений Павлович') // годится обычная форма
- // new RussianName('Евгений Павлович Козлов') // в таком виде тоже
- // new RussianName('Козлов', 'Евгений') // можно явно указать составляющие
- // new RussianName('Кунтидия', 'Убиреко', '', 'f') // можно явно указать пол ('m' или 'f')
- var RussianName = function(lastName, firstName, middleName, sex) {
- if(typeof firstName == 'undefined') {
- var m = lastName.match(/^\s*(\S+)(\s+(\S+)(\s+(\S+))?)?\s*$/);
- if(!m) throw "Cannot parse supplied name";
- if(m[5] && m[3].match(/(ич|на)$/) && !m[5].match(/(ич|на)$/)) {
- // Иван Петрович Сидоров
- lastName = m[5];
- firstName = m[1];
- middleName = m[3];
- this.fullNameSurnameLast = true;
- } else {
- // Сидоров Иван Петрович
- lastName = m[1];
- firstName = m[3];
- middleName = m[5];
- }
- }
- this.ln = lastName;
- this.fn = firstName || '';
- this.mn = middleName || '';
- this.sex = sex || this.getSex();
- }
- RussianName.prototype = {
- // constants
- sexM: RussianNameProcessor.sexM,
- sexF: RussianNameProcessor.sexF,
- gcaseIm: RussianNameProcessor.gcaseIm, gcaseNom: RussianNameProcessor.gcaseNom, // именительный
- gcaseRod: RussianNameProcessor.gcaseRod, gcaseGen: RussianNameProcessor.gcaseGen, // родительный
- fullNameSurnameLast: false,
- ln: '', fn: '', mn: '', sex: '',
- // если пол явно не указан, его можно легко узнать по отчеству
- getSex: function() {
- if(this.mn.length > 2) {
- switch(this.mn.substr(this.mn.length - 2)) {
- case 'ич': return this.sexM;
- case 'на': return this.sexF;
- }
- }
- return '';
- },
- fullName: function(gcase) {
- return (
- (this.fullNameSurnameLast ? '' : this.lastName(gcase) + ' ')
- + this.firstName(gcase) + ' ' + this.middleName(gcase) +
- (this.fullNameSurnameLast ? ' ' + this.lastName(gcase) : '')
- ).replace(/^ +| +$/g, '');
- },
- lastName: function(gcase) {
- return RussianNameProcessor.word(this.ln, this.sex, 'lastName', gcase);
- },
- firstName: function(gcase) {
- return RussianNameProcessor.word(this.fn, this.sex, 'firstName', gcase);
- },
- middleName: function(gcase) {
- return RussianNameProcessor.word(this.mn, this.sex, 'middleName', gcase);
- }
- }
- function otryad(a) {
- var x;
- switch(a) {
- case '«Infinity»':
- x = '10tVuGuDLD1mJ-8X6ITjLGYIRxpXsodxX';
- break;
- case '«Victory»':
- x = '1V438hrLGlwaNTUOgzE19mvWxR_WiuR47';//
- break;
- case '«АВД»':
- x = '1T2QsgXAw7NWMHfKnrkUBvNvjDQ27ZiWf';
- break;
- case '«Апельсин»':
- x = '1W09NmJZ0eB_HT-xuR-cXRpdnSsnK20A1';
- break;
- case '«Вита»':
- x = '12W7p2kewK-8TIQMNdV7_eCEx3z7nlo6P';
- break;
- case '«Данко»':
- x = '1EB8K1RwR2GqXd81K6Zvbj4S-BQRyzbnq';
- break;
- case '«Детки»':
- x = '10YByi47BffJITtwCblHzWJcxY0NGVk4w';
- break;
- case '«Дзержинец»':
- x = '1kGd4SIJvqZ87AlZDQhMeQRXy-rhubiif';
- break;
- case '«Драйв»':
- x = '1uKjFFoPRPTzvMmJtZeL36cqzNC4pHvJc';
- break;
- case '«Друзья»':
- x = '1v6mCPsRjP0DRgVBKeVwFX6RjqG6kFSol';
- break;
- case '«Лето»':
- x = '11JUC3_mkYNFfX1yyypUsBobiBfVFM7fq';
- break;
- case '«Лечо»':
- x = '1sQ8E_eLy2epiva8lzh9jX0fZ4CC9LqfA';
- break;
- case '«Нова»':
- x = '1SSbTFy0yXRCU82aE2AeAyCUTtw7t_Lwx';
- break;
- case '«Парус»':
- x = '17if1TB7Jv18ipZm9WkBvQAZqSZYolTWU';
- break;
- case '«Свет»':
- x = '1ztmJL2V2G0gc-NaJNgF38q185jfdg3WK';
- break;
- case '«Сказка»':
- x = '1SFarGFmXxCgO4Ta6ZFGEldLtySfsSGPV';
- break;
- case '«Феникс»':
- x = '1e7FN6gCcsfpYJkokOQKEGvf-tfvQ9Uhs';
- break;
- case '«Южный Ветер»':
- x = '11ODR-4NrLXgtTVX_ZgPClFkN05czF2ux';
- break;
- case '«KetGood»':
- x = '122qtk8oR1LOHlpEh9UK3ydi7Arg3GiW1';
- break;
- case '«Sun»':
- x = '16o3B3shiMnqYMX1wcckUxTuh401d7xVZ';
- break;
- case '«Авангард»':
- x = '1HBcTSr7O6HfP2G8ce0dsLW1zhCo2ISJb';
- break;
- case '«Арбат»':
- x = '181U1Kx1HsMuDA_aVt41UYNYDavVh2vjf';
- break;
- case '«Армада»':
- x = '16r1bc7epGMaPr4JZkmUdyjVgXWl1LCLU';
- break;
- case '«Вектор»':
- x = '1MPv1Ha659CCoGer0HyfAlwHlc-4CO8f8';
- break;
- case '«Италмас»':
- x = '16VHfazHwm6rwKTC228BO4-PGxSyq7pDX';
- break;
- case '«Ланселот»':
- x = '1FiDnWwgm9c7umGftgGqLu_8y4D-9gYfH';
- break;
- case '«Невада»':
- x = '1r-rlcbfbvRctgXuPjf7OPJFI4hBAtAPQ';
- break;
- case '«Нон-Стоп»':
- x = '1Zbndjcmcztr_BzK01A9bBnU3uiP0jqVu';
- break;
- case '«Орион»':
- x = '18sf2jEoOuw1HbBI1TefGYmrnUojtP6tW';
- break;
- case '«Пегас»':
- x = '1dJdZ1qBksSCKArxpq7TisXzWxKeswZQW';
- break;
- case '«Проф.com»':
- x = '1XGMUqPTlpr-Rc2qR-tUQ1GHPnwCiNs2P';
- break;
- case '«Рассвет»':
- x = '1iCZ902CSIG69-O8JiyunWk8zD0jhFiMl';
- break;
- case '«РОМАТ»':
- x = '1Ul_o74ZQOzvvHUGs2aNnlcZqnRokYMJJ';
- break;
- case '«Титан»':
- x = '1FiLT-E9Vpni7g3O-sNwFOtF9nW2lkhq9';
- break;
- case '«Эдельвейс»':
- x = '1OxfOGfFxHRCkZOTlJlFFf1VBk4h22gts';
- break;
- case '«Элемент»':
- x = '1icpBK2ruv7re2zAlEyDKpfyrsJqj27v1';
- break;
- case '«Вихрь»':
- x = '1Dk9HToR4OLDZRMlkWHN1r_XLSPQDU4ae';
- break;
- case '«Высота»':
- x = '1uqv5FcsdBXTCZhUeJVyrjzgGwR1OlGcV';
- break;
- case '«Грация»':
- x = '1GxuQVfgzKn_zCTG7p0AYghsnizJwJLYp';
- break;
- case '«Д.Э.М.С.»':
- x = '1Oze9Omt6gm-T5HQnfGLm-fx6InKESkCa';
- break;
- case '«Колосс»':
- x = '11TXls6_DF0AZvAO-TKbulXI7YN4EhEIs';
- break;
- case '«Монолит»':
- x = '1MGilVy-4q72AGEVI8iDb6vefkDmw8qAh';
- break;
- case '«Ритм»':
- x = '1gUoMJEqQqXtjDgemY3ZAO5wXs-Nj4xCS';
- break;
- case '«Стронг»':
- x = '1BPzdqiLHvmK73ouxc2Freb_WlJ87odbK';
- break;
- case '«Спасатели»':
- x = '13zjYYckwCQAFCGqKB-lMvV8Lvv2Oasam';
- break;
- case '«Кристалл»':
- x = '1KKL8eo8ibSEc_CIYoaw4QWlnF94fvPsy';
- break;
- case '«Эндорфин»':
- x = '17MyyKR2MCE9kkZvyL_-0ubrn_MuvMUQn';
- break;
- default:
- x = '1C38It8l6rITCdu2imbssNS0MrLsU7LFl';
- }
- return x;
- }
- function napravlenie(a) {
- var x;
- switch(a) {
- case 'Студенческие Отряды Проводников':
- x = 'СОП';
- break;
- case 'Студенческие Педагогические Отряды':
- x = 'СПО';
- break;
- case 'Студенческие Строительные Отряды':
- x = 'ССО';
- break;
- case 'Студенческие Сервисные Отряды':
- x = 'ССервО';
- break;
- case 'Студенческие Сельскохозяйственные Отряды':
- x = 'СВО';
- break;
- case 'Студенческие Медицинские Отряды':
- x = 'СМО';
- break;
- }
- return x;
- }
- function spravka() {
- var ss=SpreadsheetApp.getActive();
- var sheet=ss.getSheets()[0];
- var lastR=sheet.getLastRow();
- var clientData=sheet.getRange(lastR,1,1,60).getValues();
- var opa = clientData[0][3]+' '+clientData[0][4]+' '+clientData[0][5];
- //new RussianName('Кунтидия', 'Убиреко', '', 'f') // можно явно указать пол ('m' или 'f')
- var male = clientData[0][6];
- var q;
- if(male == 'Женский') q = 'f';
- if(male == 'Мужской') q = 'm';
- var one = new RussianName(clientData[0][3],'','',q);
- //rn.fullName(rn.gcaseRod); // Паниковского Михаила Самуэльевича
- var tu = new RussianName('',clientData[0][4],'',q);
- var fri = new RussianName('','',clientData[0][5],q);
- //var fio=clientData[0][30];
- //var name=clientData[0][31];
- //var otch=clientData[0][32];
- var fio=one.fullName(one.gcaseRod);
- var name=tu.fullName(tu.gcaseRod);
- var otch=fri.fullName(fri.gcaseRod);
- var date=clientData[0][7];
- var udsu=clientData[0][24];
- var fak=clientData[0][25];
- var ochno=clientData[0][27];
- var bud=clientData[0][28];
- var grup=clientData[0][26];
- var index=clientData[0][17];
- var dom=clientData[0][18];
- var jizn=clientData[0][19];
- var tel=clientData[0][9];
- var mail=clientData[0][10];
- var ser=clientData[0][11];
- var nomer=clientData[0][12];
- var kem=clientData[0][14];
- var kogda=clientData[0][15];
- var kod=clientData[0][16];
- var napr=napravlenie(clientData[0][21]);
- var lans=clientData[0][22];
- var dirTemp=DriveApp.getFolderById(otryad(lans));
- var template=DriveApp.getFileById('1b8zeG8dQ1_LKRSfKz8wVGS9Gktu_jkP3bNyvywINIpU').m1b8zeG8dQ1_LKRSfKz8wVGS9Gktu_jkP3bNyvywINIpUakeCopy(opa,dirTemp).getId();
- var docbody=DocumentApp.openById(template).getBody();
- docbody.replaceText('fio', fio);
- docbody.replaceText('name', name);
- docbody.replaceText('otch', otch);
- docbody.replaceText('date', date);
- docbody.replaceText('udsu', udsu);
- docbody.replaceText('fak', fak);
- docbody.replaceText('ochno', ochno);
- docbody.replaceText('bud', bud);
- docbody.replaceText('grup', grup);
- docbody.replaceText('ind', index);
- docbody.replaceText('post', dom);
- docbody.replaceText('jizn', jizn);
- docbody.replaceText('tel', tel);
- docbody.replaceText('email', mail);
- docbody.replaceText('ser', ser);
- docbody.replaceText('nomer', nomer);
- docbody.replaceText('kem', kem);
- docbody.replaceText('kogda', kogda);
- docbody.replaceText('kod', kod);
- docbody.replaceText('napr', napr);
- docbody.replaceText('lans', lans);
- sheet.getRange(lastR, 40).setValue(template)
- }
Advertisement
Add Comment
Please, Sign In to add comment