« NSIS PL

Funkcje do manipulacji ciągami znaków

Ten dokument zgodny jest z NSIS 2.46

Wprowadzenie


Plik nagłówkowy funkcji do manipulacji ciągami znaków zawiera zbiór przydatnych funkcji, które łatwo dołączyć i użyć w skryptach NSIS.



Sposób użycia


Podstawowa składnia


Parametry mają następującą postać:

  Wymagane (wymagane) (Opcja1 | Opcja2) [opcjonalne lub dodatkowe opcje] 
  [Opcja1 | Opcja2]

Znaki gwiazdek, które znajdują się koło nazw poleceń (*****) są subiektywnym określeniem przydatności danej funkcji. Im więcej gwiazdek, tym bardziej funkcja jest przydatna. Najwyższą ocenę reprezentuje 5 gwiazdek (*****).

W każdym miejscu, gdy napisane jest "Wartość domyślna:", oznacza to, że możesz użyć wymienionej wartości lub pozostawić ją pustą - rezultat będzie taki sam.

Jeśli chcesz, aby określona wartość (np. tekst) była zależna od języka, użyj ciągu znaków języka (polecenie LangString) oraz zdefiniuj wartość $(STRINGNAME).

Jeśli chcesz do ciągu znaków dodać znak '`', powinieneś zawsze używać znaku modyfikacji '$\`', ponieważ funkcje makra pliku nagłówkowego używają znaku ` do rozdzielania parametrów.


1. Dołączanie pliku nagłówkowego

    !include "StrFunc.nsh"

Plik nagłówkowy StrFunc.nsh musi znajdować się w katalogu dołączanych plików, więc nie musisz określać ścieżki dostępu.

Polecenie to musisz umieścić przed każdym innym, które znajdziesz w tym pliku.


2. Definicje


Plik nagłówkowy zawiera definicje, które automatyzują pewne czynności. Zanim ich użyjesz, przeczytaj poniższe:

  • Każdy element zdefiniowanej wartości rozdzielony jest znakiem "|", a każdy podelement (element podrzędny) rozdzielony jest znakiem " ".
  • Użyj składni ${StrTok} $var "${DefineName}" "|" "$counter" "0", aby pobrać każdy element definicji. Aby pobrać jego podelementy, użyj składni: ${StrTok} $var2 "$var" " " "$counter2" "0", po pobraniu wartości elementu.
  • Lista ${StrFunc_List} jest tworzona automatycznie przez plik nagłówkowy. Reszta dodawana jest ręcznie.

2.1 Lista definicji:


StrFunc_List

Określa nazwy wszystkich funkcji dostępnych w pliku nagłówkowym StrFunc.


*_List

Określa nazwy wszystkich parametrów dostępnych dla funkcji "*". (* = nazwa funkcji, np: StrTok_List).


*_TypeList

Określa typy wszystkich parametrów dla funkcji "*". (* = nazwa funkcji, np: StrTok_List). Możliwe typy dla każdego z parametrów to:

  • Output (wyjście) - Wymagana jest zmienna, aby przekazać wartość zwracaną przez funkcję.
  • Text (tekst) - Wymagany jest tekst lub liczba, jako wartość wejściowa.
  • Mixed (mieszane) - Wymagany jest tekst, liczba lub opcja, jako wartość wejściowa. Każdy podelement poprzedzony słowem "Mixed", jest opcją. Pierwsza opcja jest opcją domyślną. Dwie następujące po sobie spacje oznaczają, że podelement jest pusty.
  • Option (opcja) - Wymagana jest opcja, jako wartość wejściowa. Każdy podelement poprzedzony słowem "Option", jest opcją. Pierwsza opcja jest opcją domyślną. Dwie następujące po sobie spacje oznaczają, że podelement jest pusty.


3. Polecenia


Niektóre polecenia wymagają specjalnych zabiegów, żeby działały. Sprawdź poniższą sekcję "3.3 Polecenia".


3.1 Sposób użycia poleceń w sekcjach i funkcjach instalacji


Każde polecenie używane w sekcjach i funkcjach instalacji muszą być wywołane wpierw poza obszarem sekcji bądź funkcji, bez podawania jakichkolwiek parametrów.

Przykład: ${StrStr}


3.2 Sposób użycia poleceń w sekcjach i funkcjach deinstalacji


Polecenia w sekcjach i funkcjach deinstalacji muszą mieć przedrostek "Un" przed słowem znajdującym się w nawiasie klamrowym "{}".

Przykład: ${UnStrStr}

Pełny przykład poleceń instalacji oraz deinstalacji:

    !include "StrFunc.nsh"

    ${StrStr} # dla sekcji oraz funkcji instalacji

    ${UnStrStr} # dla sekcji oraz funkcji deinstalacji

    Section

      ${StrStr} $0 "OK! Co teraz?" "wh"

    SectionEnd

    Section Uninstall

      ${UnStrStr} $0 "OK! Co teraz?" "wh"

    SectionEnd

3.3 Polecenia


** ${StrCase}

    ResultVar String Type(|L|U|T|S|<>)

Konwertuje ciąg znaków "String" na ciąg "Type" z określoną wielkością znaków. Używa LogicLib.


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków konwertowany na ciąg "Type", o określonej wielkości znaków.

Type - Typ wielkości liter:

  • "" = Tak samo jak ciąg wejściowy (tak jak "String")
  • L = Małe litery (to jest przykład. bardzo prosty.)
  • U = Duże litery (TO JEST PRZYKŁAD. BARDZO PROSTY.)
  • T = Tytułowe litery (To Jest Przykład. Bardzo Prosty.)
  • S = Początek zdania (To jest przykład. Bardzo prosty.)
  • <> = Zamiana wielkości liter (To jest przykład. Bardzo prosty.)

Domyślną wartością jest "" (oryginalna wielkość liter).

Zwracana wartość -> ResultVar:

Ciąg znaków "String" jako ciąg "Type" z określoną wielkością znaków.


Przykład:

      ${StrCase} $0 '"Vocę" to "TY" po polsku.' "U"
                                [_(_)_()__()__()_(___)_]

      $0 = '"VOCĘ" TP "TY" PO POLSKU.'

* ${StrClb}

    ResultVar String Action(|>|<|<>)    ResultVar String Type(|L|U|T|S|<>)

Wykonuje akcje na schowku, w zależności od wartości parametru "Action". Używa LogicLib.


Parametry:

String - Jeśli parametr "Action" = ">" lub "<>" - Ciąg znaków String umieszczony zostanie w schowku.

Action - Parametr ten może przyjmować następujące wartości:

  • "" = Czyści schowek.
  • ">" = Kopiuje dane do schowka.
  • "<" = Pobiera dane ze schowka.
  • "<>" = Zamienia ciąg znaków z zawartością schowka.
Zwracana wartość -> ResultVar:

Jeśli parametr "Action" = "<" lub "<>" - Ciąg znaków String został znaleziony w schowku.


*** ${StrIOToNSIS}

    ResultVar String

Konwertuje ciąg znaków "String" wtyczki Install Options, aby był obsługiwany przez NSIS. Konwertowane są znaki Escape, back-slash, carriage return, line feed oraz tab.


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Konwertowany ciąg znaków String.

Type - Typ znaku, w który zostanie skonwertowana wartość wejściowa:

Zwracana wartość -> ResultVar:

Ciąg znaków "String" obsługiwany przez NSIS.


Przykład:

      ${StrIOToNSIS} $0 "\r\n\t\\To jest przykład\\"
                                       [()()()()_____________()]

      $0 = "$\r$\n$\t\To jest przykład\"

* ${StrLoc}

    ResultVar String StrToSearchFor CounterDirection(>|<)

Wyszukuje ciągu znaków "StrToSearchFor" w ciągu znaków "String" i zwraca jego położenie, w zależności od kierunku przeszukiwania "CounterDirection".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwany jest ciąg znaków "StrToSearchFor".

StrToSearchFor - Ciąg znaków, który wyszukiwany jest w ciągu znaków "String".

CounterDirection(>|<) - Kierunek wyszukiwania. Domyślnie ma wartość ">". (> = z lewej do prawej, < = z prawej do lewej)

Zwracana wartość -> ResultVar:

Wyszukuje lokalizację ciągu znaków "StrToSearchFor", w zależności od kierunku "OffsetDirection".


Przykład:

      ${StrLoc} $0 "To jest przykład" "jest" "<"
                                 (__)<<<<<<<<<<<

      $0 = "9"

*** ${StrNSISToIO}

    ResultVar String

Konwertuje ciąg znaków "String" z formatu NSIS, aby był zgodny z wtyczką Install Options. Konwertowane są znaki: Escape, back-slash, carriage return, line feed oraz tab.


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Konwertowany ciąg znaków, aby był zgodny z wtyczką Install Options.

Zwracana wartość -> ResultVar:

Ciąg znaków "String" zgodny z wtyczką Install Options.


Przykład:

      ${StrNSISToIO} $0 "$\r$\n$\t\To jest przykład\"
                                      [(_)(_)(_)^____________^]

      $0 = "\r\n\t\\To jest przykład\\"

***** ${StrRep}

    ResultVar String StrToReplace ReplacementString

Wyszukuje wszystkie wystąpienia ciągu znaków "StrToReplace" w ciągu znaków "String", zastępując go ciągiem znaków "ReplacementString".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwany jest ciąg znaków "StrToReplace".

StrToReplaceFor - Wyszukiwany ciąg znaków w ciągu znaków "String".

StringToBeReplacedWith - Ciąg znaków, który zastępuje wyszukany ciąg znaków "StringToReplace" w ciągu znaków "String".

Zwracana wartość -> ResultVar:

Ciąg znaków "String" z wszystkimi wystąpieniami ciągu znaków "StringToReplace", zamienianymi na ciąg znaków "ReplacementString".


Przykład:

      ${StrRep} $0 "To jest tylko przykład" "tylko" "pierwszy"
                             [______(    )_______]

      $0 = "To jest pierwszy przykład"

*** ${StrSort}

    ResultVar String LeftStr CenterStr RightStr IncludeLeftStr(1|0)
    IncludeCenterStr(1|0) IncludeRightStr(1|0)

Wyszukuje ciąg znaków "CenterStr" w ciągu znaków "String" zwracając tylko wartości znajdujące się pomiędzy ciągami znaków "LeftStr" oraz "RightStr", łącznie z ciągiem "CenterStr" (lub nie) używając "IncludeCenterStr" oraz/lub z ciągiem "LeftStr" używając "IncludeLeftStr" oraz "RightStr" używając "IncludeRightStr".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwany jest ciąg znaków "CenterStr".

LeftStr - Pierwsze wystąpienie ciągu znaków "LeftStr" na lewo od ciągu znaków "CenterStr". Jeśli jego wartość jest pusta lub nie został znaleziony, zwrócony zostanie ciąg znaków po lewej stronie ciągu znaków "CenterStr".

CenterStr - Ciąg znaków wyszukiwany w ciągu znaków "String".

RightStr - Pierwsze wystąpienie ciągu znaków "RightStr" na prawo od ciągu znaków "CenterStr". Jeśli jego wartość jest pusta lub nie został znaleziony, zwrócony zostanie ciąg znaków po prawej stronie ciągu znaków "CenterStr".

IncludeLeftStr(1|0) - Dołącz lub nie ciąg znaków "LeftStr" w zwracanym ciągu znaków. Domyślną wartością jest 1 (True). (1 = True, 0 = False)

IncludeCenterStr(1|0) - Dołącz lub nie ciąg znaków "CenterStr" w zwracanym ciągu znaków. Domyślną wartością jest 1 (True). (1 = True, 0 = False)

IncludeRightStr(1|0) - Dołącz lub nie ciąg znaków "RightStr" w zwracanym ciągu znaków. Domyślną wartością jest 1 (True). (1 = True, 0 = False)

Zwracana wartość -> ResultVar:

Ciąg znaków znajdujący się pomiędzy ciągiem znaków "LeftStr" oraz "RightStr" wyszukanego ciągu "CenterStr", wraz z dołączonym (lub nie) ciągiem znaków "LeftStr" oraz "RightStr", jeśli wartość "IncludeLeftRightStr" równa jest 1 oraz/lub z ciągiem znaków "CenterStr", jeśli wartość "IncludeCenterStr" równa jest 1.


Przykład:

      ${StrSort} $0 "To jest fajny przykład" " jest" "" "ład" "0" "0" "0"
                             [__(__)_________]( )
                                    C                    R
      $0 = "To jest fajny przyk"

***** ${StrStr}

    ResultVar String StrToSearchFor

Wyszukuje ciągu znaków "StrToSearchFor" w ciągu znaków "String".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwany jest ciąg znaków "StrToSearchFor".

StrToSearchFor - Wyszukiwany ciąg znaków w ciągu znaków "String".

Zwracana wartość -> ResultVar:

Ciąg znaków "StrToSearchFor" plus ciąg znaków znajdujący się po ciągu znaków "StrToSearchFor" w ciągu znaków "String".


Przykład:

      ${StrStr} $0 "To jest tylko przykład" "tylko"
                   >>>>>>>>>{__)_______]

      $0 = "tylko przykład"

***** ${StrStrAdv}

    ResultVar String StrToSearchFor SearchDirection(>|<)
    ResultStrDirection(>|<) DisplayStrToSearch(1|0) Loops CaseSensitive(0|1)

Wyszukuje ciąg znaków "StrToSearchFor" w ciągu znaków "String" w kierunku określonym przez "SearchDirection" oraz liczbą powtórzeń "Loops".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwany jest ciąg znaków "StrToSearchFor".

StrToSearchFor - Wyszukiwany ciąg znaków w ciągu znaków "String".

SearchDirection (>|<) - Kierunek wyszukiwania. Domyślnie: ">" (w prawo). (< = w lewo, > = w prawo)

ResultStrDirection (>|<) - Miejsce wynikowego ciągu znaków w zależności od pozycji "StrToSearchFor". Domyślnie: ">" (w prawo). (< = w lewo, > = prawo)

DisplayStrToSearch (1|0) - Wyświetl ciąg znaków "StrToSearchFor" w wyniku. Domyślnie: "1" (True). (1 = True, 0 = False)

Loops - Liczba powtórzeń wyszukiwania ciągu znaków "StrToSearchFor" w ciągu znaków "String", bez oryginalnego wykonania. Domyślnie: "0" (1 powtórzenie).

CaseSensitive(0|1) - Jeśli wartość równa jest "1", w wyszukiwaniu brane pod uwagę będą wielkości liter (różnice). Jeśli wartość równa jest "0" wielkość liter nie ma znaczenia. Domyślnie: "0".

Zwracana wartość -> ResultVar:

Ciąg znaków "StrToSearchFor", jeśli wartość "DisplayStrToSearch" równa jest 1, plus wynikowy ciąg znaków po lub przed ciągiem znaków "StrToSearchFor", w zależności od "ResultStrDirection".


Wyniki z błędami:

Jeśli ciąg znaków "StrToSearchFor" nie został znaleziony, zwrócony zostanie pusty ciąg znaków.

Jeśli ciąg znaków "StrToSearchFor" jest pusty, zwrócony zostanie ciąg znaków "String" i ustawiona zostanie flaga błędu.

Jeśli ciąg znaków "String" jest pusty, zwrócony zostanie ciąg znaków i ustawiona zostanie flaga błędu.


Przykład:

      ${StrStrAdv} $0 "To JEST naprawdę tylko przykład" "JEST " ">" ">" "0" "0" "1"
                            >>>>>(   )[___________________]                       

      $0 = "naprawdę tylko przykład"

**** ${StrTok}

    ResultVar String Separators ResultPart[L] SkipEmptyParts(1|0)

Zwraca część "ResultPart" znajdującą się pomiędzy dwoma separatorami "Separators" wewnątrz ciągu znaków "String".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwane są separatory "Separators".

Separators - Znaki wyszukiwane w ciągu znaków "String".

ResultPart[L] - Część, która ma być wyszukana "StrToTokenize", pomiędzy dwoma separatorami "Separators". Może być to dowolna liczba, poczynając od 0, oraz kończąc na "L". Domyślnie jest to L (ostatnia część).

SkipEmptyParts(1|0) - Pomija puste części ciągu znaków pomiędzy dwoma separatorami "Separators". Domyślnie ma wartość 1 (True). (1 = True, 0 = False)

Zwracana wartość -> ResultVar:

Ciąg znaków "String" z liczbą "Part" pomiędzy separatorami "Separators".


Przykład:

      1) ${StrTok} $0 "This is, or is not, just an example" " ," "4" "1"
                                  (  )  ()  () () [_]   (  )  ()   (      )
                                  0     1   2  3  4     5     6    7 
         $0 = "not"

      2) ${StrTok} $0 "This is, or is not, just an example" " ," "4" "0"
                                  (  ) () ^() [] ( ) ^(  )   ()  (      )
                                  0    1  23  4  5   67      8    9
         $0 = "is"

* ${StrTrimNewLines}

    ResultVar String

Usuwa niepotrzebne nowe linie na końcu ciągu znaków "String".


Parametry:

ResultVar - Miejsce docelowe zwracanej wartości.

String - Ciąg znaków, w którym wyszukiwane są zbędne nowe linie na końcu "String".

Zwracana wartość -> ResultVar:

Ciąg znaków "String" bez usuniętych nowych linii na końcu.


Przykład:

      ${StrTrimNewLines} $0 "$\r$\nTo jest przykład$\r$\n$\r$\n"
                                            [__________________(_)(_)(_)(_)]

      $0 = "$\r$\nTo jest przykład"



Funkcje, które zostały dołączone oraz funkcje pominięte

11 funkcji zostało dołączonych - Nie są dostępne w archiwum. Są w formacie LogicLib.

15 funkcji zostało pominiętych

12 z nich zostało pominiętych, ponieważ były lepsze od nich

6 z nich zostało pominiętych z uwagi na obecność polecenia AdvStrTok (tutaj nazywana: StrTok)

  • Funkcje operujące na początkowej części ciągu znaków
  • Funkcje zapisu zmiennych
  • Funkcje sortujące ciągi znaków (1, 2 i 3)
  • Funkcja StrTok

2 z nich zostało pominiętych z uwagi na obecność polecenia StrCase

  • Funckja StrLower
  • Funkcja StrUpper

2 z nich zostało pominiętych z uwagi na obecność polecenia StrClb

  • Funckja StrClbSet
  • Funckja StrClbGet

1 z nich została pominięta z uwagi na obecność poleceń NSISToIO oraz IOToNSIS

  • Funkcja konwersji znaku / na // w ścieżkach

1 z nich została pominięta z uwagi na oryginalną implementację funkcji String Replace (tutaj nazywana: StrRep)

  • Funkcja String Replace (zamiana znaków ciągu znaków)

2 z nich zostało pominiętych z uwagi na ich nieprzydatność

  • Funkcja konwersji znaku Slash <-> Backslash
  • Funkcja Trim (ucinanie)

1 z nich została pominięta z uwagi na błędy

  • Funkcja konwertująca liczbę w ciąg znaków


Historia wersji


Aktualna wersja: 1.09 - 10/22/2004

  • Fixed stack problems involving: StrCase, StrRep, StrSort, StrTok.
  • Fixed StrClb: When "Action" = "<>", handle was wrongly outputed as text.
  • Fixed StrSort, StrStrAdv documentation examples.
  • Fixed StrIOToNSIS, StrLoc, StrNSISToIO, StrRep, StrStr: sometimes didn't find "StrToSearch" at all.

Historia wersji Starsze wydania


1.08 - 10/12/2004

  • Converted all the functions to LogicLib.
  • StrSort: Totally remade and it can break old scripts. See documentation for details.
  • StrTok: "ResultPart" has to start from 0 and it can break old scripts. See documentation for details.
  • Added defines: StrFunc_List, *_List and *_TypeList.
  • Fixed StrStrAdv: Variables $R0-$R3 couldn't be used on scripts before calling.
  • StrRep: Cut down some variables.
  • Arranged correctly the order of StrSort on the documentation.

1.07 - 09/21/2004

  • Removed ${UnStrFunc} command. Now you can just include uninstall functions commands like ${UnStrStr} to be supported by uninstall functions and sections.
  • Added case-sensitive comparation option for StrStrAdv.
  • StrCase now uses System.dll which makes case conversions effective with all latin letters (i.e. ę).
  • Added switch case and original case for StrCase.
  • StrClbSet and StrClbGet removed, added StrClb.
  • Made compact the most usual operations inside the header file. File size reduced.

1.06 - 03/26/2004

  • StrNumToStr removed due to complex number handling on some languages.
  • Fixed the bug where the old string was attached to string returned by StrCase when $R5 variable was used.

1.05 - 03/17/2004

  • Fixed a bug with StrCase, Title Case wasn't working as should be.
  • Fixed a bug with StrStrAdv, previous fix created another bug, string not returned correctly when using backwards search with "DisplayStrToSearch" as "0".

1.04 - 03/07/2004

  • Added new StrCase, removed StrLower and StrUpper.
  • Organized by name commands inside header and readme files.

1.03 - 02/12/2004

  • Added commands support for uninstall sections and functions.
  • Fixed variables switch in "StrLoc" and "StrTok" after using these.

1.02 - 02/07/2004

  • Fixed StrLoc.
  • Fixed Documentation about StrLoc. "Direction" is really "OffsetDirection".
  • Added my new AdvStrSort, and removed the old one.

1.01 - 02/05/2004

  • Fixed Documentation about StrSort and StrTok.
  • Fixed StrTok default value for the string part. Now it's "L".
  • Fixed StrStrAdv fixed wrong search when had a combination of same substrings one after another in a string.
  • Fixed StrLoc: when a string isn't found, don't return any value at all.

1.00 - 02/01/2004

  • Added documentation.
  • Renamed header file to "StrFunc.nsh".
  • Added 1 function, StrLoc.
  • Modified StrStrAdv, removed some lines.
  • Fixed StrTok, 2 simple numbers made it loop everytime.
  • Fixed some small issues on the header file.

0.02 - 01/24/2004

  • Completed StrFunc.nsh file. Need some tests and the readme.

0.01 - 01/22/2004

  • First version to test ideas...


Autorzy

Autor: Diego Pedroso (aka deguix).

Wszystkie funkcje w formacie LogicLib: Diego Pedroso. Oparte są one na funkcjach napisanych przez: Amir Szekely, Dave Laundon, Hendri Adriaens, Nik Medved, Joost Verburg, Stuart Welch, Ximon Eighteen, "bigmac666" oraz "bluenet". Dołączone zostały funkcje w formacie LogicLib - StrIOToNSIS, StrNSISToIO autorstwa "bluenet".



Licencja

					
This header file is provided 'as-is', without any express or implied warranty. In no event will the
author be held liable for any damages arising from the use of this header file.

Permission is granted to anyone to use this header file for any purpose, including commercial
applications, and to alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this header file must not be misrepresented; you must not claim that you wrote
   the original header file. If you use this header file in a product, an acknowledgment in the
   product documentation would be appreciated but is not required.
2. Altered versions must be plainly marked as such, and must not be misrepresented as being the 
    original header file.
3. This notice may not be removed or altered from any distribution.