C++ code to strip html tags from strings using wxWidgets

I’m writing a small app (NoteSearch) to search through OneNote pages better than the standard OneNote search function. Since OneNote returns html strings and I’m only interested in the text itself I needed a simple function to remove the html tags. wxWidgets provides nearly everything, but I couldn’t find a function, which does this job. So I crawled the internet and found code on some webpage (actually it’s from the book Thinking in C++ – Volume 2: Practical Programming from Bruce Eckel and Chuck Allison), which I “rewrote” for the wxWidgets library.

wxString& stripHTMLTags(wxString& s, bool reset)
{
  static bool inTag = false;
  bool done = false;

  if (reset)
    inTag = false;

  while (!done) {
    if (inTag) {
      // The previous line started an HTML tag
      // but didn't finish. Must search for '>'.
      int rightPos = s.find('>');
      if (rightPos != wxString::npos) {
        inTag = false;
        s.erase(0, rightPos + 1);
      }
      else {
        done = true;
        s.erase();
      }
    }
    else {
      // Look for start of tag:
      size_t leftPos = s.find('<');
      if (leftPos != wxString::npos) {
        // See if tag close is in this line:
        size_t rightPos = s.find('>');
        if (rightPos == wxString::npos) {
          inTag = done = true;
          s.erase(leftPos);
        }
        else
          s.erase(leftPos, rightPos - leftPos + 1);
      }
      else
        done = true;
    }
  }

  // Replace some special HTML characters
  s.Replace("<", "<", true);
  s.Replace(">", ">", true);
  s.Replace("&", "&", true);
  s.Replace(" ", " ", true);
  s.Replace(""", "'", true);

  return s;
}

You might need to replace some more special characters depending on your needs. On a side note I didn’t manage to run SyntaxHighlighter Evolved with the Gutenberg editor of WordPress 5.x. well :(. I just can’t change the block type to SHE. You need to press the + above or below a block to add a SHE block, but source code is not nicely formatted. So I use the EnlighterJS source code formatted and I’m happy.

The last part about the replacement of special HTML characters is obviously to special for the code highlighters. It should actually look like this:

Somehow this is like a dog, which bites in its own tail….

Remove duplicate entries in “Open With…” Popup in Mac OS X (Mountain Lion)

After running Mac OS X for some years I encountered that the “Open With…” popup menu had multiple entries of one program listed, which was kind of annoying. I tried to find solutions for this, but couldn’t find one, until I eventually ask Dr. Google the right question and found a blog post about it. Anyway, all you have to do is to start the Terminal.app and run

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/\
LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local\
-domain system -domain user

Then restart the Finder.app or restart the computer. Worked well with Mountain Lion!

The Greens library by Peter Koval and Stephan Fritzsche

In of my former research projects I wrote a Single Scatter Cluster code (called YaSC) where I made use of “The Greens library”. I found it quite useful to test my own routines against functions of this library as well as the Gnu Scientific Library. While the latter is still around and alive is the Greens library not to be found in the net anymore. Since I found it quite useful and I’m sure it’s useful to others as well I’m publishing the code again.

Continue reading The Greens library by Peter Koval and Stephan Fritzsche

cmake module to find Gnu Scientific Library, FindGSL.cmake

There is no official FindGSL.cmake module in the cmake distribution to “automagically” find the Gnu Scientific Library on Windows, Linux and Mac OS X. I have written such a module which works for my configurations, but might not cover all GSL installation on all OS. But you can modify it to fit your needs.

Continue reading cmake module to find Gnu Scientific Library, FindGSL.cmake

Solution for “My Mac OS X GUI program doesn’t get focus if it’s outside an application bundle”

This problem regularly comes up at the wxWidgets mailing list: You write an application for Mac OS X which utilizes a GUI and when you start the program, you can see the user interface, but the window doesn’t have the focus and also you can’t click it. So the window is not reactive in any way. Usually the answer is, that you should put your program in an application bundle, which is basically a folder which is called “something.app” (the executable needs to be copied to “Contents/MacOS” and you also might need to add an Info.plist file) and run the application bundle with “open something.app”. But there are situations where this is not really possible, e.g. you have some command line tool (PLplot program) and then you run some code which opens a GUI (wxWidgets driver for PLplot). If you write some easy program to calculate something and show a plot with the help of PLplot you don’t want to create an application bundle for that. Continue reading Solution for “My Mac OS X GUI program doesn’t get focus if it’s outside an application bundle”

Install Gnuplot 4.4.0 on Mac OS X

In a former post I showed how Gnuplot 4.2.6 could be easily installed on Mac OS X. In the meantime Gnuplot 4.4.0 was released and although the wxWidgets terminal still doesn’t work on Mac OS X, there are the new cairo based terminals which provide png and pdf output. These terminals replace the gd terminals (libgd is not easily installed due it’s dependencies) and the old pdf terminal (which depends on the not-very-free pdflib). Since gif and jpeg (libgd terminal) shouldn’t be used for plots anyways, this is no loss. Since these formats are the ones which I need mainly, I show in this post how we could compile and install Gnuplot with little effort, providing X11, png and pdf terminal (and others which are compiled in anyway). Continue reading Install Gnuplot 4.4.0 on Mac OS X

Install Debian Etch as guest in Virtualbox

In order to prepare Linux executables for distribution, it’s a good idea to compile the executable in an old Linux distribution. Thus it depends only on “old” versions of libraries and the executable should work on most distributions out there (which provide newer but backward compatible libraries). E.g. Dialogblocks, a RAD for wxWidgets, is built in Debian Etch. If you don’t have a spare computer lying around it’s a good idea to install Debian Etch in a virtual machine like VirtualBox. Continue reading Install Debian Etch as guest in Virtualbox

Install Gnuplot 4.4.0 on Ubuntu Linux

The most frequented blog entries here are about installing Gnuplot on Ubuntu Linux or Mac OS X. These entries are still valid for the newer Ubuntu versions. But Gnuplot newest version 4.4.0 was already released, and in this release there are cairo based pdf and png terminals provided. So you don’t need the pdflib anymore. Below you’ll find updated instructions to compile and install Gnuplot 4.4.0 with wxt and pdfcairo terminal. These instructions were tested on Ubuntu 8.04 (Hardy Heron) and Ubuntu 9.10 (Karmic Koala) and should also work on 8.10 (Intrepid Ibex) and 9.04 (Jaunty Jackalop). Continue reading Install Gnuplot 4.4.0 on Ubuntu Linux