NCBI C++ ToolKit
parse_text_options_dlg.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: parse_text_options_dlg.cpp 36048 2016-08-01 19:08:05Z filippov $
2  * ===========================================================================
3  *
4  * PUBLIC DOMAIN NOTICE
5  * National Center for Biotechnology Information
6  *
7  * This software/database is a "United States Government Work" under the
8  * terms of the United States Copyright Act. It was written as part of
9  * the author's official duties as a United States Government employee and
10  * thus cannot be copyrighted. This software/database is freely available
11  * to the public for use. The National Library of Medicine and the U.S.
12  * Government have not placed any restriction on its use or reproduction.
13  *
14  * Although all reasonable efforts have been taken to ensure the accuracy
15  * and reliability of the software and data, the NLM and the U.S.
16  * Government do not and cannot warrant the performance or results that
17  * may be obtained by using this software or data. The NLM and the U.S.
18  * Government disclaim all warranties, express or implied, including
19  * warranties of performance, merchantability or fitness for any particular
20  * purpose.
21  *
22  * Please cite the author in any work or product based on this material.
23  *
24  * ===========================================================================
25  *
26  * Authors: Colleen Bollin
27  */
28 
29 
30 #include <ncbi_pch.hpp>
33 
34 #include <wx/sizer.h>
35 #include <wx/stattext.h>
36 
37 ////@begin XPM images
38 ////@end XPM images
39 
41 
42 /*!
43  * CParseTextOptionsDlg type definition
44  */
45 
46 IMPLEMENT_DYNAMIC_CLASS( CParseTextOptionsDlg, wxPanel )
47 
48 
49 /*!
50  * CParseTextOptionsDlg event table definition
51  */
52 
53 BEGIN_EVENT_TABLE( CParseTextOptionsDlg, wxPanel )
54 
55 ////@begin CParseTextOptionsDlg event table entries
56  EVT_RADIOBUTTON( ID_CPARSEOPTS_START_TEXT_BTN, CParseTextOptionsDlg::OnStartTxtBtnSelected)
57  EVT_RADIOBUTTON( ID_CPARSEOPTS_START_DIGITS_BTN, CParseTextOptionsDlg::OnStartDigitsBtnSelected)
58  EVT_RADIOBUTTON( ID_CPARSEOPTS_START_LETTERS_BTN, CParseTextOptionsDlg::OnStartLettersBtnSelected)
59  EVT_RADIOBUTTON( ID_CPARSEOPTS_END_TEXT_BTN, CParseTextOptionsDlg::OnEndTextBtnSelected)
60  EVT_RADIOBUTTON( ID_CPARSEOPTS_END_DIGITS_BTN, CParseTextOptionsDlg::OnEndDigitsBtnSelected)
61  EVT_RADIOBUTTON( ID_CPARSEOPTS_END_LETTERS_BTN, CParseTextOptionsDlg::OnEndLettersBtnSelected)
62  EVT_CHECKBOX( ID_CPARSEOPTS_REMOVE_FROM_PARSED_BTN, CParseTextOptionsDlg::OnRemoveFromParseSelected)
63 ////@end CParseTextOptionsDlg event table entries
64 
66 
67 
68 /*!
69  * CParseTextOptionsDlg constructors
70  */
71 
73 {
74  Init();
75 }
76 
77 CParseTextOptionsDlg::CParseTextOptionsDlg( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, bool hide_remove_text_options )
78  : m_HideRemoveTextOptions(hide_remove_text_options)
79 {
80  Init();
81  Create(parent, id, pos, size, style);
82 }
83 
84 
85 /*!
86  * CParseTextOptionsDlg creator
87  */
88 
89 bool CParseTextOptionsDlg::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
90 {
91 ////@begin CParseTextOptionsDlg creation
92  wxPanel::Create( parent, id, pos, size, style );
93 
95  if (GetSizer())
96  {
97  GetSizer()->SetSizeHints(this);
98  }
99  Centre();
100 ////@end CParseTextOptionsDlg creation
101  return true;
102 }
103 
104 
105 /*!
106  * CParseTextOptionsDlg destructor
107  */
108 
110 {
111 ////@begin CParseTextOptionsDlg destruction
112 ////@end CParseTextOptionsDlg destruction
113 }
114 
115 
116 /*!
117  * Member initialisation
118  */
119 
121 {
122 ////@begin CParseTextOptionsDlg member initialisation
130  m_UpToBtn = NULL;
132  m_EndTextBtn = NULL;
133  m_EndTextTxt = NULL;
138  m_Case = NULL;
139  m_WholeWord = NULL;
140 ////@end CParseTextOptionsDlg member initialisation
141 }
142 
143 
144 /*!
145  * Control creation for CParseTextOptionsDlg
146  */
147 
149 {
150 ////@begin CParseTextOptionsDlg content construction
151 #if defined(__WXMSW__)
152  wxPanel* itemPanel1 = new wxPanel(this);
153 #else
154  CParseTextOptionsDlg* itemPanel1 = this;
155 #endif
156 
157  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
158  itemPanel1->SetSizer(itemBoxSizer2);
159 
160  wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(0, 4, 0, 0);
161  itemBoxSizer2->Add(itemFlexGridSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0);
162 
163  wxStaticText* itemStaticText4 = new wxStaticText( itemPanel1, wxID_STATIC, _("Between"), wxDefaultPosition, wxDefaultSize, 0 );
164  itemFlexGridSizer3->Add(itemStaticText4, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 3);
165 
166  wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
167  itemFlexGridSizer3->Add(itemBoxSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1);
168 
169  m_JustAfterBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_JUST_AFTER_BTN, _("just after"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
170  m_JustAfterBtn->SetValue(true);
171  itemBoxSizer5->Add(m_JustAfterBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
172 
173  m_StartingAtBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_RADIOBUTTON5, _("starting at"), wxDefaultPosition, wxDefaultSize, 0);
174  m_StartingAtBtn->SetValue(false);
175  itemBoxSizer5->Add(m_StartingAtBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
176 
177  wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL);
178  itemFlexGridSizer3->Add(itemBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1);
179 
180  m_StartTextBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_START_TEXT_BTN, _("Text"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
181  m_StartTextBtn->SetValue(true);
182  itemBoxSizer8->Add(m_StartTextBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
183 
184  m_StartTextTxt = new wxTextCtrl(itemPanel1, ID_CPARSEOPTS_START_TEXT_TXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
185  itemBoxSizer8->Add(m_StartTextTxt, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
186 
187  m_StartDigitsBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_START_DIGITS_BTN, _("Digits"), wxDefaultPosition, wxDefaultSize, 0);
188  m_StartDigitsBtn->SetValue(false);
189  itemBoxSizer8->Add(m_StartDigitsBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
190 
191  m_StartLettersBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_START_LETTERS_BTN, _("Letters"), wxDefaultPosition, wxDefaultSize, 0);
192  m_StartLettersBtn->SetValue(false);
193  itemBoxSizer8->Add(m_StartLettersBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
194 
195  m_AlsoRemoveBefore = new CNoTabCheckBox(itemPanel1, ID_CPARSEOPTS_ALSO_RMV_BEFORE_PARSE, _("Also remove search pattern"), wxDefaultPosition, wxDefaultSize, 0);
196  m_AlsoRemoveBefore->SetValue(false);
197  m_AlsoRemoveBefore->Enable(false);
198  itemBoxSizer8->Add(m_AlsoRemoveBefore, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
199 
200  itemFlexGridSizer3->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 0);
201 
202  wxStaticText* itemStaticText15 = new wxStaticText( itemPanel1, wxID_STATIC, _("and"), wxDefaultPosition, wxDefaultSize, 0 );
203  itemFlexGridSizer3->Add(itemStaticText15, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 3);
204 
205  wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL);
206  itemFlexGridSizer3->Add(itemBoxSizer16, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1);
207 
208  m_UpToBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_UP_TO_BTN, _("up to"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
209  m_UpToBtn->SetValue(true);
210  itemBoxSizer16->Add(m_UpToBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
211 
212  m_IncludingBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_INCLUDING_BTN, _("including"), wxDefaultPosition, wxDefaultSize, 0);
213  m_IncludingBtn->SetValue(false);
214  itemBoxSizer16->Add(m_IncludingBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
215 
216  wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxHORIZONTAL);
217  itemFlexGridSizer3->Add(itemBoxSizer19, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1);
218 
219  m_EndTextBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_END_TEXT_BTN, _("Text"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
220  m_EndTextBtn->SetValue(true);
221  itemBoxSizer19->Add(m_EndTextBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
222 
223  m_EndTextTxt = new wxTextCtrl(itemPanel1, ID_CPARSEOPTS_END_TEXT_TXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
224  itemBoxSizer19->Add(m_EndTextTxt, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
225 
226  m_EndDigitsBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_END_DIGITS_BTN, _("Digits"), wxDefaultPosition, wxDefaultSize, 0);
227  m_EndDigitsBtn->SetValue(false);
228  itemBoxSizer19->Add(m_EndDigitsBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
229 
230  m_EndLettersBtn = new CNoTabRadioButton(itemPanel1, ID_CPARSEOPTS_END_LETTERS_BTN, _("Letters"), wxDefaultPosition, wxDefaultSize, 0);
231  m_EndLettersBtn->SetValue(false);
232  itemBoxSizer19->Add(m_EndLettersBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
233 
234  m_AlsoRemoveAfter = new CNoTabCheckBox(itemPanel1, ID_CPARSEOPTS_ALSO_RMV_AFTER_PARSE, _("Also remove search pattern"), wxDefaultPosition, wxDefaultSize, 0);
235  m_AlsoRemoveAfter->SetValue(false);
236  m_AlsoRemoveAfter->Enable(false);
237  itemBoxSizer19->Add(m_AlsoRemoveAfter, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
238 
239  wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxHORIZONTAL);
240  itemBoxSizer2->Add(itemBoxSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 1);
241 
242  m_RemoveFromParsedBtn = new CNoTabCheckBox(itemPanel1, ID_CPARSEOPTS_REMOVE_FROM_PARSED_BTN, _("Remove from parsed field"), wxDefaultPosition, wxDefaultSize, 0);
243  m_RemoveFromParsedBtn->SetValue(false);
244  itemBoxSizer25->Add(m_RemoveFromParsedBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
245 
246  m_Case = new CNoTabCheckBox(itemPanel1, ID_CPARSEOPTS_CASE_INSENS_PARSE, _("Case Insensitive"), wxDefaultPosition, wxDefaultSize, 0);
247  m_Case->SetValue(false);
248  itemBoxSizer25->Add(m_Case, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
249 
250  m_WholeWord = new CNoTabCheckBox(itemPanel1, ID_CPARSEOPTS_WHOLE_WORD_PARSE, _("Whole Word"), wxDefaultPosition, wxDefaultSize, 0);
251  m_WholeWord->SetValue(false);
252  itemBoxSizer25->Add(m_WholeWord, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3);
253 
254 #if defined(__WXMSW__)
255  wxBoxSizer* main_sizer = new wxBoxSizer(wxHORIZONTAL);
256  main_sizer->Add(itemPanel1, 1, wxALL|wxGROW, 0);
257  SetSizerAndFit(main_sizer);
258 #endif
259 ////@end CParseTextOptionsDlg content construction
261  {
262  m_StartTextBtn->Hide();
263  m_StartDigitsBtn->Hide();
264  m_StartLettersBtn->Hide();
265  m_AlsoRemoveBefore->Hide();
266  m_EndTextBtn->Hide();
267  m_EndDigitsBtn->Hide();
268  m_EndLettersBtn->Hide();
269  m_AlsoRemoveAfter->Hide();
270  m_RemoveFromParsedBtn->Hide();
271  }
272 }
273 
274 
276 {
277  m_JustAfterBtn->SetValue(true);
278  m_StartingAtBtn->SetValue(false);
279  m_StartTextBtn->SetValue(true);
280  m_StartTextTxt->SetValue(wxEmptyString);
281  m_StartDigitsBtn->SetValue(false);
282  m_StartLettersBtn->SetValue(false);
283  m_AlsoRemoveBefore->SetValue(false);
284  m_UpToBtn->SetValue(true);
285  m_IncludingBtn->SetValue(false);
286  m_EndTextBtn->SetValue(true);
287  m_EndTextTxt->SetValue(wxEmptyString);
288  m_EndDigitsBtn->SetValue(false);
289  m_EndLettersBtn->SetValue(false);
290  m_AlsoRemoveAfter->SetValue(false);
291  m_RemoveFromParsedBtn->SetValue(false);
292  m_Case->SetValue(false);
293  m_WholeWord->SetValue(false);
294  m_AlsoRemoveBefore->Enable(false);
295  m_AlsoRemoveAfter->Enable(false);
296  m_StartTextTxt->Enable(true);
297  m_EndTextTxt->Enable(true);
298 }
299 
300 /*!
301  * Should we show tooltips?
302  */
303 
305 {
306  return true;
307 }
308 
309 /*!
310  * Get bitmap resources
311  */
312 
313 wxBitmap CParseTextOptionsDlg::GetBitmapResource( const wxString& name )
314 {
315  // Bitmap retrieval
316 ////@begin CParseTextOptionsDlg bitmap retrieval
317  wxUnusedVar(name);
318  return wxNullBitmap;
319 ////@end CParseTextOptionsDlg bitmap retrieval
320 }
321 
322 /*!
323  * Get icon resources
324  */
325 
326 wxIcon CParseTextOptionsDlg::GetIconResource( const wxString& name )
327 {
328  // Icon retrieval
329 ////@begin CParseTextOptionsDlg icon retrieval
330  wxUnusedVar(name);
331  return wxNullIcon;
332 ////@end CParseTextOptionsDlg icon retrieval
333 }
334 
335 
336 /*!
337  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_TXT_BTN
338  */
339 
340 void CParseTextOptionsDlg::OnStartTxtBtnSelected( wxCommandEvent& event )
341 {
342  m_StartTextTxt->Enable(true);
343 }
344 
345 
346 /*!
347  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_LETTERS_BTN
348  */
349 
351 {
352  m_StartTextTxt->Enable(false);
353 }
354 
355 
356 /*!
357  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_DIGITS_BTN
358  */
359 
361 {
362  m_StartTextTxt->Enable(false);
363 }
364 
365 
366 /*!
367  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_TEXT_BTN
368  */
369 
370 void CParseTextOptionsDlg::OnEndTextBtnSelected( wxCommandEvent& event )
371 {
372  m_EndTextTxt->Enable(true);
373 }
374 
375 
376 /*!
377  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_DIGITS_BTN
378  */
379 
380 void CParseTextOptionsDlg::OnEndDigitsBtnSelected( wxCommandEvent& event )
381 {
382  m_EndTextTxt->Enable(false);
383 }
384 
385 
386 /*!
387  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_LETTERS_BTN
388  */
389 
391 {
392  m_EndTextTxt->Enable(false);
393 }
394 
396 {
397  m_AlsoRemoveBefore->Enable(m_RemoveFromParsedBtn->IsChecked());
398  m_AlsoRemoveAfter->Enable(m_RemoveFromParsedBtn->IsChecked());
399 }
400 
401 
403 {
404  CRef<objects::edit::CParseTextOptions> options(new objects::edit::CParseTextOptions());
405 
406  if (m_StartTextBtn->GetValue()) {
407  string text = ToStdString(m_StartTextTxt->GetValue());
408  options->SetStartText(text);
409  } else if (m_StartDigitsBtn->GetValue()) {
410  options->SetStartDigits();
411  } else if (m_StartLettersBtn->GetValue()) {
412  options->SetStartLetters();
413  }
414  options->SetIncludeStart(m_StartingAtBtn->GetValue());
415  options->SetShouldRmvBeforePattern(m_AlsoRemoveBefore->GetValue());
416 
417  if (m_EndTextBtn->GetValue()) {
418  string text = ToStdString(m_EndTextTxt->GetValue());
419  options->SetStopText(text);
420  } else if (m_EndDigitsBtn->GetValue()) {
421  options->SetStopDigits();
422  } else if (m_EndLettersBtn->GetValue()) {
423  options->SetStopLetters();
424  }
425  options->SetIncludeStop(m_IncludingBtn->GetValue());
426  options->SetShouldRmvAfterPattern(m_AlsoRemoveAfter->GetValue());
427 
428  options->SetShouldRemove(m_RemoveFromParsedBtn->GetValue());
429  options->SetCaseInsensitive(m_Case->GetValue());
430  options->SetWholeWord(m_WholeWord->GetValue());
431 
432  return options;
433 }
434 
435 
437 {
439  return options->GetSelectedText(input);
440 }
441 
442 
EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX, CAdjustFeaturesForGaps::OnKnownUnknownSelected) EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX1
void CreateControls()
Creates the controls and sizers.
CNoTabRadioButton * m_EndTextBtn
void OnStartTxtBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_TXT_BTN
void OnRemoveFromParseSelected(wxCommandEvent &event)
wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_REMOVE_FROM_PARSED_BTN
void OnStartDigitsBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_DIGITS_BTN
CNoTabCheckBox * m_AlsoRemoveBefore
string GetSelectedText(const string &input)
CNoTabRadioButton * m_UpToBtn
CNoTabRadioButton * m_StartingAtBtn
CNoTabCheckBox * m_AlsoRemoveAfter
void OnEndLettersBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_LETTERS_BTN
bool Create(wxWindow *parent, wxWindowID id=ID_CPARSETEXTOPTIONSDLG, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(400, 300), long style=wxTAB_TRAVERSAL)
Creation.
CNoTabRadioButton * m_StartLettersBtn
CNoTabRadioButton * m_JustAfterBtn
CNoTabRadioButton * m_EndDigitsBtn
CNoTabCheckBox * m_RemoveFromParsedBtn
void Init()
Initialises member variables.
void OnStartLettersBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_START_LETTERS_BTN
static bool ShowToolTips()
Should we show tooltips?
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
void OnEndDigitsBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_DIGITS_BTN
CNoTabRadioButton * m_StartDigitsBtn
CRef< objects::edit::CParseTextOptions > GetParseOptions()
CNoTabRadioButton * m_EndLettersBtn
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
CNoTabRadioButton * m_IncludingBtn
void OnEndTextBtnSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_END_TEXT_BTN
CNoTabRadioButton * m_StartTextBtn
CRef –.
Definition: ncbiobj.hpp:618
#define _(proto)
Definition: ct_nlmzip_i.h:78
static void Init(void)
Definition: cursor6.c:76
#define NULL
Definition: ncbistd.hpp:225
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
END_EVENT_TABLE()
static int input()
static void text(MDB_val *v)
Definition: mdb_dump.c:62
const struct ncbi::grid::netcache::search::fields::SIZE size
string ToStdString(const wxString &s)
Definition: wx_utils.hpp:161
Modified on Mon Feb 26 03:59:54 2024 by modify_doxy.py rev. 669887