fphelp.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998 by Berczi Gabor
  5. Help routines for the IDE
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit FPHelp;
  13. interface
  14. uses
  15. Drivers,HelpCtx,
  16. WHelp,WHlpView,WHTML,
  17. {$ifdef EDITORS}
  18. Editors,
  19. {$else}
  20. WEditor,WCEdit,
  21. {$endif}
  22. WViews,WHTMLScn,
  23. FPViews;
  24. type
  25. PIDEStatusLine = ^TIDEStatusLine;
  26. TIDEStatusLine = object(TAdvancedStatusLine)
  27. function Hint(AHelpCtx: Word): String; virtual;
  28. procedure HandleEvent(var Event: TEvent); virtual;
  29. end;
  30. PFPHTMLFileLinkScanner = ^TFPHTMLFileLinkScanner;
  31. TFPHTMLFileLinkScanner = object(THTMLFileLinkScanner)
  32. function CheckURL(const URL: string): boolean; virtual;
  33. function CheckText(const Text: string): boolean; virtual;
  34. procedure ProcessDoc(Doc: PHTMLLinkScanFile); virtual;
  35. end;
  36. procedure Help(FileID, Context: THelpCtx; Modal: boolean);
  37. procedure HelpIndex(Keyword: string);
  38. procedure HelpTopicSearch(Editor: PEditor);
  39. procedure HelpTopic(const S: string);
  40. procedure CloseHelpWindows;
  41. procedure InitHelpSystem;
  42. procedure DoneHelpSystem;
  43. procedure InitHelpFiles;
  44. procedure DoneHelpFiles;
  45. procedure PushStatus(S: string);
  46. procedure SetStatus(S: string);
  47. procedure ClearStatus;
  48. procedure PopStatus;
  49. const
  50. HelpWindow : PFPHelpWindow = nil;
  51. HelpInited : boolean = false;
  52. implementation
  53. uses Objects,Views,App,MsgBox,Commands,
  54. WUtils,WHTMLHlp,
  55. FPString,FPConst,FPVars,FPUtils;
  56. const
  57. MaxStatusLevel = {$ifdef FPC}10{$else}1{$endif};
  58. var StatusStack : array[0..MaxStatusLevel] of string[MaxViewWidth];
  59. const
  60. StatusStackPtr : integer = 0;
  61. procedure TIDEStatusLine.HandleEvent(var Event: TEvent);
  62. begin
  63. case Event.What of
  64. evBroadcast :
  65. case Event.Command of
  66. cmUpdate : Update;
  67. end;
  68. end;
  69. inherited HandleEvent(Event);
  70. end;
  71. function TIDEStatusLine.Hint(AHelpCtx: Word): String;
  72. var S: string;
  73. begin
  74. case AHelpCtx of
  75. hcNoContext : S:='';
  76. hcDragging : S:='';
  77. hcSourceWindow : S:='';
  78. hcHelpWindow : S:='';
  79. hcCalcWindow : S:='';
  80. hcInfoWindow : S:='';
  81. hcClipboardWindow:S:='';
  82. hcBrowserWindow : S:='';
  83. hcMessagesWindow: S:='';
  84. hcASCIITableWindow: S:='';
  85. hcGDBWindow : S:=hint_rawgdbwindow;
  86. hcBreakpointListWindow : S:=hint_allbreakpoints;
  87. hcSystemMenu : S:=hint_systemmenu;
  88. hcUpdate : S:=hint_update;
  89. hcAbout : S:=hint_about;
  90. hcFileMenu : S:=hint_filemenu;
  91. hcNew : S:=hint_filenew;
  92. hcNewFromTemplate:S:=hint_filenewfromtemplate;
  93. hcOpen : S:=hint_fileopen;
  94. hcSave : S:=hint_filesave;
  95. hcSaveAs : S:=hint_filesaveas;
  96. hcSaveAll : S:=hint_filesaveall;
  97. hcChangeDir : S:=hint_changedir;
  98. hcDOSShell : S:=hint_dosshell;
  99. hcQuit : S:=hint_exit;
  100. hcRecentFileBase..hcRecentFileBase+10
  101. : S:=hint_openrecentfile;
  102. hcEditMenu : S:=hint_editmenu;
  103. hcUndo : S:=hint_editundo;
  104. hcRedo : S:=hint_editredo;
  105. hcCut : S:=hint_editcut;
  106. hcCopy : S:=hint_editcopy;
  107. hcPaste : S:=hint_editpaste;
  108. hcCopyWin : S:=hint_editcopywin;
  109. hcPasteWin : S:=hint_editpastewin;
  110. hcClear : S:=hint_editclear;
  111. hcShowClipboard : S:=hint_showclipboard;
  112. hcSearchMenu : S:=hint_searchmenu;
  113. hcFind : S:=hint_searchfind;
  114. hcReplace : S:=hint_searchreplace;
  115. hcSearchAgain : S:=hint_searchagain;
  116. hcGotoLine : S:=hint_gotoline;
  117. hcObjects : S:=hint_objects;
  118. hcModules : S:=hint_modules;
  119. hcGlobals : S:=hint_globals;
  120. hcSymbol : S:=hint_symbol;
  121. hcRunMenu : S:=hint_runmenu;
  122. hcRun : S:=hint_run;
  123. hcParameters : S:=hint_runparameters;
  124. hcResetDebugger : S:=hint_resetprogram;
  125. hcContToCursor : S:=hint_rununtilcursor;
  126. hcUntilReturn : S:=hint_rununtilreturn;
  127. hcUserScreen : S:=hint_userscreen;
  128. hcCompileMenu : S:=hint_compilemenu;
  129. hcCompile : S:=hint_compile;
  130. hcMake : S:=hint_make;
  131. hcBuild : S:=hint_build;
  132. hcTarget : S:=hint_target;
  133. hcPrimaryFile : S:=hint_primaryfile;
  134. hcClearPrimary : S:=hint_clearprimaryfile;
  135. hcInformation : S:=hint_information;
  136. hcCompilerMessages:S:=hint_showmessages;
  137. hcDebugMenu : S:=hint_debugmenu;
  138. hcToggleBreakpoint : S:=hint_togglebreakpoint;
  139. hcNewBreakpoint : S:=hint_createnewbreakpoint;
  140. hcEditBreakpoint : S:=hint_editbreakpoint;
  141. hcDeleteBreakpoint : S:=hint_deletebreakpoint;
  142. hcOpenGDBWindow : S:=hint_opengdbwindow;
  143. hcAddWatch : S:=hint_addwatch;
  144. hcWatches : S:=hint_watches;
  145. hcStack : S:=hint_callstack;
  146. hcBreakpointList : S:=hint_editbreakpoints;
  147. hcToolsMenu : S:=hint_toolsmenu;
  148. hcCalculator : S:=hint_calculator;
  149. hcGrep : S:=hint_grep;
  150. hcMsgGotoSource : S:=hint_gotosource;
  151. hcRegisters : S:=hint_registers;
  152. hcToolsMessages : S:=hint_messageswindow;
  153. hcToolsBase..
  154. hcToolsBase+MaxToolCount
  155. : S:=hint_usertool;
  156. hcASCIITable : S:=hint_asciitable;
  157. hcOptionsMenu : S:=hint_optionsmenu;
  158. hcSwitchesMode : S:=hint_switchesmode;
  159. hcCompiler : S:=hint_compiler;
  160. hcMemorySizes : S:=hint_memorysizes;
  161. hcLinker : S:=hint_linkeroptions;
  162. hcDebugger : S:=hint_debugoptions;
  163. hcDirectories : S:=hint_directories;
  164. hcBrowser : S:=hint_browser;
  165. hcTools : S:=hint_tools;
  166. hcEnvironmentMenu:S:=hint_environmentmenu;
  167. hcPreferences : S:=hint_preferences;
  168. hcEditor : S:=hint_editoroptions;
  169. hcCodeCompleteOptions:S:=hint_codecomplete;
  170. hcCodeTemplateOptions:S:=hint_codetemplates;
  171. hcMouse : S:=hint_mouseoptions;
  172. hcDesktopOptions: S:=hint_desktopoptions;
  173. hcStartup : S:=hint_startup;
  174. hcColors : S:=hint_colors;
  175. hcOpenINI : S:=hint_openini;
  176. hcSaveINI : S:=hint_saveini;
  177. hcSaveAsINI : S:=hint_saveasini;
  178. hcWindowMenu : S:=hint_windowmenu;
  179. hcTile : S:=hint_tile;
  180. hcCascade : S:=hint_cascade;
  181. hcCloseAll : S:=hint_closeall;
  182. hcResize : S:=hint_resize;
  183. hcZoom : S:=hint_zoom;
  184. hcNext : S:=hint_next;
  185. hcPrev : S:=hint_prev;
  186. hcClose : S:=hint_closewindow;
  187. hcWindowList : S:=hint_windowlist;
  188. hcUserScreenWindow:S:=hint_userscreenwindow;
  189. hcHelpMenu : S:=hint_helpmenu;
  190. hcHelpContents : S:=hint_helpcontents;
  191. hcHelpIndex : S:=hint_helpindex;
  192. hcHelpTopicSearch:S:=hint_helptopicsearch;
  193. hcHelpPrevTopic : S:=hint_helpprevtopic;
  194. hcHelpUsingHelp : S:=hint_helphowtouse;
  195. hcHelpFiles : S:=hint_helpfiles;
  196. hcOpenAtCursor : S:=hint_openatcursor;
  197. hcBrowseAtCursor: S:=hint_browseatcursor;
  198. hcEditorOptions : S:=hint_editoroptionscur;
  199. else S:='???';
  200. end;
  201. Hint:=S;
  202. end;
  203. procedure TFPHTMLFileLinkScanner.ProcessDoc(Doc: PHTMLLinkScanFile);
  204. begin
  205. PushStatus(FormatStrStr(msg_indexingfile,Doc^.GetDocumentURL));
  206. inherited ProcessDoc(Doc);
  207. PopStatus;
  208. end;
  209. function TFPHTMLFileLinkScanner.CheckURL(const URL: string): boolean;
  210. var OK: boolean;
  211. const HTTPPrefix = 'http:';
  212. FTPPrefix = 'ftp:';
  213. begin
  214. OK:=inherited CheckURL(URL);
  215. if OK then OK:=DirAndNameOf(URL)<>'';
  216. if OK then OK:=CompareText(copy(ExtOf(URL),1,4),'.HTM')=0;
  217. if OK then OK:=CompareText(copy(URL,1,length(HTTPPrefix)),HTTPPrefix)<>0;
  218. if OK then OK:=CompareText(copy(URL,1,length(FTPPrefix)),FTPPrefix)<>0;
  219. CheckURL:=OK;
  220. end;
  221. function TFPHTMLFileLinkScanner.CheckText(const Text: string): boolean;
  222. var OK: boolean;
  223. S: string;
  224. begin
  225. S:=Trim(Text);
  226. OK:=(S<>'') and (copy(S,1,1)<>'[');
  227. CheckText:=OK;
  228. end;
  229. procedure InitHelpSystem;
  230. procedure AddOAFile(HelpFile: string);
  231. begin
  232. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  233. if HelpFacility^.AddOAHelpFile(HelpFile)=false then
  234. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  235. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  236. end;
  237. procedure AddHTMLFile(TOCEntry,HelpFile: string);
  238. begin
  239. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  240. if HelpFacility^.AddHTMLHelpFile(HelpFile, TOCEntry)=false then
  241. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  242. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  243. end;
  244. procedure AddNGFile(HelpFile: string);
  245. begin
  246. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  247. if HelpFacility^.AddNGHelpFile(HelpFile)=false then
  248. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  249. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  250. end;
  251. procedure AddHTMLIndexFile(HelpFile: string);
  252. begin
  253. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile+' ('+SmartPath(HelpFile)+')');{$ENDIF}
  254. if HelpFacility^.AddHTMLIndexHelpFile(HelpFile)=false then
  255. ErrorBox(FormatStrStr(msg_failedtoloadhelpfile,HelpFile),nil);
  256. {$IFDEF DEBUG}SetStatus(msg_LoadingHelpFile);{$ENDIF}
  257. end;
  258. var I,P: sw_integer;
  259. S: string;
  260. TopicTitle: string;
  261. begin
  262. New(HelpFacility, Init);
  263. PushStatus(msg_LoadingHelpFiles);
  264. for I:=0 to HelpFiles^.Count-1 do
  265. begin
  266. S:=HelpFiles^.At(I)^; TopicTitle:='';
  267. P:=Pos('|',S);
  268. if P>0 then
  269. begin TopicTitle:=copy(S,P+1,High(S)); S:=copy(S,1,P-1); end;
  270. if TopicTitle='' then TopicTitle:=S;
  271. if copy(UpcaseStr(ExtOf(S)),1,length(HTMLExt))=UpcaseStr(HTMLExt) then { this recognizes both .htm and .html }
  272. AddHTMLFile(TopicTitle,S) else
  273. if UpcaseStr(ExtOf(S))=UpcaseStr(HTMLIndexExt) then
  274. AddHTMLIndexFile(S) else
  275. if UpcaseStr(ExtOf(S))=UpcaseStr(NGExt) then
  276. AddNGFile(S) else
  277. AddOAFile(S);
  278. end;
  279. PopStatus;
  280. end;
  281. procedure CheckHelpSystem;
  282. begin
  283. if HelpInited then Exit;
  284. InitHelpSystem;
  285. HelpInited:=true;
  286. end;
  287. procedure DoneHelpSystem;
  288. begin
  289. if assigned(HelpFacility) then
  290. begin
  291. Dispose(HelpFacility, Done);
  292. HelpFacility:=nil;
  293. end;
  294. HelpInited:=false;
  295. end;
  296. procedure HelpCreateWindow;
  297. var R: TRect;
  298. begin
  299. CheckHelpSystem;
  300. if HelpWindow=nil then
  301. begin
  302. Desktop^.GetExtent(R); R.Grow(-15,-3); Dec(R.A.Y);
  303. New(HelpWindow, Init(R, dialog_help, 0, 0, SearchFreeWindowNo));
  304. if HelpWindow<>nil then
  305. begin
  306. HelpWindow^.Hide;
  307. Desktop^.Insert(HelpWindow);
  308. end;
  309. end;
  310. end;
  311. procedure Help(FileID, Context: THelpCtx; Modal: boolean);
  312. begin
  313. if Modal then
  314. begin MessageBox(msg_modalhelpnotimplemented,nil,mfInformation+mfInsertInApp+mfOKButton); Exit; end;
  315. HelpCreateWindow;
  316. with HelpWindow^ do
  317. begin
  318. HelpWindow^.ShowTopic(0,Context);
  319. if GetState(sfVisible)=false then Show;
  320. MakeFirst;
  321. end;
  322. Message(Application,evCommand,cmUpdate,nil);
  323. end;
  324. procedure HelpTopicSearch(Editor: PEditor);
  325. var S: string;
  326. begin
  327. if Editor=nil then S:='' else
  328. S:=GetEditorCurWord(Editor);
  329. HelpTopic(S);
  330. end;
  331. procedure HelpTopic(const S: string);
  332. var FileID: word;
  333. Ctx : THelpCtx;
  334. var Found: boolean;
  335. begin
  336. CheckHelpSystem;
  337. PushStatus(msg_LocatingTopic);
  338. Found:=HelpFacility^.TopicSearch(S,FileID,Ctx);
  339. PopStatus;
  340. if Found then
  341. Help(FileID,Ctx,false)
  342. else
  343. HelpIndex(S);
  344. end;
  345. procedure HelpIndex(Keyword: string);
  346. begin
  347. HelpCreateWindow;
  348. with HelpWindow^ do
  349. begin
  350. PushStatus(msg_BuildingHelpIndex);
  351. HelpWindow^.ShowIndex;
  352. if Keyword<>'' then
  353. HelpWindow^.HelpView^.Lookup(Keyword);
  354. PopStatus;
  355. if GetState(sfVisible)=false then Show;
  356. MakeFirst;
  357. end;
  358. Message(Application,evCommand,cmUpdate,nil);
  359. end;
  360. procedure PushStatus(S: string);
  361. begin
  362. if StatusLine=nil then
  363. Exit;
  364. If StatusStackPtr<=MaxStatusLevel then
  365. StatusStack[StatusStackPtr]:=PAdvancedStatusLine(StatusLine)^.GetStatusText
  366. else
  367. StatusStack[MaxStatusLevel]:=PAdvancedStatusLine(StatusLine)^.GetStatusText;
  368. SetStatus(S);
  369. Inc(StatusStackPtr);
  370. end;
  371. procedure PopStatus;
  372. begin
  373. if StatusLine=nil then
  374. Exit;
  375. Dec(StatusStackPtr);
  376. If StatusStackPtr<=MaxStatusLevel then
  377. SetStatus(StatusStack[StatusStackPtr])
  378. else
  379. SetStatus(StatusStack[MaxStatusLevel]);
  380. end;
  381. procedure SetStatus(S: string);
  382. begin
  383. if StatusLine=nil then
  384. Exit;
  385. PAdvancedStatusLine(StatusLine)^.SetStatusText(S);
  386. end;
  387. procedure ClearStatus;
  388. begin
  389. PAdvancedStatusLine(StatusLine)^.ClearStatusText;
  390. end;
  391. function FPHTMLGetSectionColor(Section: THTMLSection; var Color: byte): boolean;
  392. var OK: boolean;
  393. S: string;
  394. begin
  395. Color:=0;
  396. OK:=(ord(Section) in [1..length(CHTMLSectionAttrs)]);
  397. if OK then
  398. begin
  399. S:=#0;
  400. S:=copy(CHTMLSectionAttrs,ord(Section),1);
  401. if Assigned(Application)=false then Color:=0 else
  402. Color:=Application^.GetColor(ord(S[1]));
  403. if (Color and $0f) = ((Color and $f0) shr 4) then { same color ? }
  404. OK:=false;
  405. end;
  406. FPHTMLGetSectionColor:=OK;
  407. end;
  408. procedure InitHelpFiles;
  409. begin
  410. HTMLGetSectionColor:={$ifdef FPC}@{$endif}FPHTMLGetSectionColor;
  411. New(HelpFiles, Init(10,10));
  412. end;
  413. procedure DoneHelpFiles;
  414. begin
  415. if assigned(HelpFiles) then
  416. Dispose(HelpFiles, Done);
  417. end;
  418. procedure CloseHelpWindows;
  419. procedure CloseIfHelpWindow(P: PView); {$ifndef FPC}far;{$endif}
  420. begin
  421. if P^.HelpCtx=hcHelpWindow then
  422. begin
  423. Message(P,evCommand,cmClose,nil);
  424. Dispose(P, Done); { help windows are only hidden on close so we've
  425. to destroy them manually }
  426. end;
  427. end;
  428. begin
  429. Desktop^.ForEach(@CloseIfHelpWindow);
  430. end;
  431. END.
  432. {
  433. $Log$
  434. Revision 1.34 2000-06-22 09:07:12 pierre
  435. * Gabor changes: see fixes.txt
  436. Revision 1.33 2000/06/16 08:50:40 pierre
  437. + new bunch of Gabor's changes
  438. Revision 1.32 2000/05/30 07:18:33 pierre
  439. + colors for HTML help by Gabor
  440. Revision 1.31 2000/05/29 10:44:56 pierre
  441. + New bunch of Gabor's changes: see fixes.txt
  442. Revision 1.30 2000/05/02 08:42:27 pierre
  443. * new set of Gabor changes: see fixes.txt
  444. Revision 1.29 2000/04/25 08:42:33 pierre
  445. * New Gabor changes : see fixes.txt
  446. Revision 1.28 2000/03/21 23:31:14 pierre
  447. adapted to wcedit addition by Gabor
  448. Revision 1.27 2000/02/07 11:58:01 pierre
  449. Gabor's code inserted
  450. Revision 1.26 2000/01/08 18:26:20 florian
  451. + added a register window, doesn't work yet
  452. Revision 1.25 2000/01/05 17:25:26 pierre
  453. * typo error corrected
  454. Revision 1.24 2000/01/03 11:38:33 michael
  455. Changes from Gabor
  456. Revision 1.23 1999/09/09 16:31:45 pierre
  457. * some breakpoint related fixes and Help contexts
  458. Revision 1.22 1999/09/09 14:15:27 pierre
  459. + cmCopyWin,cmPasteWin
  460. Revision 1.21 1999/08/16 18:25:17 peter
  461. * Adjusting the selection when the editor didn't contain any line.
  462. * Reserved word recognition redesigned, but this didn't affect the overall
  463. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  464. The syntax scanner loop is a bit slow but the main problem is the
  465. recognition of special symbols. Switching off symbol processing boosts
  466. the performance up to ca. 200%...
  467. * The editor didn't allow copying (for ex to clipboard) of a single character
  468. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  469. * Compiler Messages window (actually the whole desktop) did not act on any
  470. keypress when compilation failed and thus the window remained visible
  471. + Message windows are now closed upon pressing Esc
  472. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  473. only when neccessary
  474. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  475. + LineSelect (Ctrl+K+L) implemented
  476. * The IDE had problems closing help windows before saving the desktop
  477. Revision 1.20 1999/08/03 20:22:31 peter
  478. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  479. + Desktop saving should work now
  480. - History saved
  481. - Clipboard content saved
  482. - Desktop saved
  483. - Symbol info saved
  484. * syntax-highlight bug fixed, which compared special keywords case sensitive
  485. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  486. * with 'whole words only' set, the editor didn't found occourences of the
  487. searched text, if the text appeared previously in the same line, but didn't
  488. satisfied the 'whole-word' condition
  489. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  490. (ie. the beginning of the selection)
  491. * when started typing in a new line, but not at the start (X=0) of it,
  492. the editor inserted the text one character more to left as it should...
  493. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  494. * Shift shouldn't cause so much trouble in TCodeEditor now...
  495. * Syntax highlight had problems recognizing a special symbol if it was
  496. prefixed by another symbol character in the source text
  497. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  498. Revision 1.19 1999/07/12 13:14:17 pierre
  499. * LineEnd bug corrected, now goes end of text even if selected
  500. + Until Return for debugger
  501. + Code for Quit inside GDB Window
  502. Revision 1.18 1999/07/10 01:24:16 pierre
  503. + First implementation of watches window
  504. Revision 1.17 1999/06/30 23:58:14 pierre
  505. + BreakpointsList Window implemented
  506. with Edit/New/Delete functions
  507. + Individual breakpoint dialog with support for all types
  508. ignorecount and conditions
  509. (commands are not yet implemented, don't know if this wolud be useful)
  510. awatch and rwatch have problems because GDB does not annotate them
  511. I fixed v4.16 for this
  512. Revision 1.16 1999/06/28 19:32:19 peter
  513. * fixes from gabor
  514. Revision 1.15 1999/06/25 00:39:58 pierre
  515. help for cmSymbol,cmAddWatch,cmStack and cmBreakpoint list
  516. Revision 1.14 1999/04/07 21:55:46 peter
  517. + object support for browser
  518. * html help fixes
  519. * more desktop saving things
  520. * NODEBUG directive to exclude debugger
  521. Revision 1.13 1999/03/23 15:11:28 peter
  522. * desktop saving things
  523. * vesa mode
  524. * preferences dialog
  525. Revision 1.12 1999/03/16 12:38:09 peter
  526. * tools macro fixes
  527. + tph writer
  528. + first things for resource files
  529. Revision 1.11 1999/03/01 15:41:53 peter
  530. + Added dummy entries for functions not yet implemented
  531. * MenuBar didn't update itself automatically on command-set changes
  532. * Fixed Debugging/Profiling options dialog
  533. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is set
  534. * efBackSpaceUnindents works correctly
  535. + 'Messages' window implemented
  536. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  537. + Added TP message-filter support (for ex. you can call GREP thru
  538. GREP2MSG and view the result in the messages window - just like in TP)
  539. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  540. so topic search didn't work...
  541. * In FPHELP.PAS there were still context-variables defined as word instead
  542. of THelpCtx
  543. * StdStatusKeys() was missing from the statusdef for help windows
  544. + Topic-title for index-table can be specified when adding a HTML-files
  545. Revision 1.10 1999/02/22 11:51:35 peter
  546. * browser updates from gabor
  547. Revision 1.9 1999/02/19 18:43:45 peter
  548. + open dialog supports mask list
  549. Revision 1.8 1999/02/11 19:07:21 pierre
  550. * GDBWindow redesigned :
  551. normal editor apart from
  552. that any kbEnter will send the line (for begin to cursor)
  553. to GDB command !
  554. GDBWindow opened in Debugger Menu
  555. still buggy :
  556. -echo should not be present if at end of text
  557. -GDBWindow becomes First after each step (I don't know why !)
  558. Revision 1.7 1999/02/08 17:40:01 pierre
  559. + cmContToCursor added
  560. Revision 1.6 1999/02/08 10:37:43 peter
  561. + html helpviewer
  562. Revision 1.5 1999/02/04 12:23:44 pierre
  563. + cmResetDebugger and cmGrep
  564. * Avoid StatusStack overflow
  565. Revision 1.4 1999/01/21 11:54:13 peter
  566. + tools menu
  567. + speedsearch in symbolbrowser
  568. * working run command
  569. Revision 1.3 1999/01/04 11:49:44 peter
  570. * 'Use tab characters' now works correctly
  571. + Syntax highlight now acts on File|Save As...
  572. + Added a new class to syntax highlight: 'hex numbers'.
  573. * There was something very wrong with the palette managment. Now fixed.
  574. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  575. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  576. process revised
  577. Revision 1.2 1998/12/28 15:47:44 peter
  578. + Added user screen support, display & window
  579. + Implemented Editor,Mouse Options dialog
  580. + Added location of .INI and .CFG file
  581. + Option (INI) file managment implemented (see bottom of Options Menu)
  582. + Switches updated
  583. + Run program
  584. Revision 1.3 1998/12/22 10:39:42 peter
  585. + options are now written/read
  586. + find and replace routines
  587. }