test_class.declarator: font          = new Font("Verdana", Font.PLAIN, 12)
test_class.modifier: private final
test_class.original_string: private final Font                  font          = new Font("Verdana", Font.PLAIN, 12);
test_class.type: Font
test_class.var_name: font
test_class.declarator: element       = new TextOutline("N", font)
test_class.modifier: private final
test_class.original_string: private final TextOutline           element       = new TextOutline("N", font);
test_class.type: TextOutline
test_class.var_name: element
test_class.declarator: hydrogen      = new TextOutline("H", font)
test_class.modifier: private final
test_class.original_string: private final TextOutline           hydrogen      = new TextOutline("H", font);
test_class.type: TextOutline
test_class.var_name: hydrogen
test_class.declarator: atomGenerator = new StandardAtomGenerator(font)
test_class.modifier: private final
test_class.original_string: private final StandardAtomGenerator atomGenerator = new StandardAtomGenerator(font);
test_class.type: StandardAtomGenerator
test_class.var_name: atomGenerator
test_class.file: display/renderbasic/src/test/java/org/openscience/cdk/renderer/generators/standard/StandardAtomGeneratorTest.java
test_class.identifier: StandardAtomGeneratorTest
test_case.body: @Test
      public void numberedRgroupSymbol() {
          AtomSymbol atomSymbol = atomGenerator.generatePseudoSymbol("R1", HydrogenPosition.Right, null);
          List<Shape> shapes = atomSymbol.getOutlines();
          assertThat(shapes.size(), is(2));
      }
test_case.class_method_signature: StandardAtomGeneratorTest.numberedRgroupSymbol()
test_case.full_signature: @Test public void numberedRgroupSymbol()
test_case.identifier: numberedRgroupSymbol
test_case.invocations: generatePseudoSymbol getOutlines assertThat size is
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void numberedRgroupSymbol()
focal_class.declarator: DEFAULT_ADJUNCT_SPACING_RATIO = 0.15d
focal_class.modifier: private final static
focal_class.original_string: private final static double DEFAULT_ADJUNCT_SPACING_RATIO = 0.15d;
focal_class.type: double
focal_class.var_name: DEFAULT_ADJUNCT_SPACING_RATIO
focal_class.declarator: DEFAULT_SUBSCRIPT_SIZE        = 0.6d
focal_class.modifier: private final static
focal_class.original_string: private final static double DEFAULT_SUBSCRIPT_SIZE        = 0.6d;
focal_class.type: double
focal_class.var_name: DEFAULT_SUBSCRIPT_SIZE
focal_class.declarator: font
focal_class.modifier: private final
focal_class.original_string: private final Font font;
focal_class.type: Font
focal_class.var_name: font
focal_class.declarator: scriptSize
focal_class.modifier: private final
focal_class.original_string: private final double scriptSize;
focal_class.type: double
focal_class.var_name: scriptSize
focal_class.declarator: padding
focal_class.modifier: private final
focal_class.original_string: private final double padding;
focal_class.type: double
focal_class.var_name: padding
focal_class.declarator: defaultHydrogenLabel
focal_class.modifier: private final
focal_class.original_string: private final TextOutline defaultHydrogenLabel;
focal_class.type: TextOutline
focal_class.var_name: defaultHydrogenLabel
focal_class.declarator: BULLET = '•', 
focal_class.modifier: private static final
focal_class.original_string: private static final char BULLET = '•', // '\u2022'
              PLUS                     = '+', MINUS = '−'; /
focal_class.type: char
focal_class.var_name: BULLET
focal_class.file: display/renderbasic/src/main/java/org/openscience/cdk/renderer/generators/standard/StandardAtomGenerator.java
focal_class.identifier: StandardAtomGenerator
focal_class.class_method_signature: StandardAtomGenerator.StandardAtomGenerator(Font font)
focal_class.full_signature:   StandardAtomGenerator(Font font)
focal_class.identifier: StandardAtomGenerator
focal_class.parameters: (Font font)
focal_class.signature:  StandardAtomGenerator(Font font)
focal_class.class_method_signature: StandardAtomGenerator.StandardAtomGenerator(Font font, double adjunctSpacing, double scriptSize)
focal_class.full_signature: private  StandardAtomGenerator(Font font, double adjunctSpacing, double scriptSize)
focal_class.identifier: StandardAtomGenerator
focal_class.modifiers: private
focal_class.parameters: (Font font, double adjunctSpacing, double scriptSize)
focal_class.signature:  StandardAtomGenerator(Font font, double adjunctSpacing, double scriptSize)
focal_class.class_method_signature: StandardAtomGenerator.generateSymbol(IAtomContainer container, IAtom atom, HydrogenPosition position, RendererModel model)
focal_class.full_signature:  AtomSymbol generateSymbol(IAtomContainer container, IAtom atom, HydrogenPosition position, RendererModel model)
focal_class.identifier: generateSymbol
focal_class.parameters: (IAtomContainer container, IAtom atom, HydrogenPosition position, RendererModel model)
focal_class.return: AtomSymbol
focal_class.signature: AtomSymbol generateSymbol(IAtomContainer container, IAtom atom, HydrogenPosition position, RendererModel model)
focal_class.class_method_signature: StandardAtomGenerator.generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)
focal_class.full_signature:  AtomSymbol generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)
focal_class.identifier: generatePseudoSymbol
focal_class.parameters: (String label, HydrogenPosition position, RendererModel model)
focal_class.return: AtomSymbol
focal_class.signature: AtomSymbol generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)
focal_class.class_method_signature: StandardAtomGenerator.isUpperCase(char c)
focal_class.full_signature: private boolean isUpperCase(char c)
focal_class.identifier: isUpperCase
focal_class.modifiers: private
focal_class.parameters: (char c)
focal_class.return: boolean
focal_class.signature: boolean isUpperCase(char c)
focal_class.class_method_signature: StandardAtomGenerator.isLowerCase(char c)
focal_class.full_signature: private boolean isLowerCase(char c)
focal_class.identifier: isLowerCase
focal_class.modifiers: private
focal_class.parameters: (char c)
focal_class.return: boolean
focal_class.signature: boolean isLowerCase(char c)
focal_class.class_method_signature: StandardAtomGenerator.isDigit(char c)
focal_class.full_signature: private boolean isDigit(char c)
focal_class.identifier: isDigit
focal_class.modifiers: private
focal_class.parameters: (char c)
focal_class.return: boolean
focal_class.signature: boolean isDigit(char c)
focal_class.class_method_signature: StandardAtomGenerator.generateAbbreviatedSymbol(String label, HydrogenPosition position)
focal_class.full_signature:  AtomSymbol generateAbbreviatedSymbol(String label, HydrogenPosition position)
focal_class.identifier: generateAbbreviatedSymbol
focal_class.parameters: (String label, HydrogenPosition position)
focal_class.return: AtomSymbol
focal_class.signature: AtomSymbol generateAbbreviatedSymbol(String label, HydrogenPosition position)
focal_class.class_method_signature: StandardAtomGenerator.generateAbbreviationSymbol(List<String> tokens, HydrogenPosition position)
focal_class.full_signature:  AtomSymbol generateAbbreviationSymbol(List<String> tokens, HydrogenPosition position)
focal_class.identifier: generateAbbreviationSymbol
focal_class.parameters: (List<String> tokens, HydrogenPosition position)
focal_class.return: AtomSymbol
focal_class.signature: AtomSymbol generateAbbreviationSymbol(List<String> tokens, HydrogenPosition position)
focal_class.class_method_signature: StandardAtomGenerator.generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_class.full_signature:  AtomSymbol generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_class.identifier: generatePeriodicSymbol
focal_class.parameters: (final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_class.return: AtomSymbol
focal_class.signature: AtomSymbol generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_class.class_method_signature: StandardAtomGenerator.positionHydrogenLabel(HydrogenPosition position, TextOutline element, TextOutline hydrogen)
focal_class.full_signature:  TextOutline positionHydrogenLabel(HydrogenPosition position, TextOutline element, TextOutline hydrogen)
focal_class.identifier: positionHydrogenLabel
focal_class.parameters: (HydrogenPosition position, TextOutline element, TextOutline hydrogen)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionHydrogenLabel(HydrogenPosition position, TextOutline element, TextOutline hydrogen)
focal_class.class_method_signature: StandardAtomGenerator.positionSubscript(TextOutline label, TextOutline subscript)
focal_class.full_signature:  TextOutline positionSubscript(TextOutline label, TextOutline subscript)
focal_class.identifier: positionSubscript
focal_class.parameters: (TextOutline label, TextOutline subscript)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionSubscript(TextOutline label, TextOutline subscript)
focal_class.class_method_signature: StandardAtomGenerator.positionSuperscript(TextOutline label, TextOutline superscript)
focal_class.full_signature:  TextOutline positionSuperscript(TextOutline label, TextOutline superscript)
focal_class.identifier: positionSuperscript
focal_class.parameters: (TextOutline label, TextOutline superscript)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionSuperscript(TextOutline label, TextOutline superscript)
focal_class.class_method_signature: StandardAtomGenerator.positionAfter(TextOutline before, TextOutline after)
focal_class.full_signature:  TextOutline positionAfter(TextOutline before, TextOutline after)
focal_class.identifier: positionAfter
focal_class.parameters: (TextOutline before, TextOutline after)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionAfter(TextOutline before, TextOutline after)
focal_class.class_method_signature: StandardAtomGenerator.positionChargeLabel(int hydrogens,
                                      HydrogenPosition position,
                                      TextOutline charge,
                                      TextOutline element,
                                      TextOutline hydrogen)
focal_class.full_signature:  TextOutline positionChargeLabel(int hydrogens,
                                      HydrogenPosition position,
                                      TextOutline charge,
                                      TextOutline element,
                                      TextOutline hydrogen)
focal_class.identifier: positionChargeLabel
focal_class.parameters: (int hydrogens,
                                      HydrogenPosition position,
                                      TextOutline charge,
                                      TextOutline element,
                                      TextOutline hydrogen)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionChargeLabel(int hydrogens,
                                      HydrogenPosition position,
                                      TextOutline charge,
                                      TextOutline element,
                                      TextOutline hydrogen)
focal_class.class_method_signature: StandardAtomGenerator.positionMassLabel(TextOutline massLabel, TextOutline elementLabel)
focal_class.full_signature:  TextOutline positionMassLabel(TextOutline massLabel, TextOutline elementLabel)
focal_class.identifier: positionMassLabel
focal_class.parameters: (TextOutline massLabel, TextOutline elementLabel)
focal_class.return: TextOutline
focal_class.signature: TextOutline positionMassLabel(TextOutline massLabel, TextOutline elementLabel)
focal_class.class_method_signature: StandardAtomGenerator.hydrogenXDodge(int hydrogens, int mass, TextOutline elementLabel, TextOutline hydrogenLabel,
                                    TextOutline hydrogenCount, TextOutline massLabel)
focal_class.full_signature: private double hydrogenXDodge(int hydrogens, int mass, TextOutline elementLabel, TextOutline hydrogenLabel,
                                    TextOutline hydrogenCount, TextOutline massLabel)
focal_class.identifier: hydrogenXDodge
focal_class.modifiers: private
focal_class.parameters: (int hydrogens, int mass, TextOutline elementLabel, TextOutline hydrogenLabel,
                                    TextOutline hydrogenCount, TextOutline massLabel)
focal_class.return: double
focal_class.signature: double hydrogenXDodge(int hydrogens, int mass, TextOutline elementLabel, TextOutline hydrogenLabel,
                                    TextOutline hydrogenCount, TextOutline massLabel)
focal_class.class_method_signature: StandardAtomGenerator.isMajorIsotope(int number, int mass)
focal_class.full_signature: private boolean isMajorIsotope(int number, int mass)
focal_class.identifier: isMajorIsotope
focal_class.modifiers: private
focal_class.parameters: (int number, int mass)
focal_class.return: boolean
focal_class.signature: boolean isMajorIsotope(int number, int mass)
focal_class.class_method_signature: StandardAtomGenerator.unboxSafely(Integer value, int defaultValue)
focal_class.full_signature: private static int unboxSafely(Integer value, int defaultValue)
focal_class.identifier: unboxSafely
focal_class.modifiers: private static
focal_class.parameters: (Integer value, int defaultValue)
focal_class.return: int
focal_class.signature: int unboxSafely(Integer value, int defaultValue)
focal_class.class_method_signature: StandardAtomGenerator.chargeAdjunctText(final int charge, final int unpaired)
focal_class.full_signature: static String chargeAdjunctText(final int charge, final int unpaired)
focal_class.identifier: chargeAdjunctText
focal_class.modifiers: static
focal_class.parameters: (final int charge, final int unpaired)
focal_class.return: String
focal_class.signature: String chargeAdjunctText(final int charge, final int unpaired)
focal_class.class_method_signature: StandardAtomGenerator.accessPseudoLabel(IPseudoAtom atom, String defaultLabel)
focal_class.full_signature: static String accessPseudoLabel(IPseudoAtom atom, String defaultLabel)
focal_class.identifier: accessPseudoLabel
focal_class.modifiers: static
focal_class.parameters: (IPseudoAtom atom, String defaultLabel)
focal_class.return: String
focal_class.signature: String accessPseudoLabel(IPseudoAtom atom, String defaultLabel)
focal_method.body: AtomSymbol generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model) {
  
          final Font stylisedFont;
          if (model != null && model.get(PseudoFontStyle.class) != 0) {
              Integer style = model.get(PseudoFontStyle.class);
              stylisedFont = font.deriveFont(style);
          } else {
              stylisedFont = font;
          }
  
          List<TextOutline> outlines = new ArrayList<>(3);
  
          int beg = 0;
          int pos = 0;
          int len = label.length();
  
          // upper case followed by lower case
          while (pos < len && isUpperCase(label.charAt(pos)))
              pos++;
          if (label.charAt(0) != 'R') // Ar is not A^r but 'Ra' is R^a etc
              while (pos < len && isLowerCase(label.charAt(pos)))
                  pos++;
  
          if (pos > beg) {
              outlines.add(new TextOutline(label.substring(beg, pos), stylisedFont));
              beg = pos;
              // 2a etc.
              while (pos < len && isDigit(label.charAt(pos)))
                  pos++;
              while (pos < len && isLowerCase(label.charAt(pos)))
                  pos++;
  
              if (pos > beg) {
                  TextOutline outline = new TextOutline(label.substring(beg, pos), stylisedFont);
                  outline = outline.resize(scriptSize, scriptSize);
                  outline = positionSuperscript(outlines.get(0), outline);
                  outlines.add(outline);
              }
  
              int numPrimes = 0;
              PRIMES:
              while (pos < len) {
                  switch (label.charAt(pos)) {
                      case '\'': numPrimes++; break;
                      case '`': numPrimes++;  break;
                      case '‘': numPrimes++;  break;
                      case '’': numPrimes++;  break;
                      case '‛': numPrimes++;  break;
                      case '“': numPrimes+=2; break;
                      case '”': numPrimes+=2; break;
                      case '′': numPrimes++;  break;
                      case '″': numPrimes+=2; break;
                      case '‴': numPrimes+=3; break;
                      case '⁗': numPrimes+=4; break;
                      case '‵': numPrimes++;  break;
                      case '‶': numPrimes+=2; break;
                      case '‷': numPrimes+=3; break;
                      case '´': numPrimes++;  break;
                      case 'ˊ': numPrimes++;  break;
                      case '́': numPrimes++;  break;
                      case '˝': numPrimes+=2; break;
                      case '̋': numPrimes+=2; break;
                      default: break PRIMES;
                  }
                  pos++;
              }
  
              if (pos < len) {
                  return new AtomSymbol(new TextOutline(label, stylisedFont), Collections.<TextOutline>emptyList());
              } else {
                  TextOutline outline = null;
                  TextOutline ref = outlines.get(outlines.size()-1);
                  switch (numPrimes) {
                      case 0: break;
                      case 1: outline = new TextOutline("′", font); break;
                      case 2: outline = new TextOutline("″", font); break;
                      case 3: outline = new TextOutline("‴", font); break;
                      default:
                          String lab = "";
                          while (numPrimes-->0)
                              lab += "′";
                          outline = new TextOutline(lab, font);
                          break;
                  }
                  if (outline != null) {
                      if (outlines.size() > 1)
                          outline = outline.resize(scriptSize, scriptSize);
                      outline = positionSuperscript(ref, outline);
                      outlines.add(outline);
                  }
              }
  
              // line up text
              for (int i = 1; i < outlines.size(); i++) {
                  TextOutline ref = outlines.get(i - 1);
                  TextOutline curr = outlines.get(i);
                  outlines.set(i, positionAfter(ref, curr));
              }
  
              return new AtomSymbol(outlines.get(0),
                                    outlines.subList(1, outlines.size()));
          } else {
              return new AtomSymbol(new TextOutline(label, stylisedFont), Collections.<TextOutline>emptyList());
          }
      }
focal_method.class_method_signature: StandardAtomGenerator.generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)
focal_method.full_signature:  AtomSymbol generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)
focal_method.identifier: generatePseudoSymbol
focal_method.invocations: get get deriveFont length isUpperCase charAt charAt isLowerCase charAt add substring isDigit charAt isLowerCase charAt substring resize positionSuperscript get add charAt emptyList get size size resize positionSuperscript add size get get set positionAfter get subList size emptyList
focal_method.parameters: (String label, HydrogenPosition position, RendererModel model)
focal_method.return: AtomSymbol
focal_method.signature: AtomSymbol generatePseudoSymbol(String label, HydrogenPosition position, RendererModel model)