Kullanım
tops [-help] [-verbose] [-nocontext] [-nofileinfo] [-semiverbose)] [-dont] (-scriptfile
script_name) | (find "search_pattern" [where ("symbol"...) isOneOf {("match"...)...}] ...) |
(replace "search_pattern" with "replacement_pattern" | same [where ("symbol"...) isOneOf
{("match"...)...}]... [within ("symbol") {...}]... [error "message"] [warning "message"]) | (
replacemethod "selector" with "new_selector"{ [replace "symbol" with "symbol_replacement"]...
} [where ("symbol"...) isOneOf {("match" ...)...}]... [within ("symbol") {...}]... [error
"message"] [warning "message"] ) [-classfile classfile] [filename ...]
Açıklama
tops, bir dizi kurala göre kaynak dosyalar üzerinde yerinde (in-place) yer değiştirmeler gerçekleştiren bir araçtır. Her tops kuralı belirli bir çeviriyi tanımlar. Örneğin, bir tops kuralı 'Application' belirtecinin (token) geçtiği yerlerin 'NSApplication' değerine dönüştürülmesi gerektiğini belirtebilir. tops sözdiziminde bu kural şu şekilde görünecektir:
replace "Application" with "NSApplication"
Seçenekler
-help: tops sözdizimi satırını görüntüler.
-verbose Komut tarafından değiştirilen kaynak kod satırlarını yazdırır.
-nocontext Değiştirilen veya aranan kaynak kod satırının tamamını yazdırmak yerine, satırın yalnızca değişikliği içeren kısmını gösterir.
-nofileinfo Ayrıntılı (verbose) mesajlarda dosya adı ve satır numarası bilgilerini yazdırmaz.
-semiverbose Dosyanın ne kadarının işlendiğini gösterir.
-dont: Kaynak kod üzerinde değişiklikleri fiilen gerçekleştirmeden hangi değişikliklerin yapılacağını gösterir.
-scriptfile script_name tops'un kodunuza uygulayacağı kuralları içeren betik dosyasını belirtir. Betik dosyası üç tür kural içerebilir: find, replace ve replacemethod. Ayrıca C tarzı yorumlar, /* ... */ içerebilir.
find "search_pattern" Dosyadaki tüm search_pattern eşleşmelerini bulur. search_pattern, aşağıda açıklandığı gibi değişmez dizeler (literal strings) ve açılı ayraçlar içindeki belirteçleri içerebilir.
where ("symbol"...) isOneOf {("match"...)...} search_pattern açılı ayraçlar içinde belirteçler içerdiğinde, symbol ile belirtilen belirtecin neyle eşleşmesi gerektiğini daha da hassaslaştırır.
replace "search_pattern" with "replacement_pattern" | same Dosyadaki tüm search_pattern eşleşmelerini replacement_pattern ile değiştirir. same, search_pattern değerini kendisiyle değiştirir. Genellikle kodu değiştirmek yerine bir hata veya uyarı mesajı yazdırmak istediğinizde same kullanırsınız.
within ("symbol") {...} search_pattern içinde belirtilen belirteçlerden biri içinde daha fazla dönüşüm belirtir. Açılı ayraçlar içinde find, replace ve replacemethod kuralları yer alabilir.
error "message" search_pattern konumunda bir #error mesajı üretir.
warning "message" search_pattern konumunda bir #warning mesajı üretir.
replacemethod "selector" with "new_selector" Metot seçicisini (selector) kullanan tüm çağrıları, bildirimleri, uygulamaları ve @selector ifadelerini new_selector ile değiştirir.
-classfile classfile İşlenen dosyalar tarafından kullanılan sınıf hiyerarşisini tanımlayan bir dosya belirtir.
filename ... Dönüştürmek istediğiniz kaynak dosyayı/dosyaları belirtir. Boşluklarla ayrılmış birden fazla dosya adı belirtebilirsiniz. Dosyalar yerinde dönüştürülür; yedek dosya oluşturulmaz. Hiçbir dosya belirtilmezse tops komutları standart girdi üzerinde gerçekleştirilir.
En basit arama deseni "Application" gibi değişmez bir dizedir. Arama deseni içinde, değişmez bir dize yerine belirli bir sözdizimi öğesini belirten belirteçler tanımlayabilirsiniz. Belirteçler şu biçimdedir:
Burada:
type Belirtecin eşleşebileceği sözdizimi öğesinin türünü belirtir.
label Belirtece atadığınız benzersiz bir etikettir.
type aşağıdakilerden biri olabilir:
a Herhangi bir belirteç dizisiyle eşleşir.
b Dengeli herhangi bir belirteç dizisiyle, yani parantez veya süslü ayraç içindeki bir belirteç dizisiyle eşleşir.
e Herhangi bir ifadeyle eşleşir. Varsayılan değer budur.
s Herhangi bir dizeyle eşleşir.
t Herhangi bir tek belirteçle eşleşir.
w Yorumlar dahil olmak üzere boşluk karakterleriyle eşleşir.
Bir replacemethod kuralında, seçicide belirttiğiniz her belirteç için üç alt belirteç (subtokens) tanımlanır. Seçicideki her
replacemethod ayrıca aşağıdaki etiketleri tanımlar:
Örnekler
Aşağıdaki, tipik bir tops komutu çağrısıdır. MyRules.tops betik dosyası, MyProjectDir
içindeki dosyalar üzerinde gerçekleştirilen find, replace ve replacemethod kurallarını içerir.
-semiverbose seçeneği, işlenen dosyanın adının ve komutun ilerleyişinin standart çıktıya
yazdırılacağı anlamına gelir.
tops -semiverbose -scriptfile MyRules.tops MyProjectDir/*.[hm]
Aşağıdaki, bir tops betik dosyasının içereceği tipik bir kuraldır. Kural, tüm çağrılarda,
bildirimlerde, uygulamalarda ve @selector ifadelerinde removeRowAt:andFree: metodunu
removeRow:andRelease: olarak yeniden adlandırır.
replacemethod "removeRowAt:andFree:" with "removeRow:andRelease:"
Aşağıdaki kural, NXGetNamedObject() işlevine yapılan tüm çağrıları hata mesajıyla işaretler.
same, bu işlevi kendisiyle değiştirmek anlamına gelir. NXGetNamedObject() dosyada görünmeye
devam edecektir, ancak hata mesajıyla işaretlenecektir. <b args> parantez içindeki tüm
argümanların da değiştirileceğini belirtir.
replace "NXGetNamedObject(<b args>)" with same
error "ApplicationConversion: NXGetNamedObject() is obsolete. Replace with nib
file outlets."
Aşağıdaki kural, metodun geçtiği tüm yerleri yeniden adlandırır ve tüm çağrılarda ve bildirimlerde
ikinci ve üçüncü argümanların yerini değiştirir.
replacemethod "browser:fillMatrix:<2>inColumn:<3>" with
"browser:createRowsForColumn:<3>inMatrix:<2>"
Aşağıdaki kural, metodun geçtiği tüm yerleri yeniden adlandırır. Çağrılarda, flag argümanı
için belirtilen değeri tersine çevirir.
replacemethod "myMethod:<flag>" with "myNewMethod:<flag>"
{ replace "<flag_arg>" with "!<flag_arg>" }
Aşağıdaki kural, metodun geçtiği tüm yerlerde initContent:style:backing:buttonMask:defer: metodunu
initWithContentRect:styleMask:backing:defer: olarak yeniden adlandırır. Bu metodun bildirimlerinde,
style argümanının türünü unsigned int ve backing argümanının türünü NSBackingStoreType olarak değiştirir.
replacemethod "<old>" with "<new>" {
replace "<style_type>" with "(unsigned int)"
replace "<backing_type>" with "(NSBackingStoreType)"
}
where ("<old>", "<new>") isOneOf { ("initContent:style:<style> backing:<backing> buttonMask:<bmask> defer:<flag>", "initWithContentRect:styleMask:<style> backing:<backing> defer:<flag>"),
}
Aşağıdaki kural, metodun geçtiği tüm yerlerde minFrameWidth:forStyle:buttonMask: metodunu
minFrameWidthWithTitle:styleMask: olarak yeniden adlandırır. Bu metodun çağrıları içinde, style
argümanını önceki style argümanı ile önceki button mask argümanının mantıksal VEYA'sı (logical OR)
olacak şekilde değiştirir. Metot bildirimleri içinde, style argümanının türünü unsigned int olarak
değiştirir. Bu metodun uygulaması (implementation) içinde, button mask argümanının tüm kullanımlarını
style argümanı olarak değiştirir.
replacemethod "minFrameWidth:forStyle:<style> buttonMask:<bmask>" with
"minFrameWidthWithTitle:styleMask:<style>" {
replace "<style_arg>" with "<style_arg>|<bmask_arg>"
replace "<style_type>" with "(unsigned int)"
}
within ("<implementation>") { replace "<bmask_param>" "<style_param>"
}
Apple Computer, Inc. March 14, 1995 TOPS(1)