PEBL 2.2
Psychology Experiment Building Language - Cross-platform psychological experiment development system
PEBLString Namespace Reference

Functions

Variant Uppercase (Variant v)
 
Variant Lowercase (Variant v)
 
Variant ToASCII (Variant v)
 
Variant StringLength (Variant v)
 
Variant SubString (Variant v)
 
Variant FindInString (Variant v)
 
Variant SplitString (Variant v)
 
Variant CopyToClipboard (Variant v)
 
Variant RegexMatch (Variant v)
 
Variant DetectTextScript (Variant v)
 
Variant IsRTL (Variant v)
 
Variant GetFontForText (Variant v)
 
Variant GetSystemLocale (Variant v)
 
Variant IsSystemLocaleRTL (Variant v)
 

Variables

PEBL_Function_Type FunctionTable []
 

Function Documentation

◆ CopyToClipboard()

Variant PEBLString::CopyToClipboard ( Variant  v)

Definition at line 223 of file PEBLString.cpp.

224{
225 //v[1] should have the parameter: a list of keys to wait for.
226 PList * plist = v.GetComplexData()->GetList();
227
228 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function CopyToClipboard(<string>)]: ");
229 std::string str1 = plist->First();// plist->PopFront();
230
231
233 return Variant(1);
234}
@ PEAT_STRING
Definition PError.h:46
PList * GetList() const
Definition PList.h:45
Variant First()
Definition PList.cpp:169
PComplexData * GetComplexData() const
Definition Variant.cpp:1299
void CopyToClipboard(const std::string &text)
void AssertType(Variant v, int type, const std::string &outsidemessage)

References PError::AssertType(), PEBLUtility::CopyToClipboard(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_STRING.

◆ DetectTextScript()

Variant PEBLString::DetectTextScript ( Variant  v)

Definition at line 240 of file PEBLString.cpp.

241{
242 PList * plist = v.GetComplexData()->GetList();
243
244 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function DetectTextScript(<string>)]: ");
245 std::string text = plist->First();
246
247 std::string script = PEBLUtility::DetectScript(text);
248 return Variant(script);
249}
std::string DetectScript(const std::string &text)

References PError::AssertType(), PEBLUtility::DetectScript(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_STRING.

◆ FindInString()

Variant PEBLString::FindInString ( Variant  v)

Definition at line 171 of file PEBLString.cpp.

172{
173 //v[1] should have the parameter: a list of keys to wait for.
174 PList * plist = v.GetComplexData()->GetList();
175
176 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in first parameter of function FindInString(<string>,<substring>,<pos>)]: ");
177 std::string str1 = plist->First();// plist->PopFront();
178
179
180 PError::AssertType(plist->Nth(2), PEAT_STRING, "Argument error in second parameter of function FindInString(<string>,<substring>,<pos>)]: ");
181 std::string str2 = plist->Nth(2); //plist->PopFront();
182
183 PError::AssertType(plist->Nth(3), PEAT_INTEGER, "Argument error in Third parameter of function FindInString(<string>,<substring>,<pos>)]: ");
184 int pos = plist->Nth(3); //plist->PopFront();
185
186
187 string::size_type newpos = str1.find(str2,pos-1);
188 if (newpos == string::npos)
189 return Variant(0);
190 else
191 return Variant((int)newpos+1);
192}
@ PEAT_INTEGER
Definition PError.h:44
Variant Nth(unsigned int n)
Definition PList.cpp:181

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PList::Nth(), PEAT_INTEGER, and PEAT_STRING.

◆ GetFontForText()

Variant PEBLString::GetFontForText ( Variant  v)

Definition at line 279 of file PEBLString.cpp.

280{
281 PList * plist = v.GetComplexData()->GetList();
282
283 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in first parameter of function GetFontForText(<text>, [fontType])]: ");
284 std::string text = plist->First();
285
286 // Optional font type parameter (default to 0 = sans-serif)
287 int fontType = 0;
288 if (plist->Length() >= 2) {
289 PError::AssertType(plist->Nth(2), PEAT_INTEGER, "Argument error in second parameter of function GetFontForText(<text>, [fontType])]: ");
290 fontType = plist->Nth(2);
291 if (fontType < 0 || fontType > 2) {
292 PError::SignalWarning("Font type must be 0 (sans), 1 (mono), or 2 (serif). Using 0.");
293 fontType = 0;
294 }
295 }
296
297 // Detect script from text
298 std::string script = PEBLUtility::DetectScript(text);
299
300 // If empty (Latin), use empty string; otherwise use the 4-letter code
301 std::string code = (script.empty()) ? "" : script;
302
303 // Get appropriate font
304 // If code is empty, GetFontForLanguageOrScript will return DejaVu (default Western)
305 std::string font = PEBLUtility::GetFontForLanguageOrScript(code.empty() ? "EN" : code, fontType);
306
307 return Variant(font);
308}
unsigned long Length() const
Definition PList.h:89
std::string GetFontForLanguageOrScript(const std::string &code, int fontType)
void SignalWarning(const std::string &message)
Definition PError.cpp:119

References PError::AssertType(), PEBLUtility::DetectScript(), PList::First(), Variant::GetComplexData(), PEBLUtility::GetFontForLanguageOrScript(), PComplexData::GetList(), PList::Length(), PList::Nth(), PEAT_INTEGER, PEAT_STRING, and PError::SignalWarning().

◆ GetSystemLocale()

Variant PEBLString::GetSystemLocale ( Variant  v)

Definition at line 314 of file PEBLString.cpp.

315{
316 // No parameters needed - just query the OS via environment
317 std::string locale = myEnv->GetSystemLocale();
318 return Variant(locale);
319}
PlatformEnvironment * myEnv
Definition PEBL.cpp:189
virtual std::string GetSystemLocale()

References PlatformEnvironment::GetSystemLocale(), and myEnv.

◆ IsRTL()

Variant PEBLString::IsRTL ( Variant  v)

Definition at line 254 of file PEBLString.cpp.

255{
256 PList * plist = v.GetComplexData()->GetList();
257
258 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function IsRTL(<string>)]: ");
259 std::string input = plist->First();
260
261 // If input is a 4-letter script code, use it directly
262 // Otherwise, detect the script from the text
263 std::string script;
264 if (input.length() == 4 && std::isupper(input[0])) {
265 script = input;
266 } else {
267 script = PEBLUtility::DetectScript(input);
268 }
269
270 bool isRTL = PEBLUtility::IsRTLScript(script);
271 return Variant((int)isRTL);
272}
bool IsRTLScript(const std::string &script)

References PError::AssertType(), PEBLUtility::DetectScript(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PEBLUtility::IsRTLScript(), and PEAT_STRING.

◆ IsSystemLocaleRTL()

Variant PEBLString::IsSystemLocaleRTL ( Variant  v)

Definition at line 325 of file PEBLString.cpp.

326{
327 // No parameters needed - just query the OS via environment
328 bool isRTL = myEnv->IsSystemLocaleRTL();
329 return Variant((int)isRTL);
330}

References PlatformEnvironment::IsSystemLocaleRTL(), and myEnv.

◆ Lowercase()

Variant PEBLString::Lowercase ( Variant  v)

Definition at line 81 of file PEBLString.cpp.

82{
83
84 //v[1] should have the parameter: a list of keys to wait for.
85 PList * plist = v.GetComplexData()->GetList();
86 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function Uppercase(<string>)]: ");
87
88 std::string s=plist->First();
89 transform(s.begin(), s.end(), s.begin(), tolower);
90
91 return Variant(s);
92}

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_STRING.

◆ RegexMatch()

Variant PEBLString::RegexMatch ( Variant  v)

Definition at line 335 of file PEBLString.cpp.

336{
337 PList * plist = v.GetComplexData()->GetList();
338
340 "Argument error in first parameter of function RegexMatch(<string>, <pattern>)]: ");
341 std::string text = plist->First();
342
344 "Argument error in second parameter of function RegexMatch(<string>, <pattern>)]: ");
345 std::string pattern = plist->Nth(2);
346
347 int matchlen = 0;
348 int idx = re_match(pattern.c_str(), text.c_str(), &matchlen);
349
350 if (idx < 0)
351 return Variant(0); // No match
352 else
353 return Variant(idx + 1); // 1-based index (PEBL convention)
354}
int re_match(const char *pattern, const char *text, int *matchlength)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PList::Nth(), PEAT_STRING, and re_match().

◆ SplitString()

Variant PEBLString::SplitString ( Variant  v)

Definition at line 198 of file PEBLString.cpp.

199{
200 //v[1] should have the parameter: a list of keys to wait for.
201 PList * plist = v.GetComplexData()->GetList();
202
203 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in first parameter of function SplitString(<string>,<substring>)]: ");
204 std::string str1 = plist->First();// plist->PopFront();
205
206
207 PError::AssertType(plist->Nth(2), PEAT_STRING, "Argument error in second parameter of function SplitString(<string>,<substring>)]: ");
208 std::string str2 = plist->Nth(2); //plist->PopFront();
209
210
211 std::string tmpstring = str1;
212 std::string sep = str2;
213 Variant ret = PEBLUtility::Tokenize(tmpstring.c_str(),*(sep.c_str()));
214
215 return ret;
216}
Variant Tokenize(const char *line, char separator)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PList::Nth(), PEAT_STRING, and PEBLUtility::Tokenize().

◆ StringLength()

Variant PEBLString::StringLength ( Variant  v)

Definition at line 109 of file PEBLString.cpp.

110{
111
112 //v[1] should have the parameter: a list of keys to wait for.
113 PList * plist = v.GetComplexData()->GetList();
114 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function StringLength(<string>)]: ");
115 std::string s=plist->First();
116
117 return Variant((int)(s.length()));
118}

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_STRING.

◆ SubString()

Variant PEBLString::SubString ( Variant  v)

Definition at line 135 of file PEBLString.cpp.

136{
137
138 //v[1] should have the parameter: a list of keys to wait for.
139 PList * plist = v.GetComplexData()->GetList();
140
141 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in first parameter of function SubString(<string>, <index>, <length>)]: ");
142 std::string string1 = plist->First(); //plist->PopFront();
143
144 PError::AssertType(plist->Nth(2), PEAT_INTEGER, "Argument error in Second parameter of function SubString(<string>, <index>, <length>)]: ");
145 int position = plist->Nth(2);// plist->PopFront();
146
147 PError::AssertType(plist->Nth(3), PEAT_INTEGER, "Argument error in Third parameter of function SubString(<string>, <index>, <length>)]: ");
148 int length = plist->Nth(3);// plist->PopFront();
149
150 if(position < 1)
151 {
152 PError::SignalFatalError("Trying to get substring with index less than 1");
153 }
154 if(string1.length()<position)
155 {
156 PError::SignalFatalError("Trying to get substring with index longer than string");
157 }
158 //cout << "Length: " << string1.length() << "pos: " << position << "len1:"<< length << endl;
159 if(string1.length() < position-1+length)
160 {
161 length = -1;
162 }
163
164 return Variant(string1.substr(position-1,length));
165}
void SignalFatalError(const std::string &message)

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), PList::Nth(), PEAT_INTEGER, PEAT_STRING, and PError::SignalFatalError().

◆ ToASCII()

Variant PEBLString::ToASCII ( Variant  v)

Definition at line 95 of file PEBLString.cpp.

96{
97
98 PList * plist = v.GetComplexData()->GetList();
99 PError::AssertType(plist->First(), PEAT_INTEGER, "Argument error in function ToASCII(<integer>)]: ");
100
101 std::string s = "";
102 s[0] = (plist->First()).GetInteger();
103
104 return Variant((std::string(s)));
105
106}

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_INTEGER.

◆ Uppercase()

Variant PEBLString::Uppercase ( Variant  v)

Definition at line 65 of file PEBLString.cpp.

66{
67
68 //v[1] should have the parameter: a list of keys to wait for.
69 PList * plist = v.GetComplexData()->GetList();
70
71 PError::AssertType(plist->First(), PEAT_STRING, "Argument error in function Uppercase(<string>)]: ");
72
73 std::string s=plist->First();
74 transform(s.begin(), s.end(), s.begin(), toupper);
75
76 return Variant(s);
77}

References PError::AssertType(), PList::First(), Variant::GetComplexData(), PComplexData::GetList(), and PEAT_STRING.

Variable Documentation

◆ FunctionTable

PEBL_Function_Type PEBLString::FunctionTable[]
Initial value:
=
{
{(char*)"UPPERCASE", Uppercase, 1, 1},
{(char*)"LOWERCASE", Lowercase, 1, 1},
{(char*)"TOASCII", ToASCII, 1,1},
{(char*)"STRINGLENGTH", StringLength, 1, 1},
{(char*)"SUBSTRING", SubString, 3, 3},
{(char*)"FINDINSTRING", FindInString, 3, 3},
{(char*)"SPLITSTRING", SplitString, 2, 2},
{(char*)"REGEXMATCH", RegexMatch, 2, 2},
{(char*)"COPYTOCLIPBOARD", CopyToClipboard,1,1},
{(char*)"DETECTTEXTSCRIPT", DetectTextScript, 1, 1},
{(char*)"ISRTL", IsRTL, 1, 1},
{(char*)"GETFONTFORTEXT", GetFontForText, 1, 2},
{(char*)"GETSYSTEMLOCALE", GetSystemLocale, 0, 0},
{(char*)"ISSYSTEMLOCALERTL", IsSystemLocaleRTL, 0, 0},
{0, 0, 0, 0}
}

Definition at line 461 of file Functions.h.

462 {
463
464 {(char*)"UPPERCASE", Uppercase, 1, 1},
465 {(char*)"LOWERCASE", Lowercase, 1, 1},
466 {(char*)"TOASCII", ToASCII, 1,1},
467 {(char*)"STRINGLENGTH", StringLength, 1, 1},
468 {(char*)"SUBSTRING", SubString, 3, 3},
469 {(char*)"FINDINSTRING", FindInString, 3, 3},
470 {(char*)"SPLITSTRING", SplitString, 2, 2},
471 {(char*)"REGEXMATCH", RegexMatch, 2, 2},
472 {(char*)"COPYTOCLIPBOARD", CopyToClipboard,1,1},
473 {(char*)"DETECTTEXTSCRIPT", DetectTextScript, 1, 1},
474 {(char*)"ISRTL", IsRTL, 1, 1},
475 {(char*)"GETFONTFORTEXT", GetFontForText, 1, 2},
476 {(char*)"GETSYSTEMLOCALE", GetSystemLocale, 0, 0},
477 {(char*)"ISSYSTEMLOCALERTL", IsSystemLocaleRTL, 0, 0},
478 // {(char*)"TOKEN", TokenMakeWindow, 1, 1},
479 // {(char*)"FORMAT", Format, 1, 1},
480 {0, 0, 0, 0}
481 };

Referenced by Loader::LoadLibraryFunctions().