Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НаписаниС скриптов для Blender 2.49Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 56

Автор Michel Anders

Если ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ссылаСмся Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ removedirs(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Если ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π΅ пуст, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ошибка с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ OSError (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ, Π±Ρ‹Π» Π½Π΅ послСдним Ρ„Π°ΠΉΠ»ΠΎΠΌ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ. Ѐункция removedirs() Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ всС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ пустыС, ΠΈ это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:

   for f in removefiles:

      remove(f)

      d = os.path.dirname(f)

      if os.path.relpath(d,currentdir) != '.':

         try:

            removedirs(d)

         except OSError:

            pass


if __name__ == '__main__':

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн ΠΊΠ°ΠΊ zip.py Π² Ρ„Π°ΠΉΠ»Π΅ attic.blend.


Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° - поиск с рСгулярными выраТСниями

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΡƒΠΆΠ΅ обСспСчиваСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ поиска ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹, Π½ΠΎ Ссли Π’Ρ‹ пользовались Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска с использованиСм рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΏΠ»ΡƒΠ³ΠΈΠ½ обСспСчиваСт Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

РСгулярныС выраТСния ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ ΠΈ мноТСство программистов Π»ΡŽΠ±ΡΡ‚ ΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… нСнавидят ΠΈΡ… ΡƒΠΆΠ°ΡΠ½ΡƒΡŽ Π½Π΅ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ). Π›ΡŽΠ±ΠΈΡ‚Π΅ Π’Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Π½Π°Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΡ…, ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅: сопоставлСниС любого дСсятичного числа ΠΌΠΎΠΆΠ½ΠΎ просто Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, \d+ (ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ†ΠΈΡ„Ρ€). Если Π’Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² Британском ΠΈΠ»ΠΈ АмСриканском Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… английского, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, colour/color, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ сопоставлСниС с Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния colou?r (color с Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ u).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ встроСнный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ оснащён этим ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ срСдством поиска просто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΊΠΎΠ΄Π°. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ скрипт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ скриптов Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· мСню тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠ°ΠΊ Text | Text Plugins | Regular Expression Search, ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ горячих клавиш Alt + Ctrl + R. ΠŸΡ€ΠΈ этом появится нСбольшоС Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Ρ‚Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½ΠΎ послСднСС Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅), ΠΈ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ½Π΅Ρ‚ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ OK ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΡ‘Ρ‚ Enter, курсор Π±ΡƒΠ΄Π΅Ρ‚ установлСн Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ· мСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, с Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ сопоставлСнного выраТСния.



Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скрипт Π² качСствС тСкстового ΠΏΠ»ΡƒΠ³ΠΈΠ½Π° с Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ горячСй клавишСй, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строки скрипта состоят ΠΈΠ· ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ Shortcut: (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅):

#!BPY

"""

Name: 'Regular Expression Search'

Blender: 249

Group: 'TextPlugin'

Shortcut: 'Ctrl+Alt+R'

Tooltip: 'Find text matching a regular expression'

"""

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. ΠŸΠΈΡ‚ΠΎΠ½ прСдоставляСт Π½Π°ΠΌ стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ re, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ (ΠΎΠ½Π»Π°ΠΉΠ½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ достаточно Π΄Π°ΠΆΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ-Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… с рСгулярными выраТСниями. По-русски   ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ   ΠΌΠΎΠΆΠ½ΠΎ,   Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,   здСсь: http://www.intuit.ru/department/pl/python/6/4.html β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.), ΠΈ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° bpy. Π’ этой ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ‹ Π½Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½, ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ Π² этом случаС ΠΌΡ‹ нуТдаСмся Π² Π½Ρ‘ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ тСкстовый Π±ΡƒΡ„Π΅Ρ€ являСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ:

from Blender import Draw,Text,Registry

import bpy

import re

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ нашлось Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сопоставлСния, ΠΌΡ‹ опрСдСляСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ popup():

def popup(msg):

   Draw.PupMenu(msg+'%t|Ok')

   return

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ послСднСС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π²Ρ‘Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ рССстр Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ опрСдСляСм ΠΊΠ»ΡŽΡ‡ для использования:

keyname = 'regex'

Ѐункция run() связываСт всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вмСстС; ΠΎΠ½Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ тСкстовый Π±ΡƒΡ„Π΅Ρ€ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Ссли Π΅Π³ΠΎ Π½Π΅ нашлось:

def run():


   txt = bpy.data.texts.active

   if not txt: return

Π”Π°Π»Π΅Π΅, ΠΎΠ½Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора Π²Π½ΡƒΡ‚Ρ€ΠΈ этого Π±ΡƒΡ„Π΅Ρ€Π°:

   row,col = txt.getCursorPos()

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ для Π²Π²ΠΎΠ΄Π° рСгулярного выраТСния, ΠΌΡ‹ провСряСм, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠΆΠ΅ сохранСнноС Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² рССстрС. ΠœΡ‹ просто ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΅Π³ΠΎ, ΠΈ Ссли это Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, ΠΌΡ‹ ставим Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡƒΡΡ‚ΡƒΡŽ строку (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetKey(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° диск Π² этом случаС. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, ΠΌΡ‹ просто Π΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π±Π΅Π· поиска:

   d=Registry.GetKey(keyname)

   try:

      default = d['regex']

   except:

      default = ''

   pattern = Draw.PupStrInput('Regex: ',default,40)

   if pattern == None or len(pattern) == 0 : return

ΠœΡ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΈ Ссли это Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ сообщСниС ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ:

   try:

      po = re.compile(pattern)

   except:

      popup('Illegal expression')

      return

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΌΡ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ всСм строкам тСкстового Π±ΡƒΡ„Π΅Ρ€Π°, начиная со строки, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится курсор (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ). Π‘ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой ΠΌΡ‹ сопоставляСм нашС скомпилированноС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ с Ρ‡Π°ΡΡ‚ΡŒΡŽ строки послС курсора, Ссли это пСрвая строка).

   first = True

   for string in txt.asLines(row):

      if first :

         string = string[col:]

      mo = re.search(po,string)

Если Π΅ΡΡ‚ΡŒ сопоставлСниС, ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… строки ΠΈ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ (Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ, Ссли это строка пСрвая) ΠΈ устанавливаСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ сопоставлСния (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ). ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСм "ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ выдСлСния" Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ сопоставлСния плюс Π΄Π»ΠΈΠ½Π° сопоставлСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ нашС сопоставлСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚. Если Π½Π΅Ρ‚ сопоставлСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… строки, ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ индСкс строки row ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ†ΠΈΠΊΠ».

Если Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ остаСтся для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, ΠΌΡ‹ сигнализируСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ нашли Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сопоставлСния. Π’ любом случаС, ΠΌΡ‹ сохраняСм рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² рССстрС для использования Π·Π°Π½ΠΎΠ²ΠΎ:

      if mo != None :

         i = mo.start()

         l = mo.end()-i

         if first :

            i += col

         txt.setCursorPos(row,i)

         txt.setSelectPos(row,i+l)

         break

      row += 1

      first = False


   else :

      popup('No match')

   Registry.SetKey(keyname,{'regex':pattern})

if __name__ == '__main__':

   run()

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн ΠΊΠ°ΠΊ regex.py Π² Ρ„Π°ΠΉΠ»Π΅ regex.blend, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ скриптов Π‘Π»Π΅Π½Π΄Π΅Ρ€ с подходящим ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, textplugin_regex.py.


Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° - взаимодСйствиС с Subversion

ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ скриптов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТно ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° измСнСниями ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ вСрсиям. Π­Ρ‚ΠΎ Π½Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ для написания скриптов ΠŸΠΈΡ‚ΠΎΠ½Π° Π² Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅, поэтому систСмы управлСния вСрсиями Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚. Одна ΠΈΠ· Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных, ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… - это Subversion (http://subversion.tigris.org). Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

ВзаимодСйствиС с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Subversion Π½Π΅ прСдусмотрСно встроСнными модулями ΠŸΠΈΡ‚ΠΎΠ½Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ   Π΅Ρ‰Π΅.   БСкция Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ   сайта http://pysvn.tigris.org содСрТит ΠΈ исходныС ΠΊΠΎΠ΄Ρ‹ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ дистрибутивы для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ поддСрТиваСмая вСрсия Subversion ΠΈ вСрсия ΠŸΠΈΡ‚ΠΎΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Π‘ΠΊΡ€ΠΈΠΏΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ здСсь, протСстирован Π½Π° Subversion 1.6.x ΠΈ ΠŸΠΈΡ‚ΠΎΠ½Π΅ 2.6.x, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ вСрсиями Subversion.

ΠœΡ‹ осущСствим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отправлСния (commit) тСкстового Ρ„Π°ΠΉΠ»Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ обновлСния (update) Ρ„Π°ΠΉΠ»Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ самой послСднСй исправлСнной вСрсии ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). Если ΠΌΡ‹ пытаСмся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ° Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΌΡ‹ добавляСм Π΅Π³ΠΎ, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ инструмСнты для создания Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TortoiseSVN Π² Windows (http://tortoisesvn.tigris.org/) ΠΈΠ»ΠΈ мноТСство инструмСнтов для ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ это Π΄Π΅Π»Π°ΡŽΡ‚. ΠœΡ‹ просто ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹ΠΉ (checked-out) Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ наши тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°. (Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ вашСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°.)