Avoid 0-byte files.
[wine/dcerpc.git] / programs / winhelp / macro.lex.l
blob42ae505d8eb7da3c31d36e21e81768665de3ec2d
1 %{
2 /*
3  * Help Viewer
4  *
5  * Copyright 1996 Ulrich Schmid
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
22 %x quote dquote
24 #include "macro.h"
25 #include "y.tab.h"
27 static LPCSTR  macroptr;
28 static LPSTR   strptr;
29 static HGLOBAL hStringBuffer = 0;
30 static INT     nested_quotes = 0;
32 #define YY_INPUT(buf,result,max_size)\
33   if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++;
35 #define YY_NO_UNPUT
38 About                   yylval = (YYSTYPE)MACRO_About;                  return VOID_FUNCTION_VOID;
39 AddAccelerator|AA       yylval = (YYSTYPE)MACRO_AddAccelerator;         return VOID_FUNCTION_2UINT_STRING;
40 ALink|AL                yylval = (YYSTYPE)MACRO_ALink;                  return VOID_FUNCTION_STRING_UINT_STRING;
41 Annotate                yylval = (YYSTYPE)MACRO_Annotate;               return VOID_FUNCTION_VOID;
42 AppendItem              yylval = (YYSTYPE)MACRO_AppendItem;             return VOID_FUNCTION_4STRING;
43 Back                    yylval = (YYSTYPE)MACRO_Back;                   return VOID_FUNCTION_VOID;
44 BackFlush|BF            yylval = (YYSTYPE)MACRO_BackFlush;              return VOID_FUNCTION_VOID;
45 BookmarkDefine          yylval = (YYSTYPE)MACRO_BookmarkDefine;         return VOID_FUNCTION_VOID;
46 BookmarkMore            yylval = (YYSTYPE)MACRO_BookmarkMore;           return VOID_FUNCTION_VOID;
47 BrowseButtons           yylval = (YYSTYPE)MACRO_BrowseButtons;          return VOID_FUNCTION_VOID;
48 ChangeButtonBinding|CBB yylval = (YYSTYPE)MACRO_ChangeButtonBinding;    return VOID_FUNCTION_2STRING;
49 ChangeEnable|CE         yylval = (YYSTYPE)MACRO_ChangeEnable;           return VOID_FUNCTION_2STRING;
50 ChangeItemBinding|CIB   yylval = (YYSTYPE)MACRO_ChangeItemBinding;      return VOID_FUNCTION_2STRING;
51 CheckItem|CI            yylval = (YYSTYPE)MACRO_CheckItem;              return VOID_FUNCTION_STRING;
52 CloseSecondarys|CS      yylval = (YYSTYPE)MACRO_CloseSecondarys;                return VOID_FUNCTION_VOID;
53 CloseWindow|CW          yylval = (YYSTYPE)MACRO_CloseWindow;            return VOID_FUNCTION_STRING;
54 Compare                 yylval = (YYSTYPE)MACRO_Compare;                        return VOID_FUNCTION_STRING;
55 Contents                yylval = (YYSTYPE)MACRO_Contents;               return VOID_FUNCTION_VOID;
56 ControlPanel            yylval = (YYSTYPE)MACRO_ControlPanel;           return VOID_FUNCTION_2STRING_UINT;
57 CopyDialog              yylval = (YYSTYPE)MACRO_CopyDialog;             return VOID_FUNCTION_VOID;
58 CopyTopic|CT            yylval = (YYSTYPE)MACRO_CopyTopic;              return VOID_FUNCTION_VOID;
59 CreateButton|CB         yylval = (YYSTYPE)MACRO_CreateButton;           return VOID_FUNCTION_3STRING;
60 DeleteItem              yylval = (YYSTYPE)MACRO_DeleteItem;             return VOID_FUNCTION_STRING;
61 DeleteMark              yylval = (YYSTYPE)MACRO_DeleteMark;             return VOID_FUNCTION_STRING;
62 DestroyButton           yylval = (YYSTYPE)MACRO_DestroyButton;          return VOID_FUNCTION_STRING;
63 DisableButton|DB        yylval = (YYSTYPE)MACRO_DisableButton;          return VOID_FUNCTION_STRING;
64 DisableItem|DI          yylval = (YYSTYPE)MACRO_DisableItem;            return VOID_FUNCTION_STRING;
65 EnableButton|EB         yylval = (YYSTYPE)MACRO_EnableButton;           return VOID_FUNCTION_STRING;
66 EnableItem|EI           yylval = (YYSTYPE)MACRO_EnableItem;             return VOID_FUNCTION_STRING;
67 EndMPrint               yylval = (YYSTYPE)MACRO_EndMPrint;              return VOID_FUNCTION_VOID;
68 ExecFile|EF             yylval = (YYSTYPE)MACRO_ExecFile;               return VOID_FUNCTION_2STRING_UINT_STRING;
69 ExecProgram|EP          yylval = (YYSTYPE)MACRO_ExecProgram;            return VOID_FUNCTION_STRING_UINT;
70 Exit                    yylval = (YYSTYPE)MACRO_Exit;                   return VOID_FUNCTION_VOID;
71 ExtAbleItem             yylval = (YYSTYPE)MACRO_ExtAbleItem;            return VOID_FUNCTION_STRING_UINT;
72 ExtInsertItem           yylval = (YYSTYPE)MACRO_ExtInsertItem;          return VOID_FUNCTION_4STRING_2UINT;
73 ExtInsertMenu           yylval = (YYSTYPE)MACRO_ExtInsertMenu;          return VOID_FUNCTION_3STRING_2UINT;
74 FileExist|FE            yylval = (YYSTYPE)MACRO_FileExist;              return BOOL_FUNCTION_STRING;
75 FileOpen|FO             yylval = (YYSTYPE)MACRO_FileOpen;               return VOID_FUNCTION_VOID;
76 Find                    yylval = (YYSTYPE)MACRO_Find;                   return VOID_FUNCTION_VOID;
77 Finder|FD               yylval = (YYSTYPE)MACRO_Finder;                 return VOID_FUNCTION_VOID;
78 FloatingMenu            yylval = (YYSTYPE)MACRO_FloatingMenu;           return VOID_FUNCTION_VOID;
79 Flush|FH                yylval = (YYSTYPE)MACRO_Flush;                  return VOID_FUNCTION_VOID;
80 FocusWindow             yylval = (YYSTYPE)MACRO_FocusWindow;            return VOID_FUNCTION_STRING;
81 Generate                yylval = (YYSTYPE)MACRO_Generate;               return VOID_FUNCTION_STRING_WPARAM_LPARAM;
82 GotoMark                yylval = (YYSTYPE)MACRO_GotoMark;               return VOID_FUNCTION_STRING;
83 HelpOn                  yylval = (YYSTYPE)MACRO_HelpOn;                 return VOID_FUNCTION_VOID;
84 HelpOnTop               yylval = (YYSTYPE)MACRO_HelpOnTop;              return VOID_FUNCTION_VOID;
85 History                 yylval = (YYSTYPE)MACRO_History;                        return VOID_FUNCTION_VOID;
86 IfThen|IF                                                       return IF_THEN;
87 IfThenElse|IE                                                   return IF_THEN_ELSE;
88 InitMPrint              yylval = (YYSTYPE)MACRO_InitMPrint;             return BOOL_FUNCTION_VOID;
89 InsertItem              yylval = (YYSTYPE)MACRO_InsertItem;             return VOID_FUNCTION_4STRING_UINT;
90 InsertMenu              yylval = (YYSTYPE)MACRO_InsertMenu;             return VOID_FUNCTION_2STRING_UINT;
91 IsBook                  yylval = (YYSTYPE)MACRO_IsBook;                 return BOOL_FUNCTION_VOID;
92 IsMark                  yylval = (YYSTYPE)MACRO_IsMark;                 return BOOL_FUNCTION_STRING;
93 IsNotMark|NM            yylval = (YYSTYPE)MACRO_IsNotMark;              return BOOL_FUNCTION_STRING;
94 JumpContents            yylval = (YYSTYPE)MACRO_JumpContents;           return VOID_FUNCTION_FILE_WIN;
95 JumpContext|JC          yylval = (YYSTYPE)MACRO_JumpContext;            return VOID_FUNCTION_FILE_WIN_UINT;
96 JumpHash|JH             yylval = (YYSTYPE)MACRO_JumpHash;               return VOID_FUNCTION_FILE_WIN_UINT;
97 JumpHelpOn              yylval = (YYSTYPE)MACRO_JumpHelpOn;             return VOID_FUNCTION_VOID;
98 JumpID|JI               yylval = (YYSTYPE)MACRO_JumpID;                 return VOID_FUNCTION_FILE_WIN_STRING;
99 JumpKeyword|JK          yylval = (YYSTYPE)MACRO_JumpKeyword;            return VOID_FUNCTION_FILE_WIN_STRING;
100 KLink|KL                yylval = (YYSTYPE)MACRO_KLink;                  return VOID_FUNCTION_STRING_UINT_2STRING;
101 Menu|MU                 yylval = (YYSTYPE)MACRO_Menu;                   return VOID_FUNCTION_VOID;
102 MPrintHash              yylval = (YYSTYPE)MACRO_MPrintHash;             return VOID_FUNCTION_UINT;
103 MPrintID                yylval = (YYSTYPE)MACRO_MPrintID;               return VOID_FUNCTION_STRING;
104 Next                    yylval = (YYSTYPE)MACRO_Next;                   return VOID_FUNCTION_VOID;
105 NoShow                  yylval = (YYSTYPE)MACRO_NoShow;                 return VOID_FUNCTION_VOID;
106 Not                                                             return NOT;
107 PopupContext|PC         yylval = (YYSTYPE)MACRO_PopupContext;           return VOID_FUNCTION_STRING_UINT;
108 PopupHash               yylval = (YYSTYPE)MACRO_PopupHash;              return VOID_FUNCTION_STRING_UINT;
109 PopupId|PI              yylval = (YYSTYPE)MACRO_PopupId;                        return VOID_FUNCTION_2STRING;
110 PositionWindow|PW       yylval = (YYSTYPE)MACRO_PositionWindow;         return VOID_FUNCTION_2INT_3UINT_STRING;
111 Prev                    yylval = (YYSTYPE)MACRO_Prev;                   return VOID_FUNCTION_VOID;
112 Print                   yylval = (YYSTYPE)MACRO_Print;                  return VOID_FUNCTION_VOID;
113 PrinterSetup            yylval = (YYSTYPE)MACRO_PrinterSetup;           return VOID_FUNCTION_VOID;
114 RegisterRoutine|RR      yylval = (YYSTYPE)MACRO_RegisterRoutine;                return VOID_FUNCTION_3STRING;
115 RemoveAccelerator|RA    yylval = (YYSTYPE)MACRO_RemoveAccelerator;      return VOID_FUNCTION_2UINT;
116 ResetMenu               yylval = (YYSTYPE)MACRO_ResetMenu;              return VOID_FUNCTION_VOID;
117 SaveMark                yylval = (YYSTYPE)MACRO_SaveMark;               return VOID_FUNCTION_STRING;
118 Search                  yylval = (YYSTYPE)MACRO_Search;                 return VOID_FUNCTION_VOID;
119 SetContents             yylval = (YYSTYPE)MACRO_SetContents;            return VOID_FUNCTION_STRING_UINT;
120 SetHelpOnFile           yylval = (YYSTYPE)MACRO_SetHelpOnFile;          return VOID_FUNCTION_STRING;
121 SetPopupColor|SPC       yylval = (YYSTYPE)MACRO_SetPopupColor;          return VOID_FUNCTION_3UINT;
122 ShellExecute|SE         yylval = (YYSTYPE)MACRO_ShellExecute;           return VOID_FUNCTION_2STRING_2UINT_2STRING;
123 ShortCut|SH             yylval = (YYSTYPE)MACRO_ShortCut;               return VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING;
124 TCard                   yylval = (YYSTYPE)MACRO_TCard;                  return VOID_FUNCTION_UINT;
125 Test                    yylval = (YYSTYPE)MACRO_Test;                   return VOID_FUNCTION_UINT;
126 TestALink               yylval = (YYSTYPE)MACRO_TestALink;              return BOOL_FUNCTION_STRING;
127 TestKLink               yylval = (YYSTYPE)MACRO_TestKLink;              return BOOL_FUNCTION_STRING;
128 UncheckItem|UI          yylval = (YYSTYPE)MACRO_UncheckItem;            return VOID_FUNCTION_STRING;
129 UpdateWindow|UW         yylval = (YYSTYPE)MACRO_UpdateWindow;           return VOID_FUNCTION_2STRING;
131 [-+]?[0-9]+             yylval.integer = strtol(yytext, NULL, 10);      return INTEGER;
132 [-+]?0[xX][0-9a-f]+     yylval.integer = strtol(yytext, NULL, 16);      return INTEGER;
134 \`                      |
135 \"                      {
136                           if (!hStringBuffer)
137                             {
138                               hStringBuffer = GlobalAlloc(GMEM_FIXED, strlen(macroptr));
139                               strptr = GlobalLock(hStringBuffer);
140                             }
141                           yylval = (YYSTYPE)strptr;
142                           BEGIN (yytext[0] == '`' ? quote : dquote);
143                         }
145 <quote>\`               {
146                           *strptr++ = yytext[0];
147                           nested_quotes++;
148                         }
150 <quote>\'               |
151 <dquote>\"              {
152                           if (nested_quotes)
153                             {
154                               nested_quotes--;
155                               *strptr++ = yytext[0];
156                             }
157                           else
158                             {
159                               BEGIN INITIAL;
160                               *strptr++ = '\0';
161                               return tSTRING;
162                             }
163                         }
165 <quote,dquote>.         *strptr++ = yytext[0];
166 <quote,dquote>\\.       *strptr++ = yytext[1];
168 <quote,dquote><<EOF>>   return 0;
171 " "
173 .                       return yytext[0];
175 #include "winhelp.h"
176 static CHAR szTestMacro[256];
178 static LRESULT CALLBACK MACRO_TestDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
180   if (msg == WM_COMMAND && wParam == IDOK)
181     {
182       GetDlgItemText(hDlg, 99, szTestMacro, sizeof(szTestMacro));
183       EndDialog(hDlg, IDOK);
184       return TRUE;
185     }
186   return FALSE;
189 VOID MACRO_ExecuteMacro(LPCSTR macro)
191   if (!lstrcmpi(macro, "MacroTest"))
192     {
193       WNDPROC lpfnDlg = MakeProcInstance(MACRO_TestDialogProc, Globals.hInstance);
194       DialogBox(Globals.hInstance, STRING_DIALOG_TEST, Globals.active_win->hMainWnd, (DLGPROC)lpfnDlg);
195       FreeProcInstance(lpfnDlg);
196       macro = szTestMacro;
197     }
199   macroptr = macro;
201   yyparse();
203   if (hStringBuffer) GlobalFree(hStringBuffer);
204   hStringBuffer = 0;
207 void yyerror (const char *s)
209   fprintf(stderr, "%s\n", s);
210   nested_quotes = 0;
211   BEGIN INITIAL;
212   yyrestart(yyin);
215 #ifndef yywrap
216 int yywrap(void) { return 1; }
217 #endif