Release 980215
[wine.git] / programs / winhelp / macro.lex.l
blobf0d14981317df15ff6767684e5d19710a0210900
1 %{
2 /*
3  * Help Viewer
4  *
5  * Copyright 1996 Ulrich Schmid
6  */
7 %}
8 %x quote dquote
9 %{
10 #include "macro.h"
11 #include "y.tab.h"
13 static LPCSTR  macroptr;
14 static LPSTR   strptr;
15 static HGLOBAL hStringBuffer = 0;
16 static INT     nested_quotes = 0;
18 #define YY_INPUT(buf,result,max_size)\
19   if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++;
21 #define YY_NO_UNPUT
24 About                   yylval = MACRO_About;                   return VOID_FUNCTION_VOID;
25 AddAccelerator|AA       yylval = MACRO_AddAccelerator;          return VOID_FUNCTION_2UINT_STRING;
26 ALink|AL                yylval = MACRO_ALink;                   return VOID_FUNCTION_STRING_UINT_STRING;
27 Annotate                yylval = MACRO_Annotate;                return VOID_FUNCTION_VOID;
28 AppendItem              yylval = MACRO_AppendItem;              return VOID_FUNCTION_4STRING;
29 Back                    yylval = MACRO_Back;                    return VOID_FUNCTION_VOID;
30 BackFlush|BF            yylval = MACRO_BackFlush;               return VOID_FUNCTION_VOID;
31 BookmarkDefine          yylval = MACRO_BookmarkDefine;          return VOID_FUNCTION_VOID;
32 BookmarkMore            yylval = MACRO_BookmarkMore;            return VOID_FUNCTION_VOID;
33 BrowseButtons           yylval = MACRO_BrowseButtons;           return VOID_FUNCTION_VOID;
34 ChangeButtonBinding|CBB yylval = MACRO_ChangeButtonBinding;     return VOID_FUNCTION_2STRING;
35 ChangeEnable|CE         yylval = MACRO_ChangeEnable;            return VOID_FUNCTION_2STRING;
36 ChangeItemBinding|CIB   yylval = MACRO_ChangeItemBinding;       return VOID_FUNCTION_2STRING;
37 CheckItem|CI            yylval = MACRO_CheckItem;               return VOID_FUNCTION_STRING;
38 CloseSecondarys|CS      yylval = MACRO_CloseSecondarys;         return VOID_FUNCTION_VOID;
39 CloseWindow|CW          yylval = MACRO_CloseWindow;             return VOID_FUNCTION_STRING;
40 Compare                 yylval = MACRO_Compare;                 return VOID_FUNCTION_STRING;
41 Contents                yylval = MACRO_Contents;                return VOID_FUNCTION_VOID;
42 ControlPanel            yylval = MACRO_ControlPanel;            return VOID_FUNCTION_2STRING_UINT;
43 CopyDialog              yylval = MACRO_CopyDialog;              return VOID_FUNCTION_VOID;
44 CopyTopic|CT            yylval = MACRO_CopyTopic;               return VOID_FUNCTION_VOID;
45 CreateButton|CB         yylval = MACRO_CreateButton;            return VOID_FUNCTION_3STRING;
46 DeleteItem              yylval = MACRO_DeleteItem;              return VOID_FUNCTION_STRING;
47 DeleteMark              yylval = MACRO_DeleteMark;              return VOID_FUNCTION_STRING;
48 DestroyButton           yylval = MACRO_DestroyButton;           return VOID_FUNCTION_STRING;
49 DisableButton|DB        yylval = MACRO_DisableButton;           return VOID_FUNCTION_STRING;
50 DisableItem|DI          yylval = MACRO_DisableItem;             return VOID_FUNCTION_STRING;
51 EnableButton|EB         yylval = MACRO_EnableButton;            return VOID_FUNCTION_STRING;
52 EnableItem|EI           yylval = MACRO_EnableItem;              return VOID_FUNCTION_STRING;
53 EndMPrint               yylval = MACRO_EndMPrint;               return VOID_FUNCTION_VOID;
54 ExecFile|EF             yylval = MACRO_ExecFile;                return VOID_FUNCTION_2STRING_UINT_STRING;
55 ExecProgram|EP          yylval = MACRO_ExecProgram;             return VOID_FUNCTION_STRING_UINT;
56 Exit                    yylval = MACRO_Exit;                    return VOID_FUNCTION_VOID;
57 ExtAbleItem             yylval = MACRO_ExtAbleItem;             return VOID_FUNCTION_STRING_UINT;
58 ExtInsertItem           yylval = MACRO_ExtInsertItem;           return VOID_FUNCTION_4STRING_2UINT;
59 ExtInsertMenu           yylval = MACRO_ExtInsertMenu;           return VOID_FUNCTION_3STRING_2UINT;
60 FileExist|FE            yylval = MACRO_FileExist;               return BOOL_FUNCTION_STRING;
61 FileOpen|FO             yylval = MACRO_FileOpen;                return VOID_FUNCTION_VOID;
62 Find                    yylval = MACRO_Find;                    return VOID_FUNCTION_VOID;
63 Finder|FD               yylval = MACRO_Finder;                  return VOID_FUNCTION_VOID;
64 FloatingMenu            yylval = MACRO_FloatingMenu;            return VOID_FUNCTION_VOID;
65 Flush|FH                yylval = MACRO_Flush;                   return VOID_FUNCTION_VOID;
66 FocusWindow             yylval = MACRO_FocusWindow;             return VOID_FUNCTION_STRING;
67 Generate                yylval = MACRO_Generate;                return VOID_FUNCTION_STRING_WPARAM_LPARAM;
68 GotoMark                yylval = MACRO_GotoMark;                return VOID_FUNCTION_STRING;
69 HelpOn                  yylval = MACRO_HelpOn;                  return VOID_FUNCTION_VOID;
70 HelpOnTop               yylval = MACRO_HelpOnTop;               return VOID_FUNCTION_VOID;
71 History                 yylval = MACRO_History;                 return VOID_FUNCTION_VOID;
72 IfThen|IF                                                       return IF_THEN;
73 IfThenElse|IE                                                   return IF_THEN_ELSE;
74 InitMPrint              yylval = MACRO_InitMPrint;              return BOOL_FUNCTION_VOID;
75 InsertItem              yylval = MACRO_InsertItem;              return VOID_FUNCTION_4STRING_UINT;
76 InsertMenu              yylval = MACRO_InsertMenu;              return VOID_FUNCTION_2STRING_UINT;
77 IsBook                  yylval = MACRO_IsBook;                  return BOOL_FUNCTION_VOID;
78 IsMark                  yylval = MACRO_IsMark;                  return BOOL_FUNCTION_STRING;
79 IsNotMark|NM            yylval = MACRO_IsNotMark;               return BOOL_FUNCTION_STRING;
80 JumpContents            yylval = MACRO_JumpContents;            return VOID_FUNCTION_FILE_WIN;
81 JumpContext|JC          yylval = MACRO_JumpContext;             return VOID_FUNCTION_FILE_WIN_UINT;
82 JumpHash|JH             yylval = MACRO_JumpHash;                return VOID_FUNCTION_FILE_WIN_UINT;
83 JumpHelpOn              yylval = MACRO_JumpHelpOn;              return VOID_FUNCTION_VOID;
84 JumpID|JI               yylval = MACRO_JumpID;                  return VOID_FUNCTION_FILE_WIN_STRING;
85 JumpKeyword|JK          yylval = MACRO_JumpKeyword;             return VOID_FUNCTION_FILE_WIN_STRING;
86 KLink|KL                yylval = MACRO_KLink;                   return VOID_FUNCTION_STRING_UINT_2STRING;
87 Menu|MU                 yylval = MACRO_Menu;                    return VOID_FUNCTION_VOID;
88 MPrintHash              yylval = MACRO_MPrintHash;              return VOID_FUNCTION_UINT;
89 MPrintID                yylval = MACRO_MPrintID;                return VOID_FUNCTION_STRING;
90 Next                    yylval = MACRO_Next;                    return VOID_FUNCTION_VOID;
91 NoShow                  yylval = MACRO_NoShow;                  return VOID_FUNCTION_VOID;
92 Not                                                             return NOT;
93 PopupContext|PC         yylval = MACRO_PopupContext;            return VOID_FUNCTION_STRING_UINT;
94 PopupHash               yylval = MACRO_PopupHash;               return VOID_FUNCTION_STRING_UINT;
95 PopupId|PI              yylval = MACRO_PopupId;                 return VOID_FUNCTION_2STRING;
96 PositionWindow|PW       yylval = MACRO_PositionWindow;          return VOID_FUNCTION_2INT_3UINT_STRING;
97 Prev                    yylval = MACRO_Prev;                    return VOID_FUNCTION_VOID;
98 Print                   yylval = MACRO_Print;                   return VOID_FUNCTION_VOID;
99 PrinterSetup            yylval = MACRO_PrinterSetup;            return VOID_FUNCTION_VOID;
100 RegisterRoutine|RR      yylval = MACRO_RegisterRoutine;         return VOID_FUNCTION_3STRING;
101 RemoveAccelerator|RA    yylval = MACRO_RemoveAccelerator;       return VOID_FUNCTION_2UINT;
102 ResetMenu               yylval = MACRO_ResetMenu;               return VOID_FUNCTION_VOID;
103 SaveMark                yylval = MACRO_SaveMark;                return VOID_FUNCTION_STRING;
104 Search                  yylval = MACRO_Search;                  return VOID_FUNCTION_VOID;
105 SetContents             yylval = MACRO_SetContents;             return VOID_FUNCTION_STRING_UINT;
106 SetHelpOnFile           yylval = MACRO_SetHelpOnFile;           return VOID_FUNCTION_STRING;
107 SetPopupColor|SPC       yylval = MACRO_SetPopupColor;           return VOID_FUNCTION_3UINT;
108 ShellExecute|SE         yylval = MACRO_ShellExecute;            return VOID_FUNCTION_2STRING_2UINT_2STRING;
109 ShortCut|SH             yylval = MACRO_ShortCut;                return VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING;
110 TCard                   yylval = MACRO_TCard;                   return VOID_FUNCTION_UINT;
111 Test                    yylval = MACRO_Test;                    return VOID_FUNCTION_UINT;
112 TestALink               yylval = MACRO_TestALink;               return BOOL_FUNCTION_STRING;
113 TestKLink               yylval = MACRO_TestKLink;               return BOOL_FUNCTION_STRING;
114 UncheckItem|UI          yylval = MACRO_UncheckItem;             return VOID_FUNCTION_STRING;
115 UpdateWindow|UW         yylval = MACRO_UpdateWindow;            return VOID_FUNCTION_2STRING;
117 [-+]?[0-9]+             yylval.integer = strtol(yytext, NULL, 10);      return INTEGER;
118 [-+]?0[xX][0-9a-f]+     yylval.integer = strtol(yytext, NULL, 16);      return INTEGER;
120 \`                      |
121 \"                      {
122                           if (!hStringBuffer)
123                             {
124                               hStringBuffer = GlobalAlloc(GMEM_FIXED, strlen(macroptr));
125                               strptr = GlobalLock(hStringBuffer);
126                             }
127                           yylval = strptr;
128                           BEGIN (yytext[0] == '`' ? quote : dquote);
129                         }
131 <quote>\`               {
132                           *strptr++ = yytext[0];
133                           nested_quotes++;
134                         }
136 <quote>\'               |
137 <dquote>\"              {
138                           if (nested_quotes)
139                             {
140                               nested_quotes--;
141                               *strptr++ = yytext[0];
142                             }
143                           else
144                             {
145                               BEGIN INITIAL;
146                               *strptr++ = '\0';
147                               return tSTRING;
148                             }
149                         }
151 <quote,dquote>.         *strptr++ = yytext[0];
152 <quote,dquote>\\.       *strptr++ = yytext[1];
154 <quote,dquote><<EOF>>   return 0;
157 " "
159 .                       return yytext[0];
161 #include "winhelp.h"
162 static CHAR szTestMacro[256];
164 static LRESULT MACRO_TestDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
166   if (msg == WM_COMMAND && wParam == IDOK)
167     {
168       GetDlgItemText(hDlg, 99, szTestMacro, sizeof(szTestMacro));
169       EndDialog(hDlg, IDOK);
170       return TRUE;
171     }
172   return FALSE;
175 VOID MACRO_ExecuteMacro(LPCSTR macro)
177   if (!lstrcmpi(macro, "MacroTest"))
178     {
179       WNDPROC lpfnDlg = MakeProcInstance(MACRO_TestDialogProc, Globals.hInstance);
180       DialogBox(Globals.hInstance, STRING_DIALOG_TEST, Globals.active_win->hMainWnd, lpfnDlg);
181       FreeProcInstance(lpfnDlg);
182       macro = szTestMacro;
183     }
185   macroptr = macro;
187   yyparse();
189   if (hStringBuffer) GlobalFree(hStringBuffer);
190   hStringBuffer = 0;
193 void yyerror (const char *s)
195   fprintf(stderr, "%s\n", s);
196   nested_quotes = 0;
197   BEGIN INITIAL;
198   yyrestart(yyin);
201 #ifndef yywrap
202 int yywrap(void) { return 1; }
203 #endif