code: private int parsePragma(String rule, int pos, int limit) {
          int[] array = new int[2];
  
          // resemblesPragma() has already returned true, so we
          // know that pos points to /use\s/i; we can skip 4 characters
          // immediately
          pos += 4;
  
          // Here are the pragmas we recognize:
          // use variable range 0xE000 0xEFFF;
          // use maximum backup 16;
          // use nfd rules;
          int p = Utility.parsePattern(rule, pos, limit, "~variable range # #~;", array);
          if (p >= 0) {
              setVariableRange(array[0], array[1]);
              return p;
          }
  
          p = Utility.parsePattern(rule, pos, limit, "~maximum backup #~;", array);
          if (p >= 0) {
              pragmaMaximumBackup(array[0]);
              return p;
          }
  
          p = Utility.parsePattern(rule, pos, limit, "~nfd rules~;", null);
          if (p >= 0) {
              pragmaNormalizeRules(Normalizer.NFD);
              return p;
          }
  
          p = Utility.parsePattern(rule, pos, limit, "~nfc rules~;", null);
          if (p >= 0) {
              pragmaNormalizeRules(Normalizer.NFC);
              return p;
          }
  
          // Syntax error: unable to parse pragma
          return -1;
      }
docs: Parse a pragma.  This method assumes resemblesPragma() has
  already returned true.
  @param pos offset to the first non-whitespace character
  of the rule.
  @param limit pointer past the last character of the rule.
  @return the position index after the final ';' of the pragma,
  or -1 on failure.