Cricheditctrl for Syntax Highlighting

xiaoxiao2021-03-06  39

1void ctwscriptedit :: FormattextRange (int NStart, int NEND)

2{

3 IF (nStart> = NEND)

4 return;

5

6 m_binforcedchange = true;

Seduce

8 Charrange Croldsel;

9

10 getsel (croldsel);

11 lockwindowupdate ();

12 Hidesee (TRUE, FALSE);

13

14 tchar * pBuffer = null;

15 try {

16 setsel (NStart, Nend);

17 pbuffer = new tchar [NEND - NSTART 1];

18 long Nlen = getselText (PBUFFER);

19

20 assert (Nlen <= NEND - NSTART);

twenty one

22 pBuffer [NLEN] = 0;

twenty three

24 Tchar * PStart, * PPTR;

25 pstart = pptr = pBuffer;

26

27 tchar * psymbolstart = null;

28 Symbolcolor IC;

29

30 While (* pptr! = 0) {

31 tchar ch = * pptr;

32

33 if (ch == m_CHComment && (m_chcomment2 == 0 || PPTR [1] == m_CHComment2)) {

34 psymbolstart = pptr;

35 DO {

36 CH = * ( PPTR);

37} while (ch! = 0 && ch! = '/ R');

38 IC = m_ICComment;

39} Else IF (Isstring Quote (CH)) {// Process Strings

40 psymbolstart = pptr;

41 tchar ch1 = CH;

42 DO {

43 CH = * ( PPTR);

44} while (ch! = 0 && ch! = Ch1 && ch! = '/ R');

45 IF (CH == CH1) PPTR ;

46 IC = m_ICString;

Else IF (_ISTDIGIT (CH)) {// Process Numbers

48 psymbolstart = pptr;

49_TCSTOD (PsymbolStart, & PPTR);

50 IC = m_ICnumber;

Else IF (_ITALPHA (CH) || CH == '_') {// process keywords

52 psymbolstart = pptr;

53 DO {

54 CH = * ( PPTR);

55} while (_ITALNUM (CH) || CH == '_');

56 * pptr = 0;

57 int npos = iskeyword (psymbolstart);

58 IF (npos> = 0) {

59 ChangeCase (NStart PsymbolStart - PBuffer, NStart PPTR - PBuffer,

60 m_StrKeywords.mid (NPOS 1, PPTR - PsymbolStart);

61 IF (_tcsicmp (m_strcomment, psymbolstart) == 0) {

62 * pptr = CH;

63 * psymbolstart = m_CHComment;

64 IF (psymbolstart [1]! = 0 && m_chcomment2! = 0)

65 psymbolstart [1] = m_CHComment2;

66 pptr = psymbolstart;

67 psymbolstart = null;

68 Continue;

69}

70 IC = m_ickeyword;

Else {

72 npos = isconstant (psymbolstart);

73 IF (Npos> = 0) {

74 Changecase (NStart PsymbolStart - PBuffer, NStart PPTR - PBuffer,

75 m_STRCONSTANTS.MID (NPOS 1, PPTR - PsymbolStart);

76 IC = m_ICCONSTANT;

77} else {

78 psymbolstart = null;

79}

80}

81 * pptr = CH;

82} else {

83 PPTR ;

84}

85

86 IF (psymbolstart! = Null) {

87 Assert (psymbolstart

88 SETFORMATRANGE (NStart Pstart - PBuffer, NStart PsymbolStart - PBuffer, False, RGB (0, 0, 0));

89 SETFORMATRANGE (NStart PsymbolStart - PBuffer, NStart PPTR - PBuffer, Ic.bold, Ic.Clrcolor);

90 pstart = pptr;

91 psymbolstart = 0;

ELSE IF (* pptr == 0)

93 SETFORMATRANGE (NStart PStart - PBuffer, NStart PPTR - PBuffer, False, RGB (0, 0, 0));

94}

95

96} catch (...) {}

97

98 delete [] PBuffer;

99

100 setsel (croldsel);

101 Hidesee (False, False);

102 UNLOCKWINDOWUPDATE ();

103

104 m_binforcedchange = false;

105}

转载请注明原文地址:https://www.9cbs.com/read-77856.html

New Post(0)