Vector<String> GetClipFiles(const String& data) { GuiLock __; Vector<String> f; if((unsigned)data.GetCount() < sizeof(sDROPFILES) + 2) return f; const sDROPFILES *df = (const sDROPFILES *)~data; const char *s = ((const char *)df + df->offset); if(df->unicode) { const wchar *ws = (wchar *)s; while(*ws) { WString fn; while(*ws) fn.Cat(*ws++); f.Add(fn.ToString()); ws++; } } else while(*s) { String fn; while(*s) fn.Cat(*s++); f.Add(fn.ToString()); s++; } return f; }
void AppendClipboardUnicodeText(const WString& s) { #ifndef PLATFORM_WINCE AppendClipboardText(s.ToString()); #endif AppendClipboard("wtext", (byte *)~s, 2 * s.GetLength()); }
void WStringTutorial() { /// .WString /// String works with 8 bit characters. For 16-bit character encoding use `WString`. Both /// classes are closely related and share most of interface methods. U++ also provides /// conversions between `String` and `WString` and you can also use 8 bit string literals with /// `WString`. Conversion is ruled by current default character set. Default value of default /// character set is `CHARSET_UTF8`. This conversion is also used in `WString::ToString`, /// e.g. when putting `WString` to log: WString x = "characters 280-300: "; // you can assign 8-bit character literal to WString for(int i = 280; i < 300; i++) x.Cat(i); DUMP(x); /// `ToString` converts `WString` to `String`: String y = x.ToString(); DUMP(y); /// `ToWString` converts `String` to `WString`: y.Cat(" (appended)"); // you can use 8-bit character literals in most WString operations x = y.ToWString(); DUMP(x); /// }
String GetTextClip(const WString& text, const String& fmt) { if(fmt == "text") return text.ToString(); if(fmt == "wtext") return Unicode__(text); return Null; }
void LineEdit::CutLine() { if(IsReadOnly()) return; int b, e; if(GetSelection(b, e) && GetLine(b) != GetLine(e)) { Cut(); return; } int i = GetLine(cursor); int p = GetPos(i); WString txt = Get(p, line[i].GetLength() + 1).ToWString(); WriteClipboardUnicodeText(txt); AppendClipboardText(txt.ToString()); ClearSelection(); DeleteLine(); }
static WString sCommentLines(const WString& s) { String r; StringStream ss(s.ToString()); for(;;) { String line = ss.GetLine(); if(ss.IsError()) return s; else if(!line.IsVoid()) r << "//" << line << "\n"; if(ss.IsEof()) break; } return r.ToWString(); }
void VfkStream::ScanFile(int fx) { RTIMING("VfkStream::ScanFile"); Stream& strm = streams[fx]; int64 last_line = strm.GetSize(); while(last_line > 0) { strm.Seek(last_line - 1); if(strm.Get() == '\n') break; last_line--; } strm.Seek(0); try { int c; int64 rowpos = strm.GetPos(); while((c = strm.Get()) == '&' && ((c = strm.Get()) == 'H' || c == 'D') && IsAlpha(strm.Term())) { char type = c; int64 begin = strm.GetPos(); SkipRow(strm); rowpos = strm.GetPos(); int len = (int)(strm.GetPos() - begin); StringBuffer linebuf(len + 1); strm.Seek(begin); strm.Get(linebuf, len); linebuf[len] = 0; const char *b = linebuf; const char *id = b; while(IsIdent(*++b)) ; String ident(id, b); if(*b++ != ';') throw Exc(NFormat("';' expected after '%s' (found: '%c', %2:02x)", ident, *b)); if(type == 'D') { String fident = "X_" + ident; int f = tables.Find(fident); if(f < 0) throw Exc(NFormat("unexpected data for filter table '%s'", ident)); // b = ScanRow(b, tables[f]); } else if(IsAlpha(*b)) { String fident = "X_" + ident; Table& tbl = tables.GetAdd(fident); tbl.name = tbl.rawname = fident; tbl.row_count = 0; ScanHeader(b, tbl); } else { do { Vector<Value> row; row.SetCount(HDR_COUNT); if(*b == '\"') { WString text = ReadString(b, &b); if(IsDateTime(ident) && !IsNull(text)) { Time dt = VfkReadTime(text.ToString(), NULL); if(IsNull(dt)) throw Exc(NFormat("invalid date/time value %s", AsCString(text.ToString()))); row[HDR_DTM] = dt; } else { row[HDR_STR] = text; if(ident == "CODEPAGE") if(text == WString("EE8MSWIN1250")) charset = CHARSET_WIN1250; } } else { double num = ScanDouble(b, &b); if(IsNull(num)) throw Exc("invalid numeric value"); row[HDR_NUM] = num; } int l = header.FindLast(ident); row[HDR_ID] = ident; row[HDR_ORD] = (l >= 0 ? (int)header[l][HDR_ORD] + 1 : 0); header.Add(ident) = row; } while(*b++ == ';'); b--; } } strm.Seek(rowpos); while(strm.Get() == '&' && strm.Get() == 'B' && IsAlpha(strm.Term())) { int64 header_offset = strm.GetPos(); SkipRow(strm); int64 begin_offset = strm.GetPos(); int len = (int)(begin_offset - header_offset); Buffer<char> linebuf(len + 1); strm.Seek(header_offset); strm.Get(linebuf, len); linebuf[len] = 0; const char *b = linebuf; const char *id = b; while(IsIdent(*++b)) ; int idlen = b - id; String ident(id, b); if(*b++ != ';') throw Exc(NFormat("';' expected after '%s' (found: '%c', %2:02x)", ident, *b)); String name = ident; for(const VFKLongName *ln = vfk_long_names; ln->shortname; ln++) if(name == ln->shortname) { name = ln->longname; break; } Table& tbl = tables.GetAdd(name); tbl.name = name; tbl.rawname = ident; ScanHeader(b, tbl); int64 p = begin_offset, e = last_line; Buffer<char> idbuf(idlen + 3); while(p < e) { int64 m = (p + e) >> 1; while(m > p) { char part[100]; int partsize = (int)min<int64>(m - p, sizeof(part)); strm.Seek(m - partsize); strm.Get(part, partsize); const char *x = &part[partsize]; while(x > part && x[-1] != '\n') x--; int lfpos = x - part; if(x > part && --x > part && x[-1] == '\r') x--; m -= partsize - lfpos; if(x <= part) continue; if(*--x != '\xA4') break; m -= lfpos - (x - part); } strm.Seek(m); if(strm.Get(idbuf, idlen + 3) != idlen + 3 || idbuf[0] != '&' || idbuf[1] != 'D' || memcmp(~idbuf + 2, id, idlen) || idbuf[idlen + 2] != ';') e = m; else { SkipRow(strm); p = strm.GetPos(); } } int xgrp = file_groups.GetKey(fx); int f; for(f = 0; f < tbl.file_index.GetCount(); f++) if(file_groups.GetKey(tbl.file_index[f]) == xgrp) break; if(f >= tbl.file_index.GetCount()) { tbl.file_index.Add(fx); tbl.begin_offset.Add(begin_offset); tbl.end_offset.Add(p); } strm.Seek(p); } } catch(Exc e) { throw Exc(NFormat("%s (offset %n): %s", file_groups[fx], strm.GetPos(), e)); } }
static WString sCString(const WString& s) { return AsCString(s.ToString()).ToWString(); }
bool PythonSyntax::IsNumber(const WString& w) { RegExp exp("^-?[0-9]+$"); return exp.Match(w.ToString()); }
bool PythonSyntax::IsKeyword(const WString& w) { return keywords.Find(w.ToString()) > -1; }
bool PythonSyntax::IsSpecialVar(const WString& w) { return specialVars.Find(w.ToString()) > -1; }
void FileTabs::InsertFile(int ix, const WString &file, bool make_active) { InsertFile(ix, file, NativePathIcon(file.ToString()), make_active); }
void FileTabs::AddFile(const WString &file, bool make_active) { AddFile(file, NativePathIcon(file.ToString()), make_active); }
void FileTabs::RenameFile(const WString &from, const WString &to, Image icon) { int n = FindKey(from); if (n >= 0) Set(n, to, GetFileName(to.ToString()), IsNull(icon) ? NativePathIcon(to.ToString()) : icon); }
void FileTabs::InsertFile(int ix, const WString &file, Image img, bool make_active) { String s = file.ToString(); TabBar::InsertKey(ix, file, GetFileName(s), img, GetFileGroup(s), make_active); }