Spicke

Ustav

Nov 6th, 2020 (edited)
2,008
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var RussianNameProcessor = {
  2.     sexM: 'm',
  3.     sexF: 'f',
  4.     gcaseIm:   'nominative',      gcaseNom: 'nominative',      // именительный
  5.     gcaseRod:  'genitive',        gcaseGen: 'genitive',        // родительный
  6.    
  7.     rules: {
  8.         lastName: {
  9.             exceptions: [
  10.                 '   дюма,тома,дега,люка,ферма,гамарра,петипа,шандра . . . . .',
  11.                 '   гусь,ремень,камень,онук,богода,нечипас,долгопалец,маненок,рева,кива . . . . .',
  12.                 '   вий,сой,цой,хой -я -ю -я -ем -е'
  13.             ],
  14.             suffixes: [
  15.                 'f  б,в,г,д,ж,з,й,к,л,м,н,п,р,с,т,ф,х,ц,ч,ш,щ,ъ,ь . . . . .',
  16.                 'f  ска,цка  -ой -ой -ую -ой -ой',
  17.                 'f  ая       --ой --ой --ую --ой --ой',
  18.                 '   ская     --ой --ой --ую --ой --ой',
  19.                 'f  на       -ой -ой -у -ой -ой',
  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.         firstName: {
  67.             exceptions: [
  68.                 '   лев    --ьва --ьву --ьва --ьвом --ьве',
  69.                 '   павел  --ла  --лу  --ла  --лом  --ле',
  70.                 'm  шота   . . . . .',
  71.                 'm  пётр   ---етра ---етру ---етра ---етром ---етре',
  72.                 'f  рашель,нинель,николь,габриэль,даниэль   . . . . .'
  73.             ],
  74.             suffixes: [
  75.                 '   е,ё,и,о,у,ы,э,ю   . . . . .',
  76.                 'f  б,в,г,д,ж,з,й,к,л,м,н,п,р,с,т,ф,х,ц,ч,ш,щ,ъ   . . . . .',
  77.  
  78.                 'f  ь   -и -и . ю -и',
  79.                 'm  ь   -я -ю -я -ем -е',
  80.  
  81.                 '   га,ка,ха,ча,ща,жа  -и -е -у -ой -е',
  82.                 '   а   -ы -е -у -ой -е',
  83.                 '   ия  -и -и -ю -ей -и',
  84.                 '   я   -и -е -ю -ей -е',
  85.                 '   ей  -я -ю -я -ем -е',
  86.                 '   ий  -я -ю -я -ем -и',
  87.                 '   й   -я -ю -я -ем -е',
  88.                 '   б,в,г,д,ж,з,к,л,м,н,п,р,с,т,ф,х,ц,ч    а у а ом е'
  89.             ]
  90.         },
  91.         middleName: {
  92.             suffixes: [
  93.                 '   ич   а  у  а  ем  е',
  94.                 '   на  -ы -е -у -ой -е'
  95.             ]
  96.         }
  97.     },
  98.  
  99.     initialized: false,
  100.     init: function() {
  101.         if(this.initialized) return;
  102.         this.prepareRules();
  103.         this.initialized = true;
  104.     },
  105.  
  106.     prepareRules: function() {
  107.         for(var type in this.rules) {
  108.             for(var key in this.rules[type]) {
  109.                 for(var i = 0, n = this.rules[type][key].length; i < n; i++) {
  110.                     this.rules[type][key][i] = this.rule(this.rules[type][key][i]);
  111.                 }
  112.             }
  113.         }
  114.     },
  115.  
  116.     rule: function(rule) {
  117.         var m = rule.match(/^\s*([fm]?)\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/);
  118.         if(m) return {
  119.             sex: m[1],
  120.             test: m[2].split(','),
  121.             mods: [m[3], m[4], m[5], m[6], m[7]]
  122.         }
  123.         return false;
  124.     },
  125.    
  126.     // склоняем слово по указанному набору правил и исключений
  127.     word: function(word, sex, wordType, gcase) {
  128.         // исходное слово находится в именительном падеже
  129.         if(gcase == this.gcaseNom) return word;
  130.        
  131.         // составные слова
  132.         if(word.match(/[-]/)) {
  133.             var list = word.split('-');
  134.             for(var i = 0, n = list.length; i < n; i++) {
  135.                 list[i] = this.word(list[i], sex, wordType, gcase);
  136.             }
  137.             return list.join('-');
  138.         }
  139.        
  140.         // Иванов И. И.
  141.         if(word.match(/^[А-ЯЁ]\.?$/i)) return word;
  142.        
  143.         this.init();
  144.         var rules = this.rules[wordType];
  145.  
  146.         if(rules.exceptions) {
  147.             var pick = this.pick(word, sex, gcase, rules.exceptions, true);
  148.             if(pick) return pick;
  149.         }
  150.         var pick = this.pick(word, sex, gcase, rules.suffixes, false);
  151.         return pick || word;
  152.     },
  153.    
  154.     // выбираем из списка правил первое подходящее и применяем
  155.     pick: function(word, sex, gcase, rules, matchWholeWord) {
  156.         wordLower = word.toLowerCase();
  157.         for(var i = 0, n = rules.length; i < n; i++) {
  158.             if(this.ruleMatch(wordLower, sex, rules[i], matchWholeWord)) {
  159.                 return this.applyMod(word, gcase, rules[i]);
  160.             }
  161.         }
  162.         return false;
  163.     },
  164.    
  165.     // проверяем, подходит ли правило к слову
  166.     ruleMatch: function(word, sex, rule, matchWholeWord) {
  167.         if(rule.sex == this.sexM && sex == this.sexF) return false; // male by default
  168.         if(rule.sex == this.sexF && sex != this.sexF) return false;
  169.         for(var i = 0, n = rule.test.length; i < n; i++) {
  170.             var test = matchWholeWord ? word : word.substr(Math.max(word.length - rule.test[i].length, 0));
  171.             if(test == rule.test[i]) return true;
  172.         }
  173.         return false;
  174.     },
  175.    
  176.     // склоняем слово (правим окончание)
  177.     applyMod: function(word, gcase, rule) {
  178.         switch(gcase) {
  179.             case this.gcaseNom: var mod = '.'; break;
  180.             case this.gcaseGen: var mod = rule.mods[0]; break;
  181.             default: throw "Unknown grammatic case: "+gcase;
  182.         }
  183.         for(var i = 0, n = mod.length; i < n; i++) {
  184.             var c = mod.substr(i, 1);
  185.             switch(c) {
  186.                 case '.': break;
  187.                 case '-': word = word.substr(0, word.length - 1); break;
  188.                 default: word += c;
  189.             }
  190.         }
  191.         return word;
  192.     }
  193. }
  194.  
  195. // new RussianName('Козлов Евгений Павлович')      // годится обычная форма
  196. // new RussianName('Евгений Павлович Козлов')      // в таком виде тоже
  197. // new RussianName('Козлов', 'Евгений')        // можно явно указать составляющие
  198. // new RussianName('Кунтидия', 'Убиреко', '', 'f') // можно явно указать пол ('m' или 'f')
  199. var RussianName = function(lastName, firstName, middleName, sex) {
  200.     if(typeof firstName == 'undefined') {
  201.         var m = lastName.match(/^\s*(\S+)(\s+(\S+)(\s+(\S+))?)?\s*$/);
  202.         if(!m) throw "Cannot parse supplied name";
  203.         if(m[5] && m[3].match(/(ич|на)$/) && !m[5].match(/(ич|на)$/)) {
  204.             // Иван Петрович Сидоров
  205.             lastName = m[5];
  206.             firstName = m[1];
  207.             middleName = m[3];
  208.             this.fullNameSurnameLast = true;
  209.         } else {
  210.             // Сидоров Иван Петрович
  211.             lastName = m[1];
  212.             firstName = m[3];
  213.             middleName = m[5];
  214.         }
  215.     }
  216.     this.ln = lastName;
  217.     this.fn = firstName || '';
  218.     this.mn = middleName || '';
  219.     this.sex = sex || this.getSex();
  220. }
  221. RussianName.prototype = {
  222.     // constants
  223.     sexM: RussianNameProcessor.sexM,
  224.     sexF: RussianNameProcessor.sexF,
  225.     gcaseIm:   RussianNameProcessor.gcaseIm,   gcaseNom: RussianNameProcessor.gcaseNom, // именительный
  226.     gcaseRod:  RussianNameProcessor.gcaseRod,  gcaseGen: RussianNameProcessor.gcaseGen, // родительный
  227.    
  228.     fullNameSurnameLast: false,
  229.    
  230.     ln: '', fn: '', mn: '', sex: '',
  231.     // если пол явно не указан, его можно легко узнать по отчеству
  232.     getSex: function() {
  233.         if(this.mn.length > 2) {
  234.             switch(this.mn.substr(this.mn.length - 2)) {
  235.                 case 'ич': return this.sexM;
  236.                 case 'на': return this.sexF;
  237.             }
  238.         }
  239.         return '';
  240.     },
  241.    
  242.     fullName: function(gcase) {
  243.         return (
  244.             (this.fullNameSurnameLast ? '' : this.lastName(gcase) + ' ')
  245.             + this.firstName(gcase) + ' ' + this.middleName(gcase) +
  246.             (this.fullNameSurnameLast ? ' ' + this.lastName(gcase) : '')
  247.         ).replace(/^ +| +$/g, '');
  248.     },
  249.     lastName: function(gcase) {
  250.         return RussianNameProcessor.word(this.ln, this.sex, 'lastName', gcase);
  251.     },
  252.     firstName: function(gcase) {
  253.         return RussianNameProcessor.word(this.fn, this.sex, 'firstName', gcase);
  254.     },
  255.     middleName: function(gcase) {
  256.         return RussianNameProcessor.word(this.mn, this.sex, 'middleName', gcase);
  257.     }
  258. }
  259. function otryad(a) {
  260.   var x;
  261.   switch(a) {
  262.     case '«Infinity»':
  263.       x = '10tVuGuDLD1mJ-8X6ITjLGYIRxpXsodxX';
  264.       break;
  265.     case '«Victory»':
  266.       x = '1V438hrLGlwaNTUOgzE19mvWxR_WiuR47';
  267.       break;
  268.     case '«АВД»':
  269.       x = '1T2QsgXAw7NWMHfKnrkUBvNvjDQ27ZiWf';
  270.       break;
  271.     case '«Апельсин»':
  272.       x = '1W09NmJZ0eB_HT-xuR-cXRpdnSsnK20A1';
  273.       break;
  274.     case '«Вита»':
  275.       x = '12W7p2kewK-8TIQMNdV7_eCEx3z7nlo6P';
  276.       break;
  277.     case '«Данко»':
  278.       x = '1EB8K1RwR2GqXd81K6Zvbj4S-BQRyzbnq';
  279.       break;
  280.     case '«Детки»':
  281.       x = '10YByi47BffJITtwCblHzWJcxY0NGVk4w';
  282.       break;
  283.     case '«Дзержинец»':
  284.       x = '1kGd4SIJvqZ87AlZDQhMeQRXy-rhubiif';
  285.       break;
  286.     case '«Драйв»':
  287.       x = '1uKjFFoPRPTzvMmJtZeL36cqzNC4pHvJc';
  288.       break;
  289.     case '«Друзья»':
  290.       x = '1v6mCPsRjP0DRgVBKeVwFX6RjqG6kFSol';
  291.       break;
  292.     case '«Лето»':
  293.       x = '11JUC3_mkYNFfX1yyypUsBobiBfVFM7fq';
  294.       break;
  295.     case '«Лечо»':
  296.       x = '1sQ8E_eLy2epiva8lzh9jX0fZ4CC9LqfA';
  297.       break;
  298.     case '«Нова»':
  299.       x = '1SSbTFy0yXRCU82aE2AeAyCUTtw7t_Lwx';
  300.       break;
  301.     case '«Парус»':
  302.       x = '17if1TB7Jv18ipZm9WkBvQAZqSZYolTWU';
  303.       break;
  304.     case '«Свет»':
  305.       x = '1ztmJL2V2G0gc-NaJNgF38q185jfdg3WK';
  306.       break;
  307.     case '«Сказка»':
  308.       x = '1SFarGFmXxCgO4Ta6ZFGEldLtySfsSGPV';
  309.       break;
  310.     case '«Феникс»':
  311.       x = '1e7FN6gCcsfpYJkokOQKEGvf-tfvQ9Uhs';
  312.       break;
  313.     case '«Южный Ветер»':
  314.       x = '11ODR-4NrLXgtTVX_ZgPClFkN05czF2ux';
  315.       break;
  316.     case '«KetGood»':
  317.       x = '122qtk8oR1LOHlpEh9UK3ydi7Arg3GiW1';
  318.       break;
  319.     case '«Sun»':
  320.       x = '16o3B3shiMnqYMX1wcckUxTuh401d7xVZ';
  321.       break;
  322.     case '«Авангард»':
  323.       x = '1HBcTSr7O6HfP2G8ce0dsLW1zhCo2ISJb';
  324.       break;
  325.     case '«Арбат»':
  326.       x = '181U1Kx1HsMuDA_aVt41UYNYDavVh2vjf';
  327.       break;
  328.     case '«Армада»':
  329.       x = '16r1bc7epGMaPr4JZkmUdyjVgXWl1LCLU';
  330.       break;
  331.     case '«Вектор»':
  332.       x = '1MPv1Ha659CCoGer0HyfAlwHlc-4CO8f8';
  333.       break;
  334.     case '«Италмас»':
  335.       x = '16VHfazHwm6rwKTC228BO4-PGxSyq7pDX';
  336.       break;
  337.     case '«Ланселот»':
  338.       x = '1FiDnWwgm9c7umGftgGqLu_8y4D-9gYfH';
  339.       break;
  340.     case '«Невада»':
  341.       x = '1r-rlcbfbvRctgXuPjf7OPJFI4hBAtAPQ';
  342.       break;
  343.     case '«Нон-Стоп»':
  344.       x = '1Zbndjcmcztr_BzK01A9bBnU3uiP0jqVu';
  345.       break;
  346.     case '«Орион»':
  347.       x = '18sf2jEoOuw1HbBI1TefGYmrnUojtP6tW';
  348.       break;
  349.     case '«Пегас»':
  350.       x = '1dJdZ1qBksSCKArxpq7TisXzWxKeswZQW';
  351.       break;
  352.     case '«Проф.com»':
  353.       x = '1XGMUqPTlpr-Rc2qR-tUQ1GHPnwCiNs2P';
  354.       break;
  355.     case '«Рассвет»':
  356.       x = '1iCZ902CSIG69-O8JiyunWk8zD0jhFiMl';
  357.       break;
  358.     case '«РОМАТ»':
  359.       x = '1Ul_o74ZQOzvvHUGs2aNnlcZqnRokYMJJ';
  360.       break;
  361.     case '«Титан»':
  362.       x = '1FiLT-E9Vpni7g3O-sNwFOtF9nW2lkhq9';
  363.       break;
  364.     case '«Эдельвейс»':
  365.       x = '1OxfOGfFxHRCkZOTlJlFFf1VBk4h22gts';
  366.       break;
  367.     case '«Элемент»':
  368.       x = '1icpBK2ruv7re2zAlEyDKpfyrsJqj27v1';
  369.       break;
  370.     case '«Вихрь»':
  371.       x = '1Dk9HToR4OLDZRMlkWHN1r_XLSPQDU4ae';
  372.       break;
  373.     case '«Высота»':
  374.       x = '1uqv5FcsdBXTCZhUeJVyrjzgGwR1OlGcV';
  375.       break;
  376.     case '«Грация»':
  377.       x = '1GxuQVfgzKn_zCTG7p0AYghsnizJwJLYp';
  378.       break;
  379.     case '«Д.Э.М.С.»':
  380.       x = '1Oze9Omt6gm-T5HQnfGLm-fx6InKESkCa';
  381.       break;
  382.     case '«Колосс»':
  383.       x = '11TXls6_DF0AZvAO-TKbulXI7YN4EhEIs';
  384.       break;
  385.     case '«Монолит»':
  386.       x = '1MGilVy-4q72AGEVI8iDb6vefkDmw8qAh';
  387.       break;
  388.     case '«Ритм»':
  389.       x = '1gUoMJEqQqXtjDgemY3ZAO5wXs-Nj4xCS';
  390.       break;
  391.     case '«Стронг»':
  392.       x = '1BPzdqiLHvmK73ouxc2Freb_WlJ87odbK';
  393.       break;
  394.     case '«Спасатели»':
  395.       x = '13zjYYckwCQAFCGqKB-lMvV8Lvv2Oasam';
  396.       break;
  397.     case '«Кристалл»':
  398.       x = '1KKL8eo8ibSEc_CIYoaw4QWlnF94fvPsy';
  399.       break;
  400.     case '«Эндорфин»':
  401.       x = '17MyyKR2MCE9kkZvyL_-0ubrn_MuvMUQn';
  402.       break;
  403.     default:
  404.       x = '1C38It8l6rITCdu2imbssNS0MrLsU7LFl';
  405.   }
  406.   return x;
  407. }
  408. function napravlenie(a) {
  409.   var x;
  410.   switch(a) {
  411.     case 'Студенческие Отряды Проводников':
  412.       x = 'СОП';
  413.       break;
  414.     case 'Студенческие Педагогические Отряды':
  415.       x = 'СПО';
  416.       break;
  417.     case 'Студенческие Строительные Отряды':
  418.       x = 'ССО';
  419.       break;
  420.     case 'Студенческие Сервисные Отряды':
  421.       x = 'ССервО';
  422.       break;
  423.     case 'Студенческие Сельскохозяйственные Отряды':
  424.       x = 'СВО';
  425.       break;
  426.     case 'Студенческие Медицинские Отряды':
  427.       x = 'СМО';
  428.       break;
  429.   }
  430.   return x;
  431. }
  432. function spravka() {
  433.   var ss=SpreadsheetApp.getActive();
  434.   var sheet=ss.getSheets()[0];
  435.   var lastR=sheet.getLastRow();
  436.   var clientData=sheet.getRange(lastR,1,1,60).getValues();
  437.   var opa = clientData[0][3]+' '+clientData[0][4]+' '+clientData[0][5];
  438.   //new RussianName('Кунтидия', 'Убиреко', '', 'f') // можно явно указать пол ('m' или 'f')
  439.  
  440.  
  441.   var male = clientData[0][6];
  442.   var q;
  443.   if(male == 'Женский') q = 'f';
  444.   if(male == 'Мужской') q = 'm';
  445.  
  446.   var one = new RussianName(clientData[0][3],'','',q);
  447.   //rn.fullName(rn.gcaseRod); // Паниковского Михаила Самуэльевича
  448.   var tu = new RussianName('',clientData[0][4],'',q);
  449.   var fri = new RussianName('','',clientData[0][5],q);
  450.  
  451.   //var fio=clientData[0][30];
  452.   //var name=clientData[0][31];
  453.   //var otch=clientData[0][32];  
  454.   var fio=one.fullName(one.gcaseRod);
  455.   var name=tu.fullName(tu.gcaseRod);
  456.   var otch=fri.fullName(fri.gcaseRod);
  457.   var date=clientData[0][7];
  458.   var udsu=clientData[0][24];
  459.   var fak=clientData[0][25];
  460.   var ochno=clientData[0][27];
  461.   var bud=clientData[0][28];
  462.   var grup=clientData[0][26];
  463.   var index=clientData[0][17];
  464.   var dom=clientData[0][18];
  465.   var jizn=clientData[0][19];
  466.   var tel=clientData[0][9];
  467.   var mail=clientData[0][10];
  468.   var ser=clientData[0][11];
  469.   var nomer=clientData[0][12];
  470.   var kem=clientData[0][14];
  471.   var kogda=clientData[0][15];
  472.   var kod=clientData[0][16];
  473.   var napr=napravlenie(clientData[0][21]);
  474.   var lans=clientData[0][22];
  475.   var dirTemp=DriveApp.getFolderById(otryad(lans));
  476.   var template=DriveApp.getFileById('1b8zeG8dQ1_LKRSfKz8wVGS9Gktu_jkP3bNyvywINIpU').makeCopy(opa,dirTemp).getId();
  477.   var docbody=DocumentApp.openById(template).getBody();
  478.  
  479.   docbody.replaceText('fio', fio);
  480.   docbody.replaceText('name', name);
  481.   docbody.replaceText('otch', otch);
  482.   docbody.replaceText('date', date);
  483.   docbody.replaceText('udsu', udsu);
  484.   docbody.replaceText('fak', fak);
  485.   docbody.replaceText('ochno', ochno);
  486.   docbody.replaceText('bud', bud);
  487.   docbody.replaceText('grup', grup);
  488.   docbody.replaceText('ind', index);
  489.   docbody.replaceText('post', dom);
  490.  
  491.   docbody.replaceText('jizn', jizn);
  492.   docbody.replaceText('tel', tel);
  493.   docbody.replaceText('email', mail);
  494.   docbody.replaceText('ser', ser);
  495.   docbody.replaceText('nomer', nomer);
  496.   docbody.replaceText('kem', kem);
  497.   docbody.replaceText('kogda', kogda);
  498.   docbody.replaceText('kod', kod);
  499.   docbody.replaceText('napr', napr);
  500.   docbody.replaceText('lans', lans);
  501.   sheet.getRange(lastR, 40).setValue(template)
  502.  }
Advertisement
Add Comment
Please, Sign In to add comment