"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObjectiveCTargetLanguage = exports.objectiveCLanguageConfig = exports.objectiveCOptions = void 0;
const index_js_1 = require("../../RendererOptions/index.js");
const TargetLanguage_js_1 = require("../../TargetLanguage.js");
const ObjectiveCRenderer_js_1 = require("./ObjectiveCRenderer.js");
const utils_js_1 = require("./utils.js");
exports.objectiveCOptions = {
    features: new index_js_1.EnumOption("features", "Interface and implementation", {
        all: { interface: true, implementation: true },
        interface: { interface: true, implementation: false },
        implementation: { interface: false, implementation: true },
    }, "all"),
    justTypes: new index_js_1.BooleanOption("just-types", "Plain types only", false),
    marshallingFunctions: new index_js_1.BooleanOption("functions", "C-style functions", false),
    classPrefix: new index_js_1.StringOption("class-prefix", "Class prefix", "PREFIX", utils_js_1.DEFAULT_CLASS_PREFIX),
    extraComments: new index_js_1.BooleanOption("extra-comments", "Extra comments", false),
};
exports.objectiveCLanguageConfig = {
    displayName: "Objective-C",
    names: ["objc", "objective-c", "objectivec"],
    extension: "m",
};
class ObjectiveCTargetLanguage extends TargetLanguage_js_1.TargetLanguage {
    constructor() {
        super(exports.objectiveCLanguageConfig);
    }
    getOptions() {
        return exports.objectiveCOptions;
    }
    makeRenderer(renderContext, untypedOptionValues) {
        return new ObjectiveCRenderer_js_1.ObjectiveCRenderer(this, renderContext, (0, index_js_1.getOptionValues)(exports.objectiveCOptions, untypedOptionValues));
    }
}
exports.ObjectiveCTargetLanguage = ObjectiveCTargetLanguage;
