code: private final void step3() {
          if (k == 0)
              return;
          /* For Bug 1 */
          switch (sb.charAt(k-1)) { 
          case 'a':
              if (ends("ational")) 
                  r("ate");
              else if (ends("tional"))
                  r("tion"); 
              break;
          case 'c':
              if (ends("enci")) 
                  r("ence");
              else if (ends("anci")) 
                  r("ance");
              break;
          case 'e':
              if (ends("izer")) 
                  r("ize");
              break;
          case 'l':
              if (ends("bli"))
                  r("ble");
              else if (ends("alli"))
                  r("al");  
              else if (ends("entli"))
                  r("ent"); 
              else if (ends("eli"))
                  r("e");
              else if (ends("ousli"))
                  r("ous");
              break; 
          case 'o':
              if (ends("ization")) 
                  r("ize"); 
              else if (ends("ation")) 
                  r("ate"); 
              else if (ends("ator"))
                  r("ate");
              break;
          case 's':
              if (ends("alism")) 
                  r("al"); 
              else if (ends("iveness")) 
                  r("ive");
              else if (ends("fulness")) 
                  r("ful"); 
              else if (ends("ousness")) 
                  r("ous"); 
              break; 
          case 't': 
              if (ends("aliti")) 
                  r("al"); 
              else if (ends("iviti"))
                  r("ive");
              else if (ends("biliti")) 
                  r("ble");
              break;
          case 'g':
              if (ends("logi")) 
                  r("log");
              break;
          }
      }
docs: /* step3() maps double suffices to single ones. so -ization ( = -ize plus
  -ation) maps to -ize etc. note that the string before the suffix must give
  m() > 0.