mirror of
https://github.com/reactos/reactos.git
synced 2024-12-31 19:42:51 +00:00
Import and merge Wine-20041201
svn path=/trunk/; revision=12591
This commit is contained in:
parent
231d02b6af
commit
5bcd5409f3
14 changed files with 6353 additions and 0 deletions
9
reactos/lib/richedit/Makefile
Normal file
9
reactos/lib/richedit/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# $Id: Makefile 7978 2004-02-01 21:20:05Z gvg $
|
||||||
|
|
||||||
|
PATH_TO_TOP = ../..
|
||||||
|
|
||||||
|
TARGET_TYPE = winedll
|
||||||
|
|
||||||
|
include $(PATH_TO_TOP)/rules.mak
|
||||||
|
|
||||||
|
include $(TOOLS_PATH)/helper.mk
|
15
reactos/lib/richedit/Makefile.in
Normal file
15
reactos/lib/richedit/Makefile.in
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
TOPSRCDIR = @top_srcdir@
|
||||||
|
TOPOBJDIR = ../..
|
||||||
|
SRCDIR = @srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
MODULE = riched32.dll
|
||||||
|
IMPORTS = user32 kernel32
|
||||||
|
|
||||||
|
C_SRCS = \
|
||||||
|
reader.c \
|
||||||
|
text-writer.c \
|
||||||
|
richedit.c
|
||||||
|
|
||||||
|
@MAKE_DLL_RULES@
|
||||||
|
|
||||||
|
### Dependencies:
|
19
reactos/lib/richedit/Makefile.ros-template
Normal file
19
reactos/lib/richedit/Makefile.ros-template
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# $Id: Makefile.ros-template 11910 2004-12-03 23:37:44Z blight $
|
||||||
|
|
||||||
|
TARGET_NAME = riched32
|
||||||
|
|
||||||
|
TARGET_OBJECTS = @C_SRCS@
|
||||||
|
|
||||||
|
TARGET_CFLAGS = @EXTRADEFS@ -D__REACTOS__
|
||||||
|
|
||||||
|
TARGET_SDKLIBS = @IMPORTS@ wine.a ntdll.a
|
||||||
|
|
||||||
|
TARGET_BASE = $(TARGET_BASE_LIB_RICHEDIT)
|
||||||
|
|
||||||
|
TARGET_NORC = yes
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
DEP_OBJECTS = $(TARGET_OBJECTS)
|
||||||
|
|
||||||
|
include $(TOOLS_PATH)/depend.mk
|
211
reactos/lib/richedit/ansi_gen.h
Normal file
211
reactos/lib/richedit/ansi_gen.h
Normal file
|
@ -0,0 +1,211 @@
|
||||||
|
/*
|
||||||
|
RTF ANSI character set (\ansi) general map
|
||||||
|
These are taken from the ISO-Latin-1 (ISO-8859-1) encodings, with
|
||||||
|
a few additions
|
||||||
|
|
||||||
|
Field 1 is the standard character name which the character value in
|
||||||
|
field 2 maps onto. (It doesn't mean "to produce the character in field 1,
|
||||||
|
use the value in field 2.)
|
||||||
|
|
||||||
|
The character value may be given either as a single character (which will be
|
||||||
|
converted to the ASCII value of the character), or in numeric format, either
|
||||||
|
in decimal or 0xyy as hex yy. Single or double quotes may be used to quote
|
||||||
|
characters.*/
|
||||||
|
|
||||||
|
int ansi_gen[] =
|
||||||
|
{
|
||||||
|
rtfSC_formula ,0x06,
|
||||||
|
rtfSC_nobrkhyphen ,0x1e,
|
||||||
|
rtfSC_opthyphen ,0x1f,
|
||||||
|
rtfSC_space ,' ',
|
||||||
|
rtfSC_exclam ,'!',
|
||||||
|
rtfSC_quotedbl ,'"',
|
||||||
|
rtfSC_numbersign ,'#',
|
||||||
|
rtfSC_dollar ,'$',
|
||||||
|
rtfSC_percent ,'%',
|
||||||
|
rtfSC_ampersand ,'&',
|
||||||
|
rtfSC_quoteright ,'\\',
|
||||||
|
rtfSC_parenleft ,'(',
|
||||||
|
rtfSC_parenright ,')',
|
||||||
|
rtfSC_asterisk ,'*',
|
||||||
|
rtfSC_plus ,'+',
|
||||||
|
rtfSC_comma ,',',
|
||||||
|
rtfSC_hyphen ,'-',
|
||||||
|
rtfSC_period ,'.',
|
||||||
|
rtfSC_slash ,'/',
|
||||||
|
rtfSC_zero ,'0',
|
||||||
|
rtfSC_one ,'1',
|
||||||
|
rtfSC_two ,'2',
|
||||||
|
rtfSC_three ,'3',
|
||||||
|
rtfSC_four ,'4',
|
||||||
|
rtfSC_five ,'5',
|
||||||
|
rtfSC_six ,'6',
|
||||||
|
rtfSC_seven ,'7',
|
||||||
|
rtfSC_eight ,'8',
|
||||||
|
rtfSC_nine ,'9',
|
||||||
|
rtfSC_colon ,':',
|
||||||
|
rtfSC_semicolon ,';',
|
||||||
|
rtfSC_less ,'<',
|
||||||
|
rtfSC_equal ,'=',
|
||||||
|
rtfSC_greater ,'>',
|
||||||
|
rtfSC_question ,'?',
|
||||||
|
rtfSC_at ,'@',
|
||||||
|
rtfSC_A ,'A',
|
||||||
|
rtfSC_B ,'B',
|
||||||
|
rtfSC_C ,'C',
|
||||||
|
rtfSC_D ,'D',
|
||||||
|
rtfSC_E ,'E',
|
||||||
|
rtfSC_F ,'F',
|
||||||
|
rtfSC_G ,'G',
|
||||||
|
rtfSC_H ,'H',
|
||||||
|
rtfSC_I ,'I',
|
||||||
|
rtfSC_J ,'J',
|
||||||
|
rtfSC_K ,'K',
|
||||||
|
rtfSC_L ,'L',
|
||||||
|
rtfSC_M ,'M',
|
||||||
|
rtfSC_N ,'N',
|
||||||
|
rtfSC_O ,'O',
|
||||||
|
rtfSC_P ,'P',
|
||||||
|
rtfSC_Q ,'Q',
|
||||||
|
rtfSC_R ,'R',
|
||||||
|
rtfSC_S ,'S',
|
||||||
|
rtfSC_T ,'T',
|
||||||
|
rtfSC_U ,'U',
|
||||||
|
rtfSC_V ,'V',
|
||||||
|
rtfSC_W ,'W',
|
||||||
|
rtfSC_X ,'X',
|
||||||
|
rtfSC_Y ,'Y',
|
||||||
|
rtfSC_Z ,'Z',
|
||||||
|
rtfSC_bracketleft ,'[',
|
||||||
|
rtfSC_backslash ,'\\',
|
||||||
|
rtfSC_bracketright ,']',
|
||||||
|
rtfSC_asciicircum ,'^',
|
||||||
|
rtfSC_underscore ,'_',
|
||||||
|
rtfSC_quoteleft ,'`',
|
||||||
|
rtfSC_a ,'a',
|
||||||
|
rtfSC_b ,'b',
|
||||||
|
rtfSC_c ,'c',
|
||||||
|
rtfSC_d ,'d',
|
||||||
|
rtfSC_e ,'e',
|
||||||
|
rtfSC_f ,'f',
|
||||||
|
rtfSC_g ,'g',
|
||||||
|
rtfSC_h ,'h',
|
||||||
|
rtfSC_i ,'i',
|
||||||
|
rtfSC_j ,'j',
|
||||||
|
rtfSC_k ,'k',
|
||||||
|
rtfSC_l ,'l',
|
||||||
|
rtfSC_m ,'m',
|
||||||
|
rtfSC_n ,'n',
|
||||||
|
rtfSC_o ,'o',
|
||||||
|
rtfSC_p ,'p',
|
||||||
|
rtfSC_q ,'q',
|
||||||
|
rtfSC_r ,'r',
|
||||||
|
rtfSC_s ,'s',
|
||||||
|
rtfSC_t ,'t',
|
||||||
|
rtfSC_u ,'u',
|
||||||
|
rtfSC_v ,'v',
|
||||||
|
rtfSC_w ,'w',
|
||||||
|
rtfSC_x ,'x',
|
||||||
|
rtfSC_y ,'y',
|
||||||
|
rtfSC_z ,'z',
|
||||||
|
rtfSC_braceleft ,'{',
|
||||||
|
rtfSC_bar ,'|',
|
||||||
|
rtfSC_braceright ,'}',
|
||||||
|
rtfSC_asciitilde ,'~',
|
||||||
|
rtfSC_nobrkspace ,0xa0,
|
||||||
|
rtfSC_exclamdown ,0xa1,
|
||||||
|
rtfSC_cent ,0xa2,
|
||||||
|
rtfSC_sterling ,0xa3,
|
||||||
|
rtfSC_currency ,0xa4,
|
||||||
|
rtfSC_yen ,0xa5,
|
||||||
|
rtfSC_brokenbar ,0xa6,
|
||||||
|
rtfSC_section ,0xa7,
|
||||||
|
rtfSC_dieresis ,0xa8,
|
||||||
|
rtfSC_copyright ,0xa9,
|
||||||
|
rtfSC_ordfeminine ,0xaa,
|
||||||
|
rtfSC_guillemotleft ,0xab,
|
||||||
|
rtfSC_logicalnot ,0xac,
|
||||||
|
rtfSC_opthyphen ,0xad,
|
||||||
|
rtfSC_registered ,0xae,
|
||||||
|
rtfSC_macron ,0xaf,
|
||||||
|
rtfSC_degree ,0xb0,
|
||||||
|
rtfSC_plusminus ,0xb1,
|
||||||
|
rtfSC_twosuperior ,0xb2,
|
||||||
|
rtfSC_threesuperior ,0xb3,
|
||||||
|
rtfSC_acute ,0xb4,
|
||||||
|
rtfSC_mu ,0xb5,
|
||||||
|
rtfSC_paragraph ,0xb6,
|
||||||
|
rtfSC_periodcentered ,0xb7,
|
||||||
|
rtfSC_cedilla ,0xb8,
|
||||||
|
rtfSC_onesuperior ,0xb9,
|
||||||
|
rtfSC_ordmasculine ,0xba,
|
||||||
|
rtfSC_guillemotright ,0xbb,
|
||||||
|
rtfSC_onequarter ,0xbc,
|
||||||
|
rtfSC_onehalf ,0xbd,
|
||||||
|
rtfSC_threequarters ,0xbe,
|
||||||
|
rtfSC_questiondown ,0xbf,
|
||||||
|
rtfSC_Agrave ,0xc0,
|
||||||
|
rtfSC_Aacute ,0xc1,
|
||||||
|
rtfSC_Acircumflex ,0xc2,
|
||||||
|
rtfSC_Atilde ,0xc3,
|
||||||
|
rtfSC_Adieresis ,0xc4,
|
||||||
|
rtfSC_Aring ,0xc5,
|
||||||
|
rtfSC_AE ,0xc6,
|
||||||
|
rtfSC_Ccedilla ,0xc7,
|
||||||
|
rtfSC_Egrave ,0xc8,
|
||||||
|
rtfSC_Eacute ,0xc9,
|
||||||
|
rtfSC_Ecircumflex ,0xca,
|
||||||
|
rtfSC_Edieresis ,0xcb,
|
||||||
|
rtfSC_Igrave ,0xcc,
|
||||||
|
rtfSC_Iacute ,0xcd,
|
||||||
|
rtfSC_Icircumflex ,0xce,
|
||||||
|
rtfSC_Idieresis ,0xcf,
|
||||||
|
rtfSC_Eth ,0xd0,
|
||||||
|
rtfSC_Ntilde ,0xd1,
|
||||||
|
rtfSC_Ograve ,0xd2,
|
||||||
|
rtfSC_Oacute ,0xd3,
|
||||||
|
rtfSC_Ocircumflex ,0xd4,
|
||||||
|
rtfSC_Otilde ,0xd5,
|
||||||
|
rtfSC_Odieresis ,0xd6,
|
||||||
|
rtfSC_multiply ,0xd7,
|
||||||
|
rtfSC_Oslash ,0xd8,
|
||||||
|
rtfSC_Ugrave ,0xd9,
|
||||||
|
rtfSC_Uacute ,0xda,
|
||||||
|
rtfSC_Ucircumflex ,0xdb,
|
||||||
|
rtfSC_Udieresis ,0xdc,
|
||||||
|
rtfSC_Yacute ,0xdd,
|
||||||
|
rtfSC_Thorn ,0xde,
|
||||||
|
rtfSC_germandbls ,0xdf,
|
||||||
|
rtfSC_agrave ,0xe0,
|
||||||
|
rtfSC_aacute ,0xe1,
|
||||||
|
rtfSC_acircumflex ,0xe2,
|
||||||
|
rtfSC_atilde ,0xe3,
|
||||||
|
rtfSC_adieresis ,0xe4,
|
||||||
|
rtfSC_aring ,0xe5,
|
||||||
|
rtfSC_ae ,0xe6,
|
||||||
|
rtfSC_ccedilla ,0xe7,
|
||||||
|
rtfSC_egrave ,0xe8,
|
||||||
|
rtfSC_eacute ,0xe9,
|
||||||
|
rtfSC_ecircumflex ,0xea,
|
||||||
|
rtfSC_edieresis ,0xeb,
|
||||||
|
rtfSC_igrave ,0xec,
|
||||||
|
rtfSC_iacute ,0xed,
|
||||||
|
rtfSC_icircumflex ,0xee,
|
||||||
|
rtfSC_idieresis ,0xef,
|
||||||
|
rtfSC_eth ,0xf0,
|
||||||
|
rtfSC_ntilde ,0xf1,
|
||||||
|
rtfSC_ograve ,0xf2,
|
||||||
|
rtfSC_oacute ,0xf3,
|
||||||
|
rtfSC_ocircumflex ,0xf4,
|
||||||
|
rtfSC_otilde ,0xf5,
|
||||||
|
rtfSC_odieresis ,0xf6,
|
||||||
|
rtfSC_divide ,0xf7,
|
||||||
|
rtfSC_oslash ,0xf8,
|
||||||
|
rtfSC_ugrave ,0xf9,
|
||||||
|
rtfSC_uacute ,0xfa,
|
||||||
|
rtfSC_ucircumflex ,0xfb,
|
||||||
|
rtfSC_udieresis ,0xfc,
|
||||||
|
rtfSC_yacute ,0xfd,
|
||||||
|
rtfSC_thorn ,0xfe,
|
||||||
|
rtfSC_ydieresis ,0xff
|
||||||
|
};
|
112
reactos/lib/richedit/ansi_sym.h
Normal file
112
reactos/lib/richedit/ansi_sym.h
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
/*
|
||||||
|
* RTF ANSI character set (\ansi) Symbol font map
|
||||||
|
*
|
||||||
|
* Field 1 is the standard character name which the character value in
|
||||||
|
* field 2 maps onto. (It doesn't mean "to produce the character in field 1,
|
||||||
|
* use the value in field 2.)
|
||||||
|
*
|
||||||
|
* The character value may be given either as a single character (which will be
|
||||||
|
* converted to the ASCII value of the character), or in numeric format, either
|
||||||
|
* in decimal or 0xyy as hex yy. Single or double quotes may be used to quote
|
||||||
|
* characters.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ansi_sym[] =
|
||||||
|
{
|
||||||
|
rtfSC_formula ,0x06,
|
||||||
|
rtfSC_nobrkhyphen ,0x1e,
|
||||||
|
rtfSC_opthyphen ,0x1f,
|
||||||
|
rtfSC_space ,' ',
|
||||||
|
rtfSC_exclam ,'!',
|
||||||
|
rtfSC_universal ,'"',
|
||||||
|
rtfSC_mathnumbersign ,'#',
|
||||||
|
rtfSC_existential ,'$',
|
||||||
|
rtfSC_percent ,'%',
|
||||||
|
rtfSC_ampersand ,'&',
|
||||||
|
rtfSC_suchthat ,'\\',
|
||||||
|
rtfSC_parenleft ,'(',
|
||||||
|
rtfSC_parenright ,')',
|
||||||
|
rtfSC_mathasterisk ,'*',
|
||||||
|
rtfSC_mathplus ,'+',
|
||||||
|
rtfSC_comma ,',',
|
||||||
|
rtfSC_mathminus ,'-',
|
||||||
|
rtfSC_period ,'.',
|
||||||
|
rtfSC_slash ,'/',
|
||||||
|
rtfSC_zero ,'0',
|
||||||
|
rtfSC_one ,'1',
|
||||||
|
rtfSC_two ,'2',
|
||||||
|
rtfSC_three ,'3',
|
||||||
|
rtfSC_four ,'4',
|
||||||
|
rtfSC_five ,'5',
|
||||||
|
rtfSC_six ,'6',
|
||||||
|
rtfSC_seven ,'7',
|
||||||
|
rtfSC_eight ,'8',
|
||||||
|
rtfSC_nine ,'9',
|
||||||
|
rtfSC_colon ,':',
|
||||||
|
rtfSC_semicolon ,';',
|
||||||
|
rtfSC_less ,'<',
|
||||||
|
rtfSC_mathequal ,'=',
|
||||||
|
rtfSC_greater ,'>',
|
||||||
|
rtfSC_question ,'?',
|
||||||
|
rtfSC_congruent ,'@',
|
||||||
|
rtfSC_Alpha ,'A',
|
||||||
|
rtfSC_Beta ,'B',
|
||||||
|
rtfSC_Chi ,'C',
|
||||||
|
rtfSC_Delta ,'D',
|
||||||
|
rtfSC_Epsilon ,'E',
|
||||||
|
rtfSC_Phi ,'F',
|
||||||
|
rtfSC_Gamma ,'G',
|
||||||
|
rtfSC_Eta ,'H',
|
||||||
|
rtfSC_Iota ,'I',
|
||||||
|
rtfSC_Kappa ,'K',
|
||||||
|
rtfSC_Lambda ,'L',
|
||||||
|
rtfSC_Mu ,'M',
|
||||||
|
rtfSC_Nu ,'N',
|
||||||
|
rtfSC_Omicron ,'O',
|
||||||
|
rtfSC_Pi ,'P',
|
||||||
|
rtfSC_Theta ,'Q',
|
||||||
|
rtfSC_Rho ,'R',
|
||||||
|
rtfSC_Sigma ,'S',
|
||||||
|
rtfSC_Tau ,'T',
|
||||||
|
rtfSC_Upsilon ,'U',
|
||||||
|
rtfSC_varsigma ,'V',
|
||||||
|
rtfSC_Omega ,'W',
|
||||||
|
rtfSC_Xi ,'X',
|
||||||
|
rtfSC_Psi ,'Y',
|
||||||
|
rtfSC_Zeta ,'Z',
|
||||||
|
rtfSC_bracketleft ,'[',
|
||||||
|
rtfSC_backslash ,'\\',
|
||||||
|
rtfSC_bracketright ,']',
|
||||||
|
rtfSC_asciicircum ,'^',
|
||||||
|
rtfSC_underscore ,'_',
|
||||||
|
rtfSC_quoteleft ,'`',
|
||||||
|
rtfSC_alpha ,'a',
|
||||||
|
rtfSC_beta ,'b',
|
||||||
|
rtfSC_chi ,'c',
|
||||||
|
rtfSC_delta ,'d',
|
||||||
|
rtfSC_epsilon ,'e',
|
||||||
|
rtfSC_phi ,'f',
|
||||||
|
rtfSC_gamma ,'g',
|
||||||
|
rtfSC_eta ,'h',
|
||||||
|
rtfSC_iota ,'i',
|
||||||
|
rtfSC_kappa ,'k',
|
||||||
|
rtfSC_lambda ,'l',
|
||||||
|
rtfSC_mu ,'m',
|
||||||
|
rtfSC_nu ,'n',
|
||||||
|
rtfSC_omicron ,'o',
|
||||||
|
rtfSC_pi ,'p',
|
||||||
|
rtfSC_theta ,'q',
|
||||||
|
rtfSC_rho ,'r',
|
||||||
|
rtfSC_sigma ,'s',
|
||||||
|
rtfSC_tau ,'t',
|
||||||
|
rtfSC_upsilon ,'u',
|
||||||
|
rtfSC_omega ,'w',
|
||||||
|
rtfSC_xi ,'x',
|
||||||
|
rtfSC_psi ,'y',
|
||||||
|
rtfSC_zeta ,'z',
|
||||||
|
rtfSC_braceleft ,'{',
|
||||||
|
rtfSC_bar ,'|',
|
||||||
|
rtfSC_braceright ,'}',
|
||||||
|
rtfSC_mathtilde ,'~'
|
||||||
|
};
|
2726
reactos/lib/richedit/reader.c
Normal file
2726
reactos/lib/richedit/reader.c
Normal file
File diff suppressed because it is too large
Load diff
35
reactos/lib/richedit/riched32.h
Normal file
35
reactos/lib/richedit/riched32.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Ritch Edit 32 class extra info
|
||||||
|
*
|
||||||
|
* Copyright 2000 Jean-Clauyde Batista
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_RICHED32_H
|
||||||
|
#define __WINE_RICHED32_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
|
#include "winuser.h"
|
||||||
|
#include "richedit.h"
|
||||||
|
|
||||||
|
extern VOID RICHED32_Register (VOID);
|
||||||
|
extern VOID RICHED32_Unregister (VOID);
|
||||||
|
|
||||||
|
#endif /* __WINE_RICHED32_H */
|
1
reactos/lib/richedit/riched32.spec
Normal file
1
reactos/lib/richedit/riched32.spec
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2 stdcall DllGetVersion (ptr) RICHED32_DllGetVersion
|
858
reactos/lib/richedit/richedit.c
Normal file
858
reactos/lib/richedit/richedit.c
Normal file
|
@ -0,0 +1,858 @@
|
||||||
|
/*
|
||||||
|
* RichEdit32 functions
|
||||||
|
*
|
||||||
|
* This module is a simple wrapper for the edit controls.
|
||||||
|
* At the point, it is good only for application who use the RICHEDIT
|
||||||
|
* control to display RTF text.
|
||||||
|
*
|
||||||
|
* Copyright 2000 by Jean-Claude Batista
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
|
#include "wingdi.h"
|
||||||
|
#include "winreg.h"
|
||||||
|
#include "winerror.h"
|
||||||
|
#include "riched32.h"
|
||||||
|
#include "richedit.h"
|
||||||
|
#define NO_SHLWAPI_STREAM
|
||||||
|
#include "shlwapi.h"
|
||||||
|
|
||||||
|
#include "rtf.h"
|
||||||
|
#include "rtf2text.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
#define ID_EDIT 1
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(richedit);
|
||||||
|
|
||||||
|
HANDLE RICHED32_hHeap = NULL;
|
||||||
|
/* LPSTR RICHED32_aSubclass = NULL; */
|
||||||
|
static WNDPROC lpfnEditWndProc = NULL;
|
||||||
|
static INT RTFInfoOffset = 0;
|
||||||
|
|
||||||
|
#define TRACE_EDIT_MSG32(str) \
|
||||||
|
TRACE(\
|
||||||
|
"32 bit : " str ": hwnd=%p, wParam=%08x, lParam=%08x\n"\
|
||||||
|
, \
|
||||||
|
hwnd, (UINT)wParam, (UINT)lParam)
|
||||||
|
|
||||||
|
LPVOID* WINAPI CreateIRichEditOle();
|
||||||
|
VOID RICHEDIT_InitEditControlInfo(void);
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DllMain [Internal] Initializes the internal 'RICHED32.DLL'.
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* hinstDLL [I] handle to the DLL's instance
|
||||||
|
* fdwReason [I]
|
||||||
|
* lpvReserved [I] reserved, must be NULL
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: TRUE
|
||||||
|
* Failure: FALSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
|
{
|
||||||
|
TRACE("\n");
|
||||||
|
switch (fdwReason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
DisableThreadLibraryCalls(hinstDLL);
|
||||||
|
/* create private heap */
|
||||||
|
RICHED32_hHeap = HeapCreate (0, 0x10000, 0);
|
||||||
|
/* Retrieve edit control class info */
|
||||||
|
RICHEDIT_InitEditControlInfo();
|
||||||
|
/* register the Rich Edit class */
|
||||||
|
RICHED32_Register ();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
/* unregister all common control classes */
|
||||||
|
RICHED32_Unregister ();
|
||||||
|
HeapDestroy (RICHED32_hHeap);
|
||||||
|
RICHED32_hHeap = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Support routines for window procedure */
|
||||||
|
INT RICHEDIT_GetTextRange(HWND hwnd,TEXTRANGEA *tr);
|
||||||
|
INT RICHEDIT_GetSelText(HWND hwnd,LPSTR lpstrBuffer);
|
||||||
|
|
||||||
|
typedef struct _RTFControl_info
|
||||||
|
{
|
||||||
|
HWND hwndParent;
|
||||||
|
char* rtfBuffer;
|
||||||
|
RTF_Info *parser;
|
||||||
|
} RTFControl_Info;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Window procedure of the RichEdit control.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static LRESULT WINAPI RICHED32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
LONG newstyle = 0;
|
||||||
|
LONG style = 0;
|
||||||
|
RTFControl_Info *info;
|
||||||
|
CHARRANGE *cr;
|
||||||
|
|
||||||
|
info = (RTFControl_Info *) GetWindowLongW( hwnd, RTFInfoOffset );
|
||||||
|
|
||||||
|
TRACE("uMsg: 0x%x hwnd: %p\n",uMsg,hwnd);
|
||||||
|
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
|
||||||
|
case WM_CREATE:
|
||||||
|
TRACE_EDIT_MSG32("WM_CREATE Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_NCCREATE :
|
||||||
|
TRACE_EDIT_MSG32("WM_NCCREATE");
|
||||||
|
|
||||||
|
info = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||||
|
sizeof (RTFControl_Info));
|
||||||
|
info->parser = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||||
|
sizeof (RTF_Info));
|
||||||
|
SetWindowLongW( hwnd, RTFInfoOffset, (LONG)info );
|
||||||
|
|
||||||
|
/* remove SCROLLBARS from the current window style */
|
||||||
|
info->hwndParent = ((LPCREATESTRUCTA) lParam)->hwndParent;
|
||||||
|
|
||||||
|
newstyle = style = ((LPCREATESTRUCTA) lParam)->style;
|
||||||
|
newstyle &= ~WS_HSCROLL;
|
||||||
|
newstyle &= ~WS_VSCROLL;
|
||||||
|
newstyle &= ~ES_AUTOHSCROLL;
|
||||||
|
newstyle &= ~ES_AUTOVSCROLL;
|
||||||
|
SetWindowLongA(hwnd,GWL_STYLE, newstyle);
|
||||||
|
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_SETFOCUS :
|
||||||
|
TRACE_EDIT_MSG32("WM_SETFOCUS");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_SIZE :
|
||||||
|
TRACE_EDIT_MSG32("WM_SIZE");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_COMMAND :
|
||||||
|
TRACE_EDIT_MSG32("WM_COMMAND");
|
||||||
|
switch(HIWORD(wParam)) {
|
||||||
|
case EN_CHANGE:
|
||||||
|
case EN_HSCROLL:
|
||||||
|
case EN_KILLFOCUS:
|
||||||
|
case EN_SETFOCUS:
|
||||||
|
case EN_UPDATE:
|
||||||
|
case EN_VSCROLL:
|
||||||
|
return SendMessageA(info->hwndParent, WM_COMMAND,
|
||||||
|
wParam, (LPARAM)(hwnd));
|
||||||
|
|
||||||
|
case EN_ERRSPACE:
|
||||||
|
case EN_MAXTEXT:
|
||||||
|
MessageBoxA (hwnd, "RichEdit control out of space.",
|
||||||
|
"ERROR", MB_OK | MB_ICONSTOP) ;
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
case EM_STREAMIN:
|
||||||
|
TRACE_EDIT_MSG32("EM_STREAMIN");
|
||||||
|
|
||||||
|
/* setup the RTF parser */
|
||||||
|
RTFSetEditStream(info->parser,( EDITSTREAM*)lParam);
|
||||||
|
info->parser->rtfFormat = wParam&(SF_TEXT|SF_RTF);
|
||||||
|
info->parser->hwndEdit = hwnd;
|
||||||
|
WriterInit(info->parser);
|
||||||
|
RTFInit (info->parser);
|
||||||
|
BeginFile(info->parser);
|
||||||
|
|
||||||
|
/* do the parsing */
|
||||||
|
RTFRead (info->parser);
|
||||||
|
RTFFlushOutputBuffer( info->parser );
|
||||||
|
|
||||||
|
/* put the cursor at the top */
|
||||||
|
SendMessageA( hwnd, EM_SETSEL, 0, 0 );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Messages specific to Richedit controls */
|
||||||
|
|
||||||
|
case EM_AUTOURLDETECT:
|
||||||
|
TRACE_EDIT_MSG32("EM_AUTOURLDETECT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_CANPASTE:
|
||||||
|
TRACE_EDIT_MSG32("EM_CANPASTE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_CANREDO:
|
||||||
|
TRACE_EDIT_MSG32("EM_CANREDO Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_DISPLAYBAND:
|
||||||
|
TRACE_EDIT_MSG32("EM_DISPLAYBAND Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_EXGETSEL:
|
||||||
|
TRACE_EDIT_MSG32("EM_EXGETSEL -> EM_GETSEL");
|
||||||
|
cr = (VOID *) lParam;
|
||||||
|
CallWindowProcA(lpfnEditWndProc, hwnd, EM_GETSEL, (INT)&cr->cpMin, (INT)&cr->cpMax);
|
||||||
|
TRACE("cpMin: 0x%x cpMax: 0x%x\n",(INT)cr->cpMin,(INT)cr->cpMax);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_EXLIMITTEXT:
|
||||||
|
{
|
||||||
|
DWORD limit = lParam;
|
||||||
|
TRACE_EDIT_MSG32("EM_EXLIMITTEXT");
|
||||||
|
if (limit > 65534)
|
||||||
|
{
|
||||||
|
limit = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, EM_SETLIMITTEXT, limit, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
case EM_EXLINEFROMCHAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_EXLINEFROMCHAR -> LINEFROMCHAR");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, EM_LINEFROMCHAR, lParam, wParam);
|
||||||
|
|
||||||
|
case EM_EXSETSEL:
|
||||||
|
TRACE_EDIT_MSG32("EM_EXSETSEL -> EM_SETSEL");
|
||||||
|
cr = (VOID *) lParam;
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, EM_SETSEL, cr->cpMin, cr->cpMax);
|
||||||
|
|
||||||
|
case EM_FINDTEXT:
|
||||||
|
TRACE_EDIT_MSG32("EM_FINDTEXT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_FINDTEXTEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_FINDTEXTEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_FINDTEXTEXW:
|
||||||
|
TRACE_EDIT_MSG32("EM_FINDTEXTEXW Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_FINDTEXTW:
|
||||||
|
TRACE_EDIT_MSG32("EM_FINDTEXTW Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_FINDWORDBREAK:
|
||||||
|
TRACE_EDIT_MSG32("EM_FINDWORDBREAK Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_FORMATRANGE:
|
||||||
|
TRACE_EDIT_MSG32("EM_FORMATRANGE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETAUTOURLDETECT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETAUTOURLDETECT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETBIDIOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETBIDIOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETCHARFORMAT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETCHARFORMAT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETEDITSTYLE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETEDITSTYLE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETEVENTMASK:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETEVENTMASK Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETIMECOLOR:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETIMECOLOR Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETIMECOMPMODE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETIMECOMPMODE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETIMEOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETIMEOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETLANGOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("STUB: EM_GETLANGOPTIONS");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETOLEINTERFACE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETOLEINTERFACE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETPARAFORMAT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETPARAFORMAT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETPUNCTUATION:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETPUNCTUATION Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETREDONAME:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETREDONAME Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETSCROLLPOS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETSCROLLPOS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETSELTEXT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETSELTEXT");
|
||||||
|
return RICHEDIT_GetSelText(hwnd,(void *)lParam);
|
||||||
|
|
||||||
|
case EM_GETTEXTEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTEXTEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETTEXTLENGTHEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTEXTLENGTHEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETTEXTMODE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTEXTMODE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETTEXTRANGE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTEXTRANGE");
|
||||||
|
return RICHEDIT_GetTextRange(hwnd,(TEXTRANGEA *)lParam);
|
||||||
|
|
||||||
|
case EM_GETTYPOGRAPHYOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTYPOGRAPHYOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETUNDONAME:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETUNDONAME Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETWORDBREAKPROCEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETWORDBREAKPROCEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETWORDWRAPMODE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETWORDWRAPMODE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_GETZOOM:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETZOOM Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_HIDESELECTION:
|
||||||
|
TRACE_EDIT_MSG32("EM_HIDESELECTION Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_PASTESPECIAL:
|
||||||
|
TRACE_EDIT_MSG32("EM_PASTESPECIAL Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_RECONVERSION:
|
||||||
|
TRACE_EDIT_MSG32("EM_RECONVERSION Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_REDO:
|
||||||
|
TRACE_EDIT_MSG32("EM_REDO Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_REQUESTRESIZE:
|
||||||
|
TRACE_EDIT_MSG32("EM_REQUESTRESIZE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SELECTIONTYPE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SELECTIONTYPE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETBIDIOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETBIDIOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETBKGNDCOLOR:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETBKGNDCOLOR Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETCHARFORMAT:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETCHARFORMAT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETEDITSTYLE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETEDITSTYLE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETEVENTMASK:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETEVENTMASK Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETFONTSIZE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETFONTSIZE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETIMECOLOR:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETIMECOLO Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETIMEOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETIMEOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETLANGOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETLANGOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETOLECALLBACK:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETOLECALLBACK Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETPALETTE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETPALETTE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETPARAFORMAT:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETPARAFORMAT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETPUNCTUATION:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETPUNCTUATION Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETSCROLLPOS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETSCROLLPOS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETTARGETDEVICE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETTARGETDEVICE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETTEXTEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETTEXTEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETTEXTMODE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETTEXTMODE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETTYPOGRAPHYOPTIONS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETTYPOGRAPHYOPTIONS Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETUNDOLIMIT:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETUNDOLIMIT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETWORDBREAKPROCEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETWORDBREAKPROCEX Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETWORDWRAPMODE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETWORDWRAPMODE Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SETZOOM:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETZOOM Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_SHOWSCROLLBAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_SHOWSCROLLBAR Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_STOPGROUPTYPING:
|
||||||
|
TRACE_EDIT_MSG32("EM_STOPGROUPTYPING Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case EM_STREAMOUT:
|
||||||
|
TRACE_EDIT_MSG32("EM_STREAMOUT Ignored");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Messages dispatched to the edit control */
|
||||||
|
case EM_CANUNDO:
|
||||||
|
TRACE_EDIT_MSG32("EM_CANUNDO Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_CHARFROMPOS:
|
||||||
|
TRACE_EDIT_MSG32("EM_CHARFROMPOS Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_EMPTYUNDOBUFFER:
|
||||||
|
TRACE_EDIT_MSG32("EM_EMPTYUNDOBUFFER Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_FMTLINES:
|
||||||
|
TRACE_EDIT_MSG32("EM_FMTLINES Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETFIRSTVISIBLELINE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETFIRSTVISIBLELINE Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETHANDLE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETHANDLE Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
/* case EM_GETIMESTATUS:*/
|
||||||
|
case EM_GETLIMITTEXT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETLIMITTEXT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETLINE:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETLINE Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETLINECOUNT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETLINECOUNT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETMARGINS:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETMARGINS Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETMODIFY:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETMODIFY Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETPASSWORDCHAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETPASSWORDCHAR Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETRECT:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETRECT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETSEL:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETSEL Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETTHUMB:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETTHUMB Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_GETWORDBREAKPROC:
|
||||||
|
TRACE_EDIT_MSG32("EM_GETWORDBREAKPROC Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_LINEFROMCHAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_LINEFROMCHAR Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_LINEINDEX:
|
||||||
|
TRACE_EDIT_MSG32("EM_LINEINDEX Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_LINELENGTH:
|
||||||
|
TRACE_EDIT_MSG32("EM_LINELENGTH Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_LINESCROLL:
|
||||||
|
TRACE_EDIT_MSG32("EM_LINESCROLL Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_POSFROMCHAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_POSFROMCHAR Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_REPLACESEL:
|
||||||
|
TRACE_EDIT_MSG32("case EM_REPLACESEL Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SCROLL:
|
||||||
|
TRACE_EDIT_MSG32("case EM_SCROLL Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SCROLLCARET:
|
||||||
|
case WM_USER+49: /* EM_SCROLLCARET too */
|
||||||
|
TRACE_EDIT_MSG32("EM_SCROLLCARET Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, EM_SCROLLCARET, wParam, lParam);
|
||||||
|
case EM_SETHANDLE:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETHANDLE Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
/* case EM_SETIMESTATUS:*/
|
||||||
|
case EM_SETLIMITTEXT:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETLIMITTEXT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETMARGINS:
|
||||||
|
TRACE_EDIT_MSG32("case EM_SETMARGINS Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETMODIFY:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETMODIFY Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETPASSWORDCHAR:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETPASSWORDCHAR Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETREADONLY:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETREADONLY Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETRECT:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETRECT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETRECTNP:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETRECTNP Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETSEL:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETSEL Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETTABSTOPS:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETTABSTOPS Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_SETWORDBREAKPROC:
|
||||||
|
TRACE_EDIT_MSG32("EM_SETWORDBREAKPROC Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case EM_UNDO:
|
||||||
|
TRACE_EDIT_MSG32("EM_UNDO Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_STYLECHANGING:
|
||||||
|
TRACE_EDIT_MSG32("WM_STYLECHANGING Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_STYLECHANGED:
|
||||||
|
TRACE_EDIT_MSG32("WM_STYLECHANGED Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_GETTEXT:
|
||||||
|
TRACE_EDIT_MSG32("WM_GETTEXT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_GETTEXTLENGTH:
|
||||||
|
TRACE_EDIT_MSG32("WM_GETTEXTLENGTH Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_SETTEXT:
|
||||||
|
TRACE_EDIT_MSG32("WM_SETTEXT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_CUT:
|
||||||
|
TRACE_EDIT_MSG32("WM_CUT Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_COPY:
|
||||||
|
TRACE_EDIT_MSG32("WM_COPY Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_PASTE:
|
||||||
|
TRACE_EDIT_MSG32("WM_PASTE Passed to edit control");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
/* Messages passed to default handler. */
|
||||||
|
case WM_NCCALCSIZE:
|
||||||
|
TRACE_EDIT_MSG32("WM_NCCALCSIZE Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_NCPAINT:
|
||||||
|
TRACE_EDIT_MSG32("WM_NCPAINT Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_PAINT:
|
||||||
|
TRACE_EDIT_MSG32("WM_PAINT Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_ERASEBKGND:
|
||||||
|
TRACE_EDIT_MSG32("WM_ERASEBKGND Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_KILLFOCUS:
|
||||||
|
TRACE_EDIT_MSG32("WM_KILLFOCUS Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_DESTROY:
|
||||||
|
TRACE_EDIT_MSG32("WM_DESTROY Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_CHILDACTIVATE:
|
||||||
|
TRACE_EDIT_MSG32("WM_CHILDACTIVATE Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_WINDOWPOSCHANGING:
|
||||||
|
TRACE_EDIT_MSG32("WM_WINDOWPOSCHANGING Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_WINDOWPOSCHANGED:
|
||||||
|
TRACE_EDIT_MSG32("WM_WINDOWPOSCHANGED Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
/* case WM_INITIALUPDATE:
|
||||||
|
TRACE_EDIT_MSG32("WM_INITIALUPDATE Passed to default");
|
||||||
|
return DefWindowProcA( hwnd,uMsg,wParam,lParam); */
|
||||||
|
case WM_CTLCOLOREDIT:
|
||||||
|
TRACE_EDIT_MSG32("WM_CTLCOLOREDIT Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_SETCURSOR:
|
||||||
|
TRACE_EDIT_MSG32("WM_SETCURSOR Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_MOVE:
|
||||||
|
TRACE_EDIT_MSG32("WM_MOVE Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_SHOWWINDOW:
|
||||||
|
TRACE_EDIT_MSG32("WM_SHOWWINDOW Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_PARENTNOTIFY:
|
||||||
|
TRACE_EDIT_MSG32("WM_PARENTNOTIFY Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_SETREDRAW:
|
||||||
|
TRACE_EDIT_MSG32("WM_SETREDRAW Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_NCDESTROY:
|
||||||
|
{
|
||||||
|
TRACE_EDIT_MSG32("WM_NCDESTROY Passed to default");
|
||||||
|
HeapFree( GetProcessHeap(), 0, info->parser );
|
||||||
|
HeapFree( GetProcessHeap(), 0, info );
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_NCHITTEST:
|
||||||
|
TRACE_EDIT_MSG32("WM_NCHITTEST Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_CTLCOLORSTATIC:
|
||||||
|
TRACE_EDIT_MSG32("WM_CTLCOLORSTATIC Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_NCMOUSEMOVE:
|
||||||
|
TRACE_EDIT_MSG32("WM_NCMOUSEMOVE Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_CLEAR:
|
||||||
|
TRACE_EDIT_MSG32("WM_CLEAR Passed to default");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
/*
|
||||||
|
* used by IE in the EULA box
|
||||||
|
*/
|
||||||
|
case WM_ALTTABACTIVE:
|
||||||
|
TRACE_EDIT_MSG32("WM_ALTTABACTIVE");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_GETDLGCODE:
|
||||||
|
TRACE_EDIT_MSG32("WM_GETDLGCODE");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
case WM_SETFONT:
|
||||||
|
TRACE_EDIT_MSG32("WM_SETFONT");
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((uMsg >= WM_USER) && (uMsg < WM_APP)) {
|
||||||
|
FIXME("Unknown message 0x%x Passed to default hwnd=%p, wParam=%08x, lParam=%08x\n",
|
||||||
|
uMsg, hwnd, (UINT)wParam, (UINT)lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CallWindowProcA(lpfnEditWndProc, hwnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DllGetVersion [RICHED32.2]
|
||||||
|
*
|
||||||
|
* Retrieves version information of the 'RICHED32.DLL'
|
||||||
|
*
|
||||||
|
* PARAMS
|
||||||
|
* pdvi [O] pointer to version information structure.
|
||||||
|
*
|
||||||
|
* RETURNS
|
||||||
|
* Success: S_OK
|
||||||
|
* Failure: E_INVALIDARG
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
* Returns version of a comctl32.dll from IE4.01 SP1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
HRESULT WINAPI
|
||||||
|
RICHED32_DllGetVersion (DLLVERSIONINFO *pdvi)
|
||||||
|
{
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
if (pdvi->cbSize != sizeof(DLLVERSIONINFO)) {
|
||||||
|
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdvi->dwMajorVersion = 4;
|
||||||
|
pdvi->dwMinorVersion = 0;
|
||||||
|
pdvi->dwBuildNumber = 0;
|
||||||
|
pdvi->dwPlatformID = 0;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Registers the window class.
|
||||||
|
*
|
||||||
|
* PARAMETER(S):
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* RETURN:
|
||||||
|
* None
|
||||||
|
*/
|
||||||
|
VOID RICHED32_Register(void)
|
||||||
|
{
|
||||||
|
WNDCLASSA wndClass;
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
ZeroMemory(&wndClass, sizeof(WNDCLASSA));
|
||||||
|
wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
|
||||||
|
wndClass.lpfnWndProc = (WNDPROC)RICHED32_WindowProc;
|
||||||
|
wndClass.cbClsExtra = 0;
|
||||||
|
wndClass.cbWndExtra = RTFInfoOffset + sizeof(RTFControl_Info*);
|
||||||
|
wndClass.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
|
||||||
|
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
||||||
|
wndClass.lpszClassName = RICHEDIT_CLASS10A; /* WC_RICHED32A; */
|
||||||
|
|
||||||
|
RegisterClassA (&wndClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Unregisters the window class.
|
||||||
|
*
|
||||||
|
* PARAMETER(S):
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* RETURN:
|
||||||
|
* None
|
||||||
|
*/
|
||||||
|
VOID RICHED32_Unregister(void)
|
||||||
|
{
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
UnregisterClassA(RICHEDIT_CLASS10A, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Initialize edit control class info
|
||||||
|
*/
|
||||||
|
VOID RICHEDIT_InitEditControlInfo(void)
|
||||||
|
{
|
||||||
|
WNDCLASSA wcEdit;
|
||||||
|
|
||||||
|
if (GetClassInfoA(0, "edit", &wcEdit))
|
||||||
|
{
|
||||||
|
lpfnEditWndProc = wcEdit.lpfnWndProc;
|
||||||
|
RTFInfoOffset = wcEdit.cbWndExtra;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ERR("Failed to retrieve edit control class info\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT RICHEDIT_GetTextRange(HWND hwnd,TEXTRANGEA *tr)
|
||||||
|
{
|
||||||
|
UINT alloc_size, text_size, range_size;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
TRACE("start: 0x%x stop: 0x%x\n",(INT)tr->chrg.cpMin,(INT)tr->chrg.cpMax);
|
||||||
|
|
||||||
|
if (!(alloc_size = SendMessageA(hwnd,WM_GETTEXTLENGTH,0,0))) return FALSE;
|
||||||
|
if (!(text = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (alloc_size+1))))
|
||||||
|
return FALSE;
|
||||||
|
text_size = SendMessageA(hwnd,WM_GETTEXT,alloc_size,(INT)text);
|
||||||
|
|
||||||
|
if (text_size > tr->chrg.cpMin)
|
||||||
|
{
|
||||||
|
range_size = (text_size> tr->chrg.cpMax) ? (tr->chrg.cpMax - tr->chrg.cpMin) : (text_size - tr->chrg.cpMin);
|
||||||
|
TRACE("EditText: %.30s ...\n",text+tr->chrg.cpMin);
|
||||||
|
memcpy(tr->lpstrText,text+tr->chrg.cpMin,range_size);
|
||||||
|
}
|
||||||
|
else range_size = 0;
|
||||||
|
HeapFree(GetProcessHeap(), 0, text);
|
||||||
|
|
||||||
|
return range_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT RICHEDIT_GetSelText(HWND hwnd,LPSTR lpstrBuffer)
|
||||||
|
{
|
||||||
|
TEXTRANGEA textrange;
|
||||||
|
|
||||||
|
textrange.lpstrText = lpstrBuffer;
|
||||||
|
SendMessageA(hwnd,EM_GETSEL,(INT)&textrange.chrg.cpMin,(INT)&textrange.chrg.cpMax);
|
||||||
|
return RICHEDIT_GetTextRange(hwnd,&textrange);
|
||||||
|
}
|
1568
reactos/lib/richedit/rtf.h
Normal file
1568
reactos/lib/richedit/rtf.h
Normal file
File diff suppressed because it is too large
Load diff
2
reactos/lib/richedit/rtf2text.h
Normal file
2
reactos/lib/richedit/rtf2text.h
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
void WriterInit ();
|
||||||
|
int BeginFile ();
|
356
reactos/lib/richedit/stdcharnames.h
Normal file
356
reactos/lib/richedit/stdcharnames.h
Normal file
|
@ -0,0 +1,356 @@
|
||||||
|
static char *stdCharName[] =
|
||||||
|
{
|
||||||
|
"nothing",
|
||||||
|
"space",
|
||||||
|
"exclam",
|
||||||
|
"quotedbl",
|
||||||
|
"numbersign",
|
||||||
|
"dollar",
|
||||||
|
"percent",
|
||||||
|
"ampersand",
|
||||||
|
"quoteright",
|
||||||
|
"parenleft",
|
||||||
|
"parenright",
|
||||||
|
"asterisk",
|
||||||
|
"plus",
|
||||||
|
"comma",
|
||||||
|
"hyphen",
|
||||||
|
"period",
|
||||||
|
"slash",
|
||||||
|
"zero",
|
||||||
|
"one",
|
||||||
|
"two",
|
||||||
|
"three",
|
||||||
|
"four",
|
||||||
|
"five",
|
||||||
|
"six",
|
||||||
|
"seven",
|
||||||
|
"eight",
|
||||||
|
"nine",
|
||||||
|
"colon",
|
||||||
|
"semicolon",
|
||||||
|
"less",
|
||||||
|
"equal",
|
||||||
|
"greater",
|
||||||
|
"question",
|
||||||
|
"at",
|
||||||
|
"A",
|
||||||
|
"B",
|
||||||
|
"C",
|
||||||
|
"D",
|
||||||
|
"E",
|
||||||
|
"F",
|
||||||
|
"G",
|
||||||
|
"H",
|
||||||
|
"I",
|
||||||
|
"J",
|
||||||
|
"K",
|
||||||
|
"L",
|
||||||
|
"M",
|
||||||
|
"N",
|
||||||
|
"O",
|
||||||
|
"P",
|
||||||
|
"Q",
|
||||||
|
"R",
|
||||||
|
"S",
|
||||||
|
"T",
|
||||||
|
"U",
|
||||||
|
"V",
|
||||||
|
"W",
|
||||||
|
"X",
|
||||||
|
"Y",
|
||||||
|
"Z",
|
||||||
|
"bracketleft",
|
||||||
|
"backslash",
|
||||||
|
"bracketright",
|
||||||
|
"asciicircum",
|
||||||
|
"underscore",
|
||||||
|
"quoteleft",
|
||||||
|
"a",
|
||||||
|
"b",
|
||||||
|
"c",
|
||||||
|
"d",
|
||||||
|
"e",
|
||||||
|
"f",
|
||||||
|
"g",
|
||||||
|
"h",
|
||||||
|
"i",
|
||||||
|
"j",
|
||||||
|
"k",
|
||||||
|
"l",
|
||||||
|
"m",
|
||||||
|
"n",
|
||||||
|
"o",
|
||||||
|
"p",
|
||||||
|
"q",
|
||||||
|
"r",
|
||||||
|
"s",
|
||||||
|
"t",
|
||||||
|
"u",
|
||||||
|
"v",
|
||||||
|
"w",
|
||||||
|
"x",
|
||||||
|
"y",
|
||||||
|
"z",
|
||||||
|
"braceleft",
|
||||||
|
"bar",
|
||||||
|
"braceright",
|
||||||
|
"asciitilde",
|
||||||
|
"exclamdown",
|
||||||
|
"cent",
|
||||||
|
"sterling",
|
||||||
|
"fraction",
|
||||||
|
"yen",
|
||||||
|
"florin",
|
||||||
|
"section",
|
||||||
|
"currency",
|
||||||
|
"quotedblleft",
|
||||||
|
"guillemotleft",
|
||||||
|
"guilsinglleft",
|
||||||
|
"guilsinglright",
|
||||||
|
"fi",
|
||||||
|
"fl",
|
||||||
|
"endash",
|
||||||
|
"dagger",
|
||||||
|
"daggerdbl",
|
||||||
|
"periodcentered",
|
||||||
|
"paragraph",
|
||||||
|
"bullet",
|
||||||
|
"quotesinglbase",
|
||||||
|
"quotedblbase",
|
||||||
|
"quotedblright",
|
||||||
|
"guillemotright",
|
||||||
|
"ellipsis",
|
||||||
|
"perthousand",
|
||||||
|
"questiondown",
|
||||||
|
"grave",
|
||||||
|
"acute",
|
||||||
|
"circumflex",
|
||||||
|
"tilde",
|
||||||
|
"macron",
|
||||||
|
"breve",
|
||||||
|
"dotaccent",
|
||||||
|
"dieresis",
|
||||||
|
"ring",
|
||||||
|
"cedilla",
|
||||||
|
"hungarumlaut",
|
||||||
|
"ogonek",
|
||||||
|
"caron",
|
||||||
|
"emdash",
|
||||||
|
"AE",
|
||||||
|
"ordfeminine",
|
||||||
|
"Lslash",
|
||||||
|
"Oslash",
|
||||||
|
"OE",
|
||||||
|
"ordmasculine",
|
||||||
|
"ae",
|
||||||
|
"dotlessi",
|
||||||
|
"lslash",
|
||||||
|
"oslash",
|
||||||
|
"oe",
|
||||||
|
"germandbls",
|
||||||
|
"Aacute",
|
||||||
|
"Acircumflex",
|
||||||
|
"Adieresis",
|
||||||
|
"Agrave",
|
||||||
|
"Aring",
|
||||||
|
"Atilde",
|
||||||
|
"Ccedilla",
|
||||||
|
"Eacute",
|
||||||
|
"Ecircumflex",
|
||||||
|
"Edieresis",
|
||||||
|
"Egrave",
|
||||||
|
"Eth",
|
||||||
|
"Iacute",
|
||||||
|
"Icircumflex",
|
||||||
|
"Idieresis",
|
||||||
|
"Igrave",
|
||||||
|
"Ntilde",
|
||||||
|
"Oacute",
|
||||||
|
"Ocircumflex",
|
||||||
|
"Odieresis",
|
||||||
|
"Ograve",
|
||||||
|
"Otilde",
|
||||||
|
"Scaron",
|
||||||
|
"Thorn",
|
||||||
|
"Uacute",
|
||||||
|
"Ucircumflex",
|
||||||
|
"Udieresis",
|
||||||
|
"Ugrave",
|
||||||
|
"Yacute",
|
||||||
|
"Ydieresis",
|
||||||
|
"aacute",
|
||||||
|
"acircumflex",
|
||||||
|
"adieresis",
|
||||||
|
"agrave",
|
||||||
|
"aring",
|
||||||
|
"atilde",
|
||||||
|
"brokenbar",
|
||||||
|
"ccedilla",
|
||||||
|
"copyright",
|
||||||
|
"degree",
|
||||||
|
"divide",
|
||||||
|
"eacute",
|
||||||
|
"ecircumflex",
|
||||||
|
"edieresis",
|
||||||
|
"egrave",
|
||||||
|
"eth",
|
||||||
|
"iacute",
|
||||||
|
"icircumflex",
|
||||||
|
"idieresis",
|
||||||
|
"igrave",
|
||||||
|
"logicalnot",
|
||||||
|
"minus",
|
||||||
|
"multiply",
|
||||||
|
"ntilde",
|
||||||
|
"oacute",
|
||||||
|
"ocircumflex",
|
||||||
|
"odieresis",
|
||||||
|
"ograve",
|
||||||
|
"onehalf",
|
||||||
|
"onequarter",
|
||||||
|
"onesuperior",
|
||||||
|
"otilde",
|
||||||
|
"plusminus",
|
||||||
|
"registered",
|
||||||
|
"thorn",
|
||||||
|
"threequarters",
|
||||||
|
"threesuperior",
|
||||||
|
"trademark",
|
||||||
|
"twosuperior",
|
||||||
|
"uacute",
|
||||||
|
"ucircumflex",
|
||||||
|
"udieresis",
|
||||||
|
"ugrave",
|
||||||
|
"yacute",
|
||||||
|
"ydieresis",
|
||||||
|
"Alpha",
|
||||||
|
"Beta",
|
||||||
|
"Chi",
|
||||||
|
"Delta",
|
||||||
|
"Epsilon",
|
||||||
|
"Phi",
|
||||||
|
"Gamma",
|
||||||
|
"Eta",
|
||||||
|
"Iota",
|
||||||
|
"Kappa",
|
||||||
|
"Lambda",
|
||||||
|
"Mu",
|
||||||
|
"Nu",
|
||||||
|
"Omicron",
|
||||||
|
"Pi",
|
||||||
|
"Theta",
|
||||||
|
"Rho",
|
||||||
|
"Sigma",
|
||||||
|
"Tau",
|
||||||
|
"Upsilon",
|
||||||
|
"varUpsilon",
|
||||||
|
"Omega",
|
||||||
|
"Xi",
|
||||||
|
"Psi",
|
||||||
|
"Zeta",
|
||||||
|
"alpha",
|
||||||
|
"beta",
|
||||||
|
"chi",
|
||||||
|
"delta",
|
||||||
|
"epsilon",
|
||||||
|
"phi",
|
||||||
|
"varphi",
|
||||||
|
"gamma",
|
||||||
|
"eta",
|
||||||
|
"iota",
|
||||||
|
"kappa",
|
||||||
|
"lambda",
|
||||||
|
"mu",
|
||||||
|
"nu",
|
||||||
|
"omicron",
|
||||||
|
"pi",
|
||||||
|
"varpi",
|
||||||
|
"theta",
|
||||||
|
"vartheta",
|
||||||
|
"rho",
|
||||||
|
"sigma",
|
||||||
|
"varsigma",
|
||||||
|
"tau",
|
||||||
|
"upsilon",
|
||||||
|
"omega",
|
||||||
|
"xi",
|
||||||
|
"psi",
|
||||||
|
"zeta",
|
||||||
|
"nobrkspace",
|
||||||
|
"nobrkhyphen",
|
||||||
|
"lessequal",
|
||||||
|
"greaterequal",
|
||||||
|
"infinity",
|
||||||
|
"integral",
|
||||||
|
"notequal",
|
||||||
|
"radical",
|
||||||
|
"radicalex",
|
||||||
|
"approxequal",
|
||||||
|
"apple",
|
||||||
|
"partialdiff",
|
||||||
|
"opthyphen",
|
||||||
|
"formula",
|
||||||
|
"lozenge",
|
||||||
|
"universal",
|
||||||
|
"existential",
|
||||||
|
"suchthat",
|
||||||
|
"congruent",
|
||||||
|
"therefore",
|
||||||
|
"perpendicular",
|
||||||
|
"minute",
|
||||||
|
"club",
|
||||||
|
"diamond",
|
||||||
|
"heart",
|
||||||
|
"spade",
|
||||||
|
"arrowboth",
|
||||||
|
"arrowleft",
|
||||||
|
"arrowup",
|
||||||
|
"arrowright",
|
||||||
|
"arrowdown",
|
||||||
|
"second",
|
||||||
|
"proportional",
|
||||||
|
"equivalence",
|
||||||
|
"arrowvertex",
|
||||||
|
"arrowhorizex",
|
||||||
|
"carriagereturn",
|
||||||
|
"aleph",
|
||||||
|
"Ifraktur",
|
||||||
|
"Rfraktur",
|
||||||
|
"weierstrass",
|
||||||
|
"circlemultiply",
|
||||||
|
"circleplus",
|
||||||
|
"emptyset",
|
||||||
|
"intersection",
|
||||||
|
"union",
|
||||||
|
"propersuperset",
|
||||||
|
"reflexsuperset",
|
||||||
|
"notsubset",
|
||||||
|
"propersubset",
|
||||||
|
"reflexsubset",
|
||||||
|
"element",
|
||||||
|
"notelement",
|
||||||
|
"angle",
|
||||||
|
"gradient",
|
||||||
|
"product",
|
||||||
|
"logicaland",
|
||||||
|
"logicalor",
|
||||||
|
"arrowdblboth",
|
||||||
|
"arrowdblleft",
|
||||||
|
"arrowdblup",
|
||||||
|
"arrowdblright",
|
||||||
|
"arrowdbldown",
|
||||||
|
"angleleft",
|
||||||
|
"registersans",
|
||||||
|
"copyrightsans",
|
||||||
|
"trademarksans",
|
||||||
|
"angleright",
|
||||||
|
"mathplus",
|
||||||
|
"mathminus",
|
||||||
|
"mathasterisk",
|
||||||
|
"mathnumbersign",
|
||||||
|
"dotmath",
|
||||||
|
"mathequal",
|
||||||
|
"mathtilde",
|
||||||
|
(char *) NULL
|
||||||
|
};
|
269
reactos/lib/richedit/text-writer.c
Normal file
269
reactos/lib/richedit/text-writer.c
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
/*
|
||||||
|
* text-writer -- RTF-to-text translation writer code.
|
||||||
|
*
|
||||||
|
* Read RTF input, write text of document (text extraction).
|
||||||
|
*
|
||||||
|
* Wrapper must call WriterInit() once before processing any files,
|
||||||
|
* then set up input and call BeginFile() for each input file.
|
||||||
|
*
|
||||||
|
* This installs callbacks for the text and control token classes.
|
||||||
|
* The control class is necessary so that special characters such as
|
||||||
|
* \par, \tab, \sect, etc. can be converted.
|
||||||
|
*
|
||||||
|
* It's problematic what to do with text in headers and footers, and
|
||||||
|
* what to do about tables.
|
||||||
|
*
|
||||||
|
* This really is quite a stupid program, for instance, it could keep
|
||||||
|
* track of the current leader character and dump that out when a tab
|
||||||
|
* is encountered.
|
||||||
|
*
|
||||||
|
* 04 Feb 91 Paul DuBois dubois@primate.wisc.edu
|
||||||
|
*
|
||||||
|
* This software may be redistributed without restriction and used for
|
||||||
|
* any purpose whatsoever.
|
||||||
|
*
|
||||||
|
* 04 Feb 91
|
||||||
|
* -Created.
|
||||||
|
* 27 Feb 91
|
||||||
|
* - Updated for distribution 1.05.
|
||||||
|
* 13 Jul 93
|
||||||
|
* - Updated to compile under THINK C 6.0.
|
||||||
|
* 31 Aug 93
|
||||||
|
* - Added Mike Sendall's entries for Macintosh char map.
|
||||||
|
* 07 Sep 93
|
||||||
|
* - Uses charset map and output sequence map for character translation.
|
||||||
|
* 11 Mar 94
|
||||||
|
* - Updated for 1.10 distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "rtf.h"
|
||||||
|
#include "rtf2text.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(richedit);
|
||||||
|
|
||||||
|
static void TextClass (RTF_Info *info);
|
||||||
|
static void ControlClass (RTF_Info *info);
|
||||||
|
static void Destination (RTF_Info *info);
|
||||||
|
static void SpecialChar (RTF_Info *info);
|
||||||
|
static void PutStdChar (RTF_Info *info, int stdCode);
|
||||||
|
static void PutLitChar (RTF_Info *info, int c);
|
||||||
|
static void PutLitStr (RTF_Info *info, char *s);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the writer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
WriterInit (RTF_Info *info )
|
||||||
|
{
|
||||||
|
RTFReadOutputMap (info, info->outMap,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
BeginFile (RTF_Info *info )
|
||||||
|
{
|
||||||
|
/* install class callbacks */
|
||||||
|
|
||||||
|
RTFSetClassCallback (info, rtfText, TextClass);
|
||||||
|
RTFSetClassCallback (info, rtfControl, ControlClass);
|
||||||
|
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write out a character. rtfMajor contains the input character, rtfMinor
|
||||||
|
* contains the corresponding standard character code.
|
||||||
|
*
|
||||||
|
* If the input character isn't in the charset map, try to print some
|
||||||
|
* representation of it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
TextClass (RTF_Info *info)
|
||||||
|
{
|
||||||
|
char buf[rtfBufSiz];
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
if (info->rtfFormat == SF_TEXT)
|
||||||
|
PutLitChar (info, info->rtfMajor);
|
||||||
|
else if (info->rtfMinor != rtfSC_nothing)
|
||||||
|
PutStdChar (info, info->rtfMinor);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (info->rtfMajor < 128) /* in ASCII range */
|
||||||
|
sprintf (buf, "[[%c]]", info->rtfMajor);
|
||||||
|
else
|
||||||
|
sprintf (buf, "[[\\'%02x]]", info->rtfMajor);
|
||||||
|
PutLitStr (info, buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
ControlClass (RTF_Info *info)
|
||||||
|
{
|
||||||
|
TRACE("\n");
|
||||||
|
switch (info->rtfMajor)
|
||||||
|
{
|
||||||
|
case rtfDestination:
|
||||||
|
Destination (info);
|
||||||
|
break;
|
||||||
|
case rtfSpecialChar:
|
||||||
|
SpecialChar (info);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function notices destinations that should be ignored
|
||||||
|
* and skips to their ends. This keeps, for instance, picture
|
||||||
|
* data from being considered as plain text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
Destination (RTF_Info *info)
|
||||||
|
{
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
switch (info->rtfMinor)
|
||||||
|
{
|
||||||
|
case rtfPict:
|
||||||
|
case rtfFNContSep:
|
||||||
|
case rtfFNContNotice:
|
||||||
|
case rtfInfo:
|
||||||
|
case rtfIndexRange:
|
||||||
|
case rtfITitle:
|
||||||
|
case rtfISubject:
|
||||||
|
case rtfIAuthor:
|
||||||
|
case rtfIOperator:
|
||||||
|
case rtfIKeywords:
|
||||||
|
case rtfIComment:
|
||||||
|
case rtfIVersion:
|
||||||
|
case rtfIDoccomm:
|
||||||
|
RTFSkipGroup (info);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The reason these use the rtfSC_xxx thingies instead of just writing
|
||||||
|
* out ' ', '-', '"', etc., is so that the mapping for these characters
|
||||||
|
* can be controlled by the text-map file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void SpecialChar (RTF_Info *info)
|
||||||
|
{
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
switch (info->rtfMinor)
|
||||||
|
{
|
||||||
|
case rtfPage:
|
||||||
|
case rtfSect:
|
||||||
|
case rtfRow:
|
||||||
|
case rtfLine:
|
||||||
|
case rtfPar:
|
||||||
|
PutLitChar (info, '\n');
|
||||||
|
break;
|
||||||
|
case rtfCell:
|
||||||
|
PutStdChar (info, rtfSC_space); /* make sure cells are separated */
|
||||||
|
break;
|
||||||
|
case rtfNoBrkSpace:
|
||||||
|
PutStdChar (info, rtfSC_nobrkspace);
|
||||||
|
break;
|
||||||
|
case rtfTab:
|
||||||
|
PutLitChar (info, '\t');
|
||||||
|
break;
|
||||||
|
case rtfNoBrkHyphen:
|
||||||
|
PutStdChar (info, rtfSC_nobrkhyphen);
|
||||||
|
break;
|
||||||
|
case rtfBullet:
|
||||||
|
PutStdChar (info, rtfSC_bullet);
|
||||||
|
break;
|
||||||
|
case rtfEmDash:
|
||||||
|
PutStdChar (info, rtfSC_emdash);
|
||||||
|
break;
|
||||||
|
case rtfEnDash:
|
||||||
|
PutStdChar (info, rtfSC_endash);
|
||||||
|
break;
|
||||||
|
case rtfLQuote:
|
||||||
|
PutStdChar (info, rtfSC_quoteleft);
|
||||||
|
break;
|
||||||
|
case rtfRQuote:
|
||||||
|
PutStdChar (info, rtfSC_quoteright);
|
||||||
|
break;
|
||||||
|
case rtfLDblQuote:
|
||||||
|
PutStdChar (info, rtfSC_quotedblleft);
|
||||||
|
break;
|
||||||
|
case rtfRDblQuote:
|
||||||
|
PutStdChar (info, rtfSC_quotedblright);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Eventually this should keep track of the destination of the
|
||||||
|
* current state and only write text when in the initial state.
|
||||||
|
*
|
||||||
|
* If the output sequence is unspecified in the output map, write
|
||||||
|
* the character's standard name instead. This makes map deficiencies
|
||||||
|
* obvious and provides incentive to fix it. :-)
|
||||||
|
*/
|
||||||
|
|
||||||
|
void PutStdChar (RTF_Info *info, int stdCode)
|
||||||
|
{
|
||||||
|
|
||||||
|
char *oStr = (char *) NULL;
|
||||||
|
char buf[rtfBufSiz];
|
||||||
|
|
||||||
|
/* if (stdCode == rtfSC_nothing)
|
||||||
|
RTFPanic ("Unknown character code, logic error\n");
|
||||||
|
*/
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
oStr = info->outMap[stdCode];
|
||||||
|
if (oStr == (char *) NULL) /* no output sequence in map */
|
||||||
|
{
|
||||||
|
sprintf (buf, "[[%s]]", RTFStdCharName (info, stdCode));
|
||||||
|
oStr = buf;
|
||||||
|
}
|
||||||
|
PutLitStr (info, oStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PutLitChar (RTF_Info *info, int c)
|
||||||
|
{
|
||||||
|
if( info->dwOutputCount >= ( sizeof info->OutputBuffer - 1 ) )
|
||||||
|
RTFFlushOutputBuffer( info );
|
||||||
|
info->OutputBuffer[info->dwOutputCount++] = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RTFFlushOutputBuffer( RTF_Info *info )
|
||||||
|
{
|
||||||
|
info->OutputBuffer[info->dwOutputCount] = 0;
|
||||||
|
SendMessageA( info->hwndEdit, EM_REPLACESEL, FALSE, (LPARAM) info->OutputBuffer );
|
||||||
|
info->dwOutputCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PutLitStr (RTF_Info *info, char *str )
|
||||||
|
{
|
||||||
|
int len = strlen( str );
|
||||||
|
if( ( len + info->dwOutputCount + 1 ) > sizeof info->OutputBuffer )
|
||||||
|
RTFFlushOutputBuffer( info );
|
||||||
|
if( ( len + 1 ) >= sizeof info->OutputBuffer )
|
||||||
|
{
|
||||||
|
SendMessageA( info->hwndEdit, EM_REPLACESEL, FALSE, (LPARAM) str );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strcpy( &info->OutputBuffer[info->dwOutputCount], str );
|
||||||
|
info->dwOutputCount += len;
|
||||||
|
}
|
172
reactos/lib/richedit/text_map.h
Normal file
172
reactos/lib/richedit/text_map.h
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
* Output sequence map for rtf2text
|
||||||
|
*
|
||||||
|
* Field 1 is the standard character name. Field 2 is the output sequence
|
||||||
|
* to produce for that character.
|
||||||
|
*
|
||||||
|
* The output sequence is simply a string of characters. If it contains
|
||||||
|
* whitespace, it may be quoted. If it contains quotes, it may be quoted
|
||||||
|
* with a different quote character.
|
||||||
|
*
|
||||||
|
* characters in ASCII range (32-127
|
||||||
|
*/
|
||||||
|
|
||||||
|
char *text_map[] = {
|
||||||
|
"space" ," ",
|
||||||
|
"exclam" ,"!",
|
||||||
|
"quotedbl" ,"\"",
|
||||||
|
"numbersign" ,"#",
|
||||||
|
"dollar" ,"$",
|
||||||
|
"percent" ,"%",
|
||||||
|
"ampersand" ,"&",
|
||||||
|
"quoteright" ,"'",
|
||||||
|
"parenleft" ,"(",
|
||||||
|
"parenright" ,")",
|
||||||
|
"asterisk" ,"*",
|
||||||
|
"plus" ,"+",
|
||||||
|
"comma" ,",",
|
||||||
|
"hyphen" ,"-",
|
||||||
|
"period" ,".",
|
||||||
|
"slash" ,"/",
|
||||||
|
"zero" ,"0",
|
||||||
|
"one" ,"1",
|
||||||
|
"two" ,"2",
|
||||||
|
"three" ,"3",
|
||||||
|
"four" ,"4",
|
||||||
|
"five" ,"5",
|
||||||
|
"six" ,"6",
|
||||||
|
"seven" ,"7",
|
||||||
|
"eight" ,"8",
|
||||||
|
"nine" ,"9",
|
||||||
|
"colon" ,":",
|
||||||
|
"semicolon" ,";",
|
||||||
|
"less" ,"<",
|
||||||
|
"equal" ,"=",
|
||||||
|
"greater" ,">",
|
||||||
|
"question" ,"?",
|
||||||
|
"at" ,"@",
|
||||||
|
"A" ,"A",
|
||||||
|
"B" ,"B",
|
||||||
|
"C" ,"C",
|
||||||
|
"D" ,"D",
|
||||||
|
"E" ,"E",
|
||||||
|
"F" ,"F",
|
||||||
|
"G" ,"G",
|
||||||
|
"H" ,"H",
|
||||||
|
"I" ,"I",
|
||||||
|
"J" ,"J",
|
||||||
|
"K" ,"K",
|
||||||
|
"L" ,"L",
|
||||||
|
"M" ,"M",
|
||||||
|
"N" ,"N",
|
||||||
|
"O" ,"O",
|
||||||
|
"P" ,"P",
|
||||||
|
"Q" ,"Q",
|
||||||
|
"R" ,"R",
|
||||||
|
"S" ,"S",
|
||||||
|
"T" ,"T",
|
||||||
|
"U" ,"U",
|
||||||
|
"V" ,"V",
|
||||||
|
"W" ,"W",
|
||||||
|
"X" ,"X",
|
||||||
|
"Y" ,"Y",
|
||||||
|
"Z" ,"Z",
|
||||||
|
"bracketleft" ,"[",
|
||||||
|
"backslash" ,"\\",
|
||||||
|
"bracketright" ,"]",
|
||||||
|
"asciicircum" ,"^",
|
||||||
|
"underscore" ,"_",
|
||||||
|
"quoteleft" ,"`",
|
||||||
|
"a" ,"a",
|
||||||
|
"b" ,"b",
|
||||||
|
"c" ,"c",
|
||||||
|
"d" ,"d",
|
||||||
|
"e" ,"e",
|
||||||
|
"f" ,"f",
|
||||||
|
"g" ,"g",
|
||||||
|
"h" ,"h",
|
||||||
|
"i" ,"i",
|
||||||
|
"j" ,"j",
|
||||||
|
"k" ,"k",
|
||||||
|
"l" ,"l",
|
||||||
|
"m" ,"m",
|
||||||
|
"n" ,"n",
|
||||||
|
"o" ,"o",
|
||||||
|
"p" ,"p",
|
||||||
|
"q" ,"q",
|
||||||
|
"r" ,"r",
|
||||||
|
"s" ,"s",
|
||||||
|
"t" ,"t",
|
||||||
|
"u" ,"u",
|
||||||
|
"v" ,"v",
|
||||||
|
"w" ,"w",
|
||||||
|
"x" ,"x",
|
||||||
|
"y" ,"y",
|
||||||
|
"z" ,"z",
|
||||||
|
"braceleft" ,"{",
|
||||||
|
"bar" ,"|",
|
||||||
|
"braceright" ,"}",
|
||||||
|
"asciitilde" ,"~",
|
||||||
|
"AE" ,"AE",
|
||||||
|
"OE" ,"OE",
|
||||||
|
"acute" ,"'",
|
||||||
|
"ae" ,"ae",
|
||||||
|
"angleleft" ,"<",
|
||||||
|
"angleright" ,">",
|
||||||
|
"arrowboth" ,"<->",
|
||||||
|
"arrowdblboth" ,"<=>",
|
||||||
|
"arrowdblleft" ,"<=",
|
||||||
|
"arrowdblright" ,"=>",
|
||||||
|
"arrowleft" ,"<-",
|
||||||
|
"arrowright" ,"->",
|
||||||
|
"bullet" ,"o",
|
||||||
|
"cent" ,"cent",
|
||||||
|
"circumflex" ,"^",
|
||||||
|
"copyright" ,"(c)",
|
||||||
|
"copyrightsans" ,"(c)",
|
||||||
|
"degree" ,"deg.",
|
||||||
|
"divide" ,"/",
|
||||||
|
"dotlessi" ,"i",
|
||||||
|
"ellipsis" ,"...",
|
||||||
|
"emdash" ,"--",
|
||||||
|
"endash" ,"-",
|
||||||
|
"fi" ,"fi",
|
||||||
|
"fl" ,"fl",
|
||||||
|
"fraction" ,"/",
|
||||||
|
"germandbls" ,"ss",
|
||||||
|
"grave" ,"`",
|
||||||
|
"greaterequal" ,">=",
|
||||||
|
"guillemotleft" ,"<<",
|
||||||
|
"guillemotright" ,">>",
|
||||||
|
"guilsinglleft" ,"<",
|
||||||
|
"guilsinglright" ,">",
|
||||||
|
"lessequal" ,"<=",
|
||||||
|
"logicalnot" ,"~",
|
||||||
|
"mathasterisk" ,"*",
|
||||||
|
"mathequal" ,"=",
|
||||||
|
"mathminus" ,"-",
|
||||||
|
"mathnumbersign" ,"#",
|
||||||
|
"mathplus" ,"+",
|
||||||
|
"mathtilde" ,"~",
|
||||||
|
"minus" ,"-",
|
||||||
|
"mu" ,"u",
|
||||||
|
"multiply" ,"x",
|
||||||
|
"nobrkhyphen" ,"-",
|
||||||
|
"nobrkspace" ," ",
|
||||||
|
"notequal" ,"!=",
|
||||||
|
"oe" ,"oe",
|
||||||
|
"onehalf" ,"1/2",
|
||||||
|
"onequarter" ,"1/4",
|
||||||
|
"periodcentered" ,".",
|
||||||
|
"plusminus" ,"+/-",
|
||||||
|
"quotedblbase" ,",,",
|
||||||
|
"quotedblleft" ,"\"",
|
||||||
|
"quotedblright" ,"\"",
|
||||||
|
"quotesinglbase" ,",",
|
||||||
|
"registered" ,"reg.",
|
||||||
|
"registersans" ,"reg.",
|
||||||
|
"threequarters" ,"3/4",
|
||||||
|
"tilde" ,"~",
|
||||||
|
"trademark" ,"(TM)",
|
||||||
|
"trademarksans" ,"(TM)"
|
||||||
|
};
|
Loading…
Reference in a new issue