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 hydrogenAndHydrogenCountDodgesMassLabel() {
          AtomSymbol symbol = atomGenerator.generatePeriodicSymbol(7, 2, 15, 0, 0, HydrogenPosition.Left, null);
          List<Shape> outlines = symbol.getOutlines();
          assertThat(outlines.size(), is(4));
          Shape hydrogenShape = outlines.get(1);
          Shape hydrogenCountShape = outlines.get(2);
          Shape massShape = outlines.get(3);
  
          assertThat(hydrogenShape.getBounds2D().getMaxX(), lessThan(massShape.getBounds2D().getMinX()));
  
          // the count subscript and mass overlap a little
          assertThat(hydrogenCountShape.getBounds2D().getMaxX(), greaterThan(massShape.getBounds2D().getMinX()));
          assertThat(hydrogenCountShape.getBounds2D().getMaxX(), lessThan(massShape.getBounds2D().getMaxX()));
  
          assertThat(hydrogenShape.getBounds2D().getMaxX(), lessThan(hydrogenCountShape.getBounds2D().getMinX()));
      }
test_case.class_method_signature: StandardAtomGeneratorTest.hydrogenAndHydrogenCountDodgesMassLabel()
test_case.full_signature: @Test public void hydrogenAndHydrogenCountDodgesMassLabel()
test_case.identifier: hydrogenAndHydrogenCountDodgesMassLabel
test_case.invocations: generatePeriodicSymbol getOutlines assertThat size is get get get assertThat getMaxX getBounds2D lessThan getMinX getBounds2D assertThat getMaxX getBounds2D greaterThan getMinX getBounds2D assertThat getMaxX getBounds2D lessThan getMaxX getBounds2D assertThat getMaxX getBounds2D lessThan getMinX getBounds2D
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void hydrogenAndHydrogenCountDodgesMassLabel()
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 generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts) {
  
          Font myfont = font;
          final String label;
          switch (number) {
              case 0:
                  label = "*";
                  myfont = font.deriveFont(Font.BOLD);
                  break;
              case 1:
                  if (mass == 2 && opts.get(DeuteriumSymbol.class)) {
                      label = "D";
                      mass = 0;
                  } else {
                      label = Elements.ofNumber(number).symbol();
                  }
                  break;
              default:
                  label = Elements.ofNumber(number).symbol();
                  break;
          }
          TextOutline element = new TextOutline(label, myfont);
          TextOutline hydrogenAdjunct = defaultHydrogenLabel;
  
          // the hydrogen count, charge, and mass adjuncts are script size
          TextOutline hydrogenCount = new TextOutline(Integer.toString(hydrogens), font).resize(scriptSize, scriptSize);
          TextOutline chargeAdjunct = new TextOutline(chargeAdjunctText(charge, unpaired), font).resize(scriptSize,
                                                                                                        scriptSize);
          TextOutline massAdjunct = new TextOutline(Integer.toString(mass), font).resize(scriptSize, scriptSize);
  
          // position each adjunct relative to the element label and each other
          hydrogenAdjunct = positionHydrogenLabel(position, element, hydrogenAdjunct);
          hydrogenCount = positionSubscript(hydrogenAdjunct, hydrogenCount);
          chargeAdjunct = positionChargeLabel(hydrogens, position, chargeAdjunct, element, hydrogenAdjunct);
          massAdjunct = positionMassLabel(massAdjunct, element);
  
          // when the hydrogen label is positioned to the left we may need to nudge it
          // over to account for the hydrogen count and/or the mass adjunct colliding
          // with the element label, we also need to move the charge too '+H3N'
          if (position == Left) {
              final double nudgeX = hydrogenXDodge(hydrogens, mass, element, hydrogenAdjunct, hydrogenCount, massAdjunct);
              hydrogenAdjunct = hydrogenAdjunct.translate(nudgeX, 0);
              hydrogenCount = hydrogenCount.translate(nudgeX, 0);
              chargeAdjunct = chargeAdjunct.translate(nudgeX, 0);
          }
  
          final List<TextOutline> adjuncts = new ArrayList<TextOutline>(4);
  
          if (hydrogens > 0) adjuncts.add(hydrogenAdjunct);
          if (hydrogens > 1) adjuncts.add(hydrogenCount);
          if (charge != 0 || unpaired > 0) adjuncts.add(chargeAdjunct);
          if (mass > 0) adjuncts.add(massAdjunct);
  
          return new AtomSymbol(element, adjuncts);
      }
focal_method.class_method_signature: StandardAtomGenerator.generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_method.full_signature:  AtomSymbol generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_method.identifier: generatePeriodicSymbol
focal_method.invocations: deriveFont get symbol ofNumber symbol ofNumber resize toString resize chargeAdjunctText resize toString positionHydrogenLabel positionSubscript positionChargeLabel positionMassLabel hydrogenXDodge translate translate translate add add add add
focal_method.parameters: (final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)
focal_method.return: AtomSymbol
focal_method.signature: AtomSymbol generatePeriodicSymbol(final int number, final int hydrogens, int mass, final int charge,
                                        final int unpaired, HydrogenPosition position,
                                        RendererModel opts)