ReactOS 0.4.16-dev-88-ga65b6ae
string.c File Reference
#include "editor.h"
Include dependency graph for string.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (richedit)
 
static int ME_GetOptimalBuffer (int nLen)
 
static ME_Stringmake_string (void(*free)(ME_String *))
 
ME_StringME_MakeStringConst (const WCHAR *str, int len)
 
static void heap_string_free (ME_String *s)
 
ME_StringME_MakeStringEmpty (int nMaxChars)
 
ME_StringME_MakeStringN (LPCWSTR szText, int nMaxChars)
 
ME_StringME_MakeStringR (WCHAR cRepeat, int nMaxChars)
 
void ME_DestroyString (ME_String *s)
 
BOOL ME_InsertString (ME_String *s, int ofs, const WCHAR *insert, int len)
 
BOOL ME_AppendString (ME_String *s, const WCHAR *append, int len)
 
ME_StringME_VSplitString (ME_String *orig, int charidx)
 
void ME_StrDeleteV (ME_String *s, int nVChar, int nChars)
 
static int ME_WordBreakProc (LPWSTR s, INT start, INT len, INT code)
 
int ME_CallWordBreakProc (ME_TextEditor *editor, WCHAR *str, INT len, INT start, INT code)
 
LPWSTR ME_ToUnicode (LONG codepage, LPVOID psz, INT *len)
 
void ME_EndToUnicode (LONG codepage, LPVOID psz)
 

Function Documentation

◆ heap_string_free()

static void heap_string_free ( ME_String s)
static

Definition at line 52 of file string.c.

53{
54 heap_free( s->szData );
55}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
GLdouble s
Definition: gl.h:2039

Referenced by ME_MakeStringEmpty().

◆ make_string()

static ME_String * make_string ( void(*)(ME_String *)  free)
static

Definition at line 30 of file string.c.

31{
32 ME_String *s = heap_alloc( sizeof(*s) );
33
34 if (s) s->free = free;
35 return s;
36}
static void * heap_alloc(size_t len)
Definition: appwiz.h:66
#define free
Definition: debug_ros.c:5

Referenced by ME_MakeStringConst(), and ME_MakeStringEmpty().

◆ ME_AppendString()

BOOL ME_AppendString ( ME_String s,
const WCHAR append,
int  len 
)

Definition at line 126 of file string.c.

127{
128 return ME_InsertString( s, s->nLen, append, len );
129}
BOOL ME_InsertString(ME_String *s, int ofs, const WCHAR *insert, int len)
Definition: string.c:103
GLenum GLsizei len
Definition: glext.h:6722
static void append(struct dump_context *dc, const void *data, unsigned size)
Definition: minidump.c:397

Referenced by ME_JoinParagraphs(), and ME_SplitParagraph().

◆ ME_CallWordBreakProc()

int ME_CallWordBreakProc ( ME_TextEditor editor,
WCHAR str,
INT  len,
INT  start,
INT  code 
)

Definition at line 204 of file string.c.

205{
206 if (!editor->pfnWordBreak) {
207 return ME_WordBreakProc(str, start, len, code);
208 } else if (!editor->bEmulateVersion10) {
209 /* MSDN lied about the third parameter for EditWordBreakProc being the number
210 * of characters, it is actually the number of bytes of the string. */
211 return editor->pfnWordBreak(str, start, len * sizeof(WCHAR), code);
212 } else {
213 int result;
215 NULL, 0, NULL, NULL);
217 if (!buffer) return 0;
222 return result;
223 }
224}
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
static int ME_WordBreakProc(LPWSTR s, INT start, INT len, INT code)
Definition: string.c:162
GLuint start
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
GLuint64EXT * result
Definition: glext.h:11304
const WCHAR * str
Definition: inflate.c:139
EDITWORDBREAKPROCW pfnWordBreak
Definition: editstr.h:417
BOOL bEmulateVersion10
Definition: editstr.h:385
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
Definition: swimpl.c:888
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ME_MoveCursorWords().

◆ ME_DestroyString()

void ME_DestroyString ( ME_String s)

Definition at line 96 of file string.c.

97{
98 if (!s) return;
99 if (s->free) s->free( s );
100 heap_free( s );
101}

Referenced by destroy_para(), destroy_undo_item(), draw_text(), ME_CharFromPointContext(), ME_GetRunSizeCommon(), ME_PointFromCharContext(), and para_num_clear().

◆ ME_EndToUnicode()

void ME_EndToUnicode ( LONG  codepage,
LPVOID  psz 
)

Definition at line 248 of file string.c.

249{
250 if (codepage != CP_UNICODE)
251 heap_free( psz );
252}
#define CP_UNICODE
Definition: stg_prop.c:74
int codepage
Definition: win_iconv.c:156

Referenced by ME_HandleMessage(), and ME_SetText().

◆ ME_GetOptimalBuffer()

static int ME_GetOptimalBuffer ( int  nLen)
static

Definition at line 25 of file string.c.

26{
27 return ((sizeof(WCHAR) * nLen) + 128) & ~63;
28}

Referenced by ME_InsertString(), and ME_MakeStringEmpty().

◆ ME_InsertString()

BOOL ME_InsertString ( ME_String s,
int  ofs,
const WCHAR insert,
int  len 
)

Definition at line 103 of file string.c.

104{
105 DWORD new_len = s->nLen + len + 1;
106 WCHAR *new;
107
108 assert( s->nBuffer ); /* Not a const string */
109 assert( ofs <= s->nLen );
110
111 if( new_len > s->nBuffer )
112 {
113 s->nBuffer = ME_GetOptimalBuffer( new_len );
114 new = heap_realloc( s->szData, s->nBuffer * sizeof(WCHAR) );
115 if (!new) return FALSE;
116 s->szData = new;
117 }
118
119 memmove( s->szData + ofs + len, s->szData + ofs, (s->nLen - ofs + 1) * sizeof(WCHAR) );
120 memcpy( s->szData + ofs, insert, len * sizeof(WCHAR) );
121 s->nLen += len;
122
123 return TRUE;
124}
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:71
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static int ME_GetOptimalBuffer(int nLen)
Definition: string.c:25
#define assert(x)
Definition: debug.h:53
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static int insert
Definition: xmllint.c:138

Referenced by ME_AppendString(), and ME_InsertRunAtCursor().

◆ ME_MakeStringConst()

ME_String * ME_MakeStringConst ( const WCHAR str,
int  len 
)

Definition at line 41 of file string.c.

42{
44 if (!s) return NULL;
45
46 s->szData = (WCHAR *)str;
47 s->nLen = len;
48 s->nBuffer = 0;
49 return s;
50}
static ME_String * make_string(void(*free)(ME_String *))
Definition: string.c:30

Referenced by para_num_init().

◆ ME_MakeStringEmpty()

ME_String * ME_MakeStringEmpty ( int  nMaxChars)

Definition at line 58 of file string.c.

59{
61
62 if (!s) return NULL;
63 s->nLen = nMaxChars;
64 s->nBuffer = ME_GetOptimalBuffer(s->nLen + 1);
65 s->szData = heap_alloc( s->nBuffer * sizeof(WCHAR) );
66 if (!s->szData)
67 {
68 heap_free( s );
69 return NULL;
70 }
71 s->szData[s->nLen] = 0;
72 return s;
73}
static void heap_string_free(ME_String *s)
Definition: string.c:52

Referenced by ME_MakeStringN(), ME_MakeStringR(), and para_num_get_str().

◆ ME_MakeStringN()

ME_String * ME_MakeStringN ( LPCWSTR  szText,
int  nMaxChars 
)

Definition at line 75 of file string.c.

76{
77 ME_String *s = ME_MakeStringEmpty(nMaxChars);
78
79 if (!s) return NULL;
80 memcpy(s->szData, szText, s->nLen * sizeof(WCHAR));
81 return s;
82}
ME_String * ME_MakeStringEmpty(int nMaxChars)
Definition: string.c:58

Referenced by ME_MakeFirstParagraph(), and ME_VSplitString().

◆ ME_MakeStringR()

ME_String * ME_MakeStringR ( WCHAR  cRepeat,
int  nMaxChars 
)

Definition at line 85 of file string.c.

86{
87 int i;
88 ME_String *s = ME_MakeStringEmpty(nMaxChars);
89
90 if (!s) return NULL;
91 for (i = 0; i < nMaxChars; i++)
92 s->szData[i] = cRepeat;
93 return s;
94}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248

Referenced by draw_text(), ME_CharFromPointContext(), ME_GetRunSizeCommon(), and ME_PointFromCharContext().

◆ ME_StrDeleteV()

void ME_StrDeleteV ( ME_String s,
int  nVChar,
int  nChars 
)

Definition at line 147 of file string.c.

148{
149 int end_ofs = nVChar + nChars;
150
151 assert(s->nBuffer); /* Not a const string */
152 assert(nChars >= 0);
153 assert(nVChar >= 0);
154 assert(end_ofs <= s->nLen);
155
156 memmove(s->szData + nVChar, s->szData + end_ofs,
157 (s->nLen - end_ofs + 1) * sizeof(WCHAR));
158 s->nLen -= nChars;
159}

Referenced by ME_InternalDeleteText().

◆ ME_ToUnicode()

LPWSTR ME_ToUnicode ( LONG  codepage,
LPVOID  psz,
INT len 
)

Definition at line 226 of file string.c.

227{
228 *len = 0;
229 if (!psz) return NULL;
230
231 if (codepage == CP_UNICODE)
232 {
233 *len = lstrlenW(psz);
234 return psz;
235 }
236 else {
237 WCHAR *tmp;
238 int nChars = MultiByteToWideChar(codepage, 0, psz, -1, NULL, 0);
239
240 if(!nChars) return NULL;
241
242 if((tmp = heap_alloc( nChars * sizeof(WCHAR) )) != NULL)
243 *len = MultiByteToWideChar(codepage, 0, psz, -1, tmp, nChars) - 1;
244 return tmp;
245 }
246}
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrlenW
Definition: compat.h:750

Referenced by ME_HandleMessage(), and ME_SetText().

◆ ME_VSplitString()

ME_String * ME_VSplitString ( ME_String orig,
int  charidx 
)

Definition at line 131 of file string.c.

132{
133 ME_String *s;
134
135 assert(orig->nBuffer); /* Not a const string */
136 assert(charidx>=0);
137 assert(charidx<=orig->nLen);
138
139 s = ME_MakeStringN(orig->szData+charidx, orig->nLen-charidx);
140 if (!s) return NULL;
141
142 orig->nLen = charidx;
143 orig->szData[charidx] = '\0';
144 return s;
145}
ME_String * ME_MakeStringN(LPCWSTR szText, int nMaxChars)
Definition: string.c:75
WCHAR * szData
Definition: editstr.h:56
int nLen
Definition: editstr.h:57
int nBuffer
Definition: editstr.h:57

Referenced by ME_JoinParagraphs(), and ME_SplitParagraph().

◆ ME_WordBreakProc()

static int ME_WordBreakProc ( LPWSTR  s,
INT  start,
INT  len,
INT  code 
)
static

Definition at line 162 of file string.c.

163{
164#ifndef __REACTOS__
165 /* FIXME: Native also knows about punctuation */
166#endif
167 TRACE("s==%s, start==%d, len==%d, code==%d\n",
169
170 switch (code)
171 {
172 case WB_ISDELIMITER:
173 return ME_IsWSpace(s[start]);
174 case WB_LEFT:
175 case WB_MOVEWORDLEFT:
176 while (start && ME_IsWSpace(s[start - 1]))
177 start--;
178#ifdef __REACTOS__
179 while (start && !ME_IsWSpace(s[start - 1]) && !iswpunct(s[start - 1]))
180 start--;
181#else
182 while (start && !ME_IsWSpace(s[start - 1]))
183 start--;
184#endif
185 return start;
186 case WB_RIGHT:
187 case WB_MOVEWORDRIGHT:
188#ifdef __REACTOS__
189 while (start < len && !ME_IsWSpace(s[start]) && !iswpunct(s[start]))
190 start++;
191#else
192 while (start < len && !ME_IsWSpace(s[start]))
193 start++;
194#endif
195 while (start < len && ME_IsWSpace(s[start]))
196 start++;
197 return start;
198 }
199 return 0;
200}
static int ME_IsWSpace(WCHAR ch)
Definition: editor.h:101
#define iswpunct(_c)
Definition: ctype.h:670
#define debugstr_wn
Definition: kernel32.h:33
#define WB_MOVEWORDRIGHT
Definition: richedit.h:1002
#define WB_MOVEWORDLEFT
Definition: richedit.h:1000
#define TRACE(s)
Definition: solgame.cpp:4
#define WB_ISDELIMITER
Definition: winuser.h:549
#define WB_LEFT
Definition: winuser.h:550
#define WB_RIGHT
Definition: winuser.h:551

Referenced by ME_CallWordBreakProc().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( richedit  )