ΠΡΠ»ΠΈ ΠΌΡ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΡΡΡΠ»Π°Π΅ΠΌΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ 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) ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ ΠΌΡ Ρ ΡΠ°Π½ΠΈΠΌ Π½Π°ΡΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΠ»Π΅Π½Π΄Π΅ΡΠ°. (ΠΡΠΎΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΠ»Π΅Π½Π΄Π΅ΡΠ°.)