Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/PluginUtil.cpp

Issue 5750789393874944: [IE] First round of ATL removal (Closed)
Patch Set: Created June 20, 2014, 9:22 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 #include "PluginStdAfx.h" 1 #include "PluginStdAfx.h"
2 #include <algorithm> 2 #include <algorithm>
3 #include <stdexcept> 3 #include <stdexcept>
4 #include <vector> 4 #include <vector>
5 #include <cctype>
5 6
6 #include "../shared/Utils.h" 7 #include "../shared/Utils.h"
7 #include "PluginUtil.h" 8 #include "PluginUtil.h"
8 #include "PluginSettings.h" 9 #include "PluginSettings.h"
9 10
10 BString::BString(const std::wstring& value)
11 : value(::SysAllocString(value.c_str()))
12 {
13 }
14
15 BString::~BString()
16 {
17 ::SysFreeString(value);
18 }
19
20 BString::operator BSTR()
21 {
22 return value;
23 }
24
25 std::wstring HtmlFolderPath() 11 std::wstring HtmlFolderPath()
26 { 12 {
27 return GetDllDir() + L"html\\templates\\"; 13 return GetDllDir() + L"html\\templates\\";
28 } 14 }
29 15
30 std::wstring UserSettingsFileUrl() 16 std::wstring UserSettingsFileUrl()
31 { 17 {
32 return FileUrl(HtmlFolderPath() + L"index.html"); 18 return FileUrl(HtmlFolderPath() + L"index.html");
33 } 19 }
34 20
35 std::wstring FirstRunPageFileUrl() 21 std::wstring FirstRunPageFileUrl()
36 { 22 {
37 return FileUrl(HtmlFolderPath() + L"firstRun.html"); 23 return FileUrl(HtmlFolderPath() + L"firstRun.html");
38 } 24 }
39 25
40 std::wstring FileUrl(const std::wstring& path) 26 std::wstring FileUrl(const std::wstring& path)
41 { 27 {
42 std::wstring url = path; 28 std::wstring url = path;
43 std::replace(url.begin(), url.end(), L'\\', L'/'); 29 std::replace(url.begin(), url.end(), L'\\', L'/');
44 return L"file:///" + url; 30 return L"file:///" + url;
45 } 31 }
32
33 /**
34 * Case-insensitive wide-string equality
35 *
36 * We only use any kind of case-insensitive comparison in 'InjectABP'.
37 */
38 bool ABP::util::wstring_equal_ci( std::wstring & a, std::wstring & b )
39 {
Oleksandr 2014/06/26 00:48:43 Since these functions are generic enough, I think
Eric 2014/06/26 15:13:56 I'm OK with that. I'd prefer to do it in a separa
40 /*
41 * We don't need ordering, so first just compare lengths.
42 */
43 size_t n = a.length();
44 if ( n != b.length() )
45 {
46 return false;
47 }
48 // Assert 'a' and 'b' have the same length
49 for ( size_t j = 0 ; j < n ; ++ j )
50 {
51 if ( std::tolower( a[j] ) != std::tolower( b[j] ) )
sergei 2014/07/08 11:58:34 Strictly speaking it's not a correct implementatio
Eric 2014/07/08 17:46:37 That's right, it's not correct for every purpose.
52 {
53 return false;
54 }
55 }
56 return true;
57 }
58
59 void ABP::util::trim( std::wstring & s )
60 {
Oleksandr 2014/06/26 00:48:43 We already gave AdblockPlus::Utils::TrimString
Eric 2014/06/26 15:13:56 I noticed that after I posted the review.
61 static wchar_t whitespace[] = L" \r\n\t";
62 size_t len = s.length();
63 if ( len == 0 )
64 {
65 return;
66 }
67 size_t n = s.find_first_not_of( whitespace, 0, 4 );
68 // Assert substring s[0,n) is all whitespace
69 // If n==0, the interval is empty.
70 // If n==wstring::npos, the whole string matched
71 if ( n == std::wstring::npos )
72 {
73 s.clear();
74 return;
75 }
76 else if ( n > 0 )
77 {
78 s.erase( 0, n );
79 len -= n;
80 if ( len == 0 )
81 {
82 return;
83 }
84 }
85 // Assert 's' is not empty
86 // Assert the first character of 's' is not whitespace
87 // Assert len == s.length()
88 n = s.find_last_not_of( whitespace, len, 4 ) + 1;
89 if ( n < len )
90 {
91 s.erase( n );
92 }
93 }
94
95 void ABP::util::trim_leading( std::wstring & s )
96 {
97 static wchar_t whitespace[] = L" \r\n\t";
98 if ( s.length() == 0 )
99 {
100 return;
101 }
102 size_t n = s.find_first_not_of( whitespace, 0, 4 );
103 // Assert substring s[0,n) is all whitespace
104 // If n==0, the interval is empty, that is, no leading whitespace
105 // If n==wstring::npos, the whole string matched, that is, it's all whitespace
106 if ( n == std::wstring::npos )
107 {
108 s.clear();
109 }
110 else if ( n > 0 )
111 {
112 s.erase( 0, n );
113 }
114 }
115
116 void ABP::util::trim_trailing( std::wstring & s )
117 {
118 static wchar_t whitespace[] = L" \r\n\t";
119 size_t len = s.length();
120 if ( len == 0 )
121 {
122 return;
123 }
124 // Assert 's' is not empty
125 size_t n = s.find_last_not_of( whitespace, len, 4 ) + 1;
126 if ( n < len )
127 {
128 s.erase( n );
129 }
130 }
131
132 void ABP::util::to_lower( std::wstring & s )
133 {
134 size_t n = s.length();
135 for ( size_t j = 0 ; j < n ; ++j )
136 {
137 s[ j ] = tolower( s[ j ] );
138 }
139 }
140
141 std::wstring ABP::util::extract_token( const std::wstring source, size_t & start , const std::wstring tokens )
142 {
143 // Skip initial tokens
144 size_t begin = source.find_first_not_of( tokens, start );
145 if ( begin == std::wstring::npos )
146 {
147 // Assert the source is all whitespace following the start position.
148 start = begin;
149 return std::wstring();
150 }
151 // Assert n < source.length
152 // Assert source[ start, n ) is all whitespace ( an empty interval if start == n )
153 // Assert source[ n ] is not whitespace
154 size_t end = source.find_first_of( tokens, begin + 1 );
155 if ( end == std::wstring::npos )
156 {
157 start = std::wstring::npos;
158 return source.substr( begin );
159 }
160 if ( end + 1 >= source.length() ) {
161 start = std::wstring::npos;
162 } else {
163 start = end + 1;
164 }
165 return source.substr( begin, end - begin );
166 }
OLDNEW

Powered by Google App Engine
This is Rietveld