|char 1 of aString||aString.Char|
|char 1 to 4 of aString||aString.char[0:4]|
|the number of chars in aString||aString.Num.Chars|
|word 1 of aString||aString.Word|
|word 1 to 4 of aString||aString.Word[0:4]|
|the number of words in aString||aString.Num.Words|
|line 1 of aString||aString.Line|
|line 1 to 4 of aString||aString.Line[0:4]|
|the number of lines in aString||aString.Num.Lines|
|item 1 of aString||aString.Item|
|item 1 to 4 of aString||aString.Item[0:4]|
|the number of items in aString||aString.Num.Items|
|set the itemdelimiter to "/"||aString.ItemDelimiter = "/"|
|aString.IgnoreAbbrevs = ["mr", "mrs", "ms", "dr", "esq"]|
|word 2 of line 7 of aString||aString.Line.Word|
|line 3 of char 60 to 245 of aString||aString.Char[59:245].Line|
|the number of items in word 5 to 10 of aString||aString.Word[4:10].Num.Items|
The HT Strings project aims to provide a simple Python library that implements string handling similar to what HyperTalk provided. HyperTalk handled string manipulation using a fairly "natural" language approach based on measuring strings in chunks (by characters, lines, words and items). So, for example, one could ask for word 1 to 4 of a string and get back a substring containing all the characters from the first character of the first word to the last character of the 4th word in the string.
The HT Strings library provides a "pythonic" version of this capability. Where HyperTalk used an English-like syntax, HT Strings uses Python's slice and index idioms instead. Using the example from above we'd get
aString.Word[0:4] to get word 0 to 3. One really important thing to understand about how this library works is to understand that the result is NOT a list or tuple of strings, but a substring with all the characters (even whitespace) intact from the original string. Another example should make this clear:
htstring("Sample string with unusual spacing.")[0:4] will return
htstring("Sample string with unusual"). One powerful way that chunks could be used in HyperTalk was that they could be chained together at will. HT Strings retains this capability as well (see the examples in the table).
There is also an additional chunk for sentences (as opposed to lines) that wasn't provided for in HyperTalk. Please note, however, that, because "." is used ambiguously in English (for abbreviations), that this may not always return what you'd expect. There is an IgnoreAbbrevs property that allows you to set a list of abbreviations after which a "." should be ignored but this really only takes you so far.