private void addCreateLexerMethod(StringComposite sc) {
   sc.add("public " + iTextScannerClassName + " createLexer() {");
   if (OptionManager.INSTANCE.useScalesParser(getContext().getConcreteSyntax())) {
     sc.add("return new " + scannerlessScannerClassName + "();");
   } else {
     sc.add("return new " + antlrScannerClassName + "(new " + antlrLexerClassName + "());");
   }
   sc.add("}");
   sc.addLineBreak();
 }
  private void addCreateParserMethod(de.devboost.codecomposers.java.JavaComposite sc) {
    String parserClassName = antlrParserClassName;
    if (OptionManager.INSTANCE.useScalesParser(getContext().getConcreteSyntax())) {
      parserClassName = scannerlessParserClassName;
    }

    sc.add(
        "public "
            + iTextParserClassName
            + " createParser("
            + INPUT_STREAM(sc)
            + " inputStream, String encoding) {");
    sc.add("return new " + parserClassName + "().createInstance(inputStream, encoding);");
    sc.add("}");
    sc.addLineBreak();
  }
  @Override
  public void generateJavaContents(JavaComposite sc) {
    useScalesParser = OptionManager.INSTANCE.useScalesParser(getContext().getConcreteSyntax());

    sc.add("package " + getResourcePackageName() + ";");
    sc.addLineBreak();
    sc.addImportsPlaceholder();
    sc.addLineBreak();

    sc.add(
        "public class "
            + getResourceClassName()
            + " implements "
            + iMetaInformationClassName
            + " {");
    sc.addLineBreak();
    addMethods(sc);
    sc.add("}");
  }
  private void addCreatePrinterMethod(de.devboost.codecomposers.java.JavaComposite sc) {
    String usedPrinterClassName;
    boolean useClassicPrinter =
        OptionManager.INSTANCE.getBooleanOptionValue(
            getContext().getConcreteSyntax(), OptionTypes.USE_CLASSIC_PRINTER);

    sc.add(
        "public "
            + iTextPrinterClassName
            + " createPrinter("
            + OUTPUT_STREAM(sc)
            + " outputStream, "
            + iTextResourceClassName
            + " resource) {");
    if (useClassicPrinter) {
      usedPrinterClassName = printerClassName;
    } else {
      usedPrinterClassName = printer2ClassName;
    }
    sc.add("return new " + usedPrinterClassName + "(outputStream, resource);");
    sc.add("}");
    sc.addLineBreak();
  }
  private void addRegisterResourceFactoryMethod(JavaComposite sc) {
    final String secondaryConcreteSyntaxName =
        csUtil.getSecondarySyntaxName(getContext().getConcreteSyntax());

    sc.add("public void registerResourceFactory() {");
    if (secondaryConcreteSyntaxName == null) {
      sc.add("// if no resource factory registered, register delegator");

      sc.add(
          "if ("
              + RESOURCE_FACTORY(sc)
              + ".Registry.INSTANCE.getExtensionToFactoryMap().get(getSyntaxName()) == null) {");
      sc.add(
          RESOURCE_FACTORY(sc)
              + ".Registry.INSTANCE.getExtensionToFactoryMap().put(getSyntaxName(), new "
              + resourceFactoryDelegatorClassName
              + "());");
      sc.add("}");
    } else {
      // if this is a secondary syntax, the ResourceFactory is registered
      // using the 'additional_extension_parser' extension point.
      // Unfortunately, we do not know the name of the corresponding
      // registry because it can be implemented in arbitrary ways in the
      // base resource plug-in.
      sc.addComment(
          "This is a secondary syntax. "
              + "Registering the resource factory is done via the 'additional_extension_parser' extension point.");
    }

    // Register resource factory for additional file extensions if required.
    GenerationContext context = getContext();
    ConcreteSyntax syntax = context.getConcreteSyntax();
    Collection<String> additionalFileExtensions =
        OptionManager.INSTANCE.getStringOptionValueAsCollection(
            syntax, OptionTypes.ADDITIONAL_FILE_EXTENSIONS);

    if (additionalFileExtensions != null && !additionalFileExtensions.isEmpty()) {
      sc.addLineBreak();
      sc.add("Factory.Registry registry = " + RESOURCE_FACTORY(sc) + ".Registry.INSTANCE;");
      sc.add(
          MAP(sc)
              + "<String, Object> extensionToFactoryMap = registry.getExtensionToFactoryMap();");
      sc.addLineBreak();
      sc.add(
          resourceFactoryClassName + " resourceFactory = new " + resourceFactoryClassName + "();");
      sc.addLineBreak();
      sc.addComment("Register resource factory for additional extensions.");

      for (String additionalFileExtension : additionalFileExtensions) {
        additionalFileExtension = additionalFileExtension.trim();

        sc.add("if (extensionToFactoryMap.get(\"" + additionalFileExtension + "\") == null) {");
        sc.add("extensionToFactoryMap.put(\"" + additionalFileExtension + "\", resourceFactory);");
        sc.add("}");
        sc.addLineBreak();
      }
    }

    sc.add("}");
    sc.addLineBreak();
  }