Return a list of allowed tags needed for WYSIWYG field types.

For HTML fields we want to override a few tags, e.g, it makes
no sense to disallow `<iframe>` if we have `embed: true` in
config.yml.

@return array
490052
protected function getWyswigAllowedTags()
    {
        $allowedBecauseWysiwyg = [
            'div', 'p', 'br',  'pre', 'a',
            'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
            'li', 'ul', 'ol',
            'strong', 'em', 'i', 'b',
        ];

        if ($this->isWysiwygEnabled('images')) {
            $allowedBecauseWysiwyg[] = 'img';
        }
        if ($this->isWysiwygEnabled('tables')) {
            $allowedBecauseWysiwyg = array_merge(
                $allowedBecauseWysiwyg,
                ['table', 'tbody', 'thead', 'tfoot', 'th', 'td', 'tr']
            );
        }
        if ($this->isWysiwygEnabled('fontcolor')) {
            $allowedBecauseWysiwyg[] = 'span';
        }
        if ($this->isWysiwygEnabled('subsuper')) {
            $allowedBecauseWysiwyg = array_merge(
                $allowedBecauseWysiwyg,
                ['sub', 'sup']
            );
        }
        if ($this->isWysiwygEnabled('underline')) {
            $allowedBecauseWysiwyg[] = 'u';
        }
        if ($this->isWysiwygEnabled('embed')) {
            // Note: Only <iframe>. Not <script>, <embed> or <object>.
            $allowedBecauseWysiwyg[] = 'iframe';
            // We also need to add a few attributes as well.
            $this->setAllowedAttributes(array_unique(array_merge(
                    $this->getAllowedAttributes(),
                    ['src', 'width', 'height', 'frameborder', 'allowfullscreen', 'scrolling']))
            );
        }
        if ($this->isWysiwygEnabled('ruler')) {
            $allowedBecauseWysiwyg[] = 'hr';
        }
        if ($this->isWysiwygEnabled('strike')) {
            $allowedBecauseWysiwyg[] = 's';
        }
        if ($this->isWysiwygEnabled('blockquote')) {
            $allowedBecauseWysiwyg[] = 'blockquote';
        }
        if ($this->isWysiwygEnabled('codesnippet')) {
            $allowedBecauseWysiwyg = array_merge(
                $allowedBecauseWysiwyg,
                ['code', 'pre', 'tt']
            );
        }

        return array_unique(array_merge($this->getAllowedTags(), $allowedBecauseWysiwyg));
    }
780747
public static function getInstantiatedTagObjects()
    {
        $context = self::getInstance();
        foreach ($context->tags as $key => $config) {
            $context->instantiatTag($key);
        }
        
        return $context->tags;
    }
201752
protected function getDisplayRuleFields()
    {
        // Check display rules
        if ($this->Required) {
            return FieldList::create(
                LiteralField::create(
                    'DisplayRulesNotEnabled',
                    '<div class="alert alert-warning">' . _t(
                        __CLASS__.'.DISPLAY_RULES_DISABLED',
                        'Display rules are not enabled for required fields. Please uncheck "Is this field Required?" under "Validation" to re-enable.'
                    ) . '</div>'
                )
            );
        }

        $allowedClasses = array_keys($this->getEditableFieldClasses(false));
        $editableColumns = new GridFieldEditableColumns();
        $editableColumns->setDisplayFields([
            'ConditionFieldID' => function ($record, $column, $grid) use ($allowedClasses) {
                    return DropdownField::create($column, '', EditableFormField::get()->filter([
                            'ParentID' => $this->ParentID,
                            'ClassName' => $allowedClasses,
                        ])->exclude([
                            'ID' => $this->ID,
                        ])->map('ID', 'Title'));
            },
            'ConditionOption' => function ($record, $column, $grid) {
                $options = Config::inst()->get(EditableCustomRule::class, 'condition_options');

                return DropdownField::create($column, '', $options);
            },
            'FieldValue' => function ($record, $column, $grid) {
                return TextField::create($column);
            }
        ]);

        // Custom rules
        $customRulesConfig = GridFieldConfig::create()
            ->addComponents(
                $editableColumns,
                new GridFieldButtonRow(),
                new GridFieldToolbarHeader(),
                new GridFieldAddNewInlineButton(),
                new GridFieldDeleteAction()
            );

        return new FieldList(
            DropdownField::create(
                'ShowOnLoad',
                _t(__CLASS__.'.INITIALVISIBILITY', 'Initial visibility'),
                [
                    1 => 'Show',
                    0 => 'Hide',
                ]
            ),
            DropdownField::create(
                'DisplayRulesConjunction',
                _t(__CLASS__.'.DISPLAYIF', 'Toggle visibility when'),
                [
                    'Or'  => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFOR', 'Any conditions are true'),
                    'And' => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFAND', 'All conditions are true'),
                ]
            ),
            GridField::create(
                'DisplayRules',
                _t(__CLASS__.'.CUSTOMRULES', 'Custom Rules'),
                $this->DisplayRules(),
                $customRulesConfig
            )
        );
    }
317380
private function _allowedStyles(): array
    {
        $styles = [];
        $plugins = array_flip($this->_getRedactorConfig()['plugins'] ?? []);
        if (isset($plugins['alignment'])) {
            $styles['text-align'] = true;
        }
        if (isset($plugins['fontcolor'])) {
            $styles['color'] = true;
        }
        if (isset($plugins['fontfamily'])) {
            $styles['font-family'] = true;
        }
        if (isset($plugins['fontsize'])) {
            $styles['font-size'] = true;
        }
        return $styles;
    }
490533
public function getCMSFields() {
        $fields=new FieldList(
                            new TextField('Name', _t('SnippetLanguage.NAME', '_Name'), null, 100),
                            new TextField('FileExtension', _t('SnippetLanguage.FILE_EXTENSION', '_File Extension'), null, 45),
                            new CheckboxField('Hidden', _t('SnippetLanguage.HIDDEN', '_Hidden'))
                        );
        
        if($this->UserLanguage==false) {
            $fields->replaceField('Name', $fields->dataFieldByName('Name')->performReadonlyTransformation());
            $fields->replaceField('FileExtension', $fields->dataFieldByName('FileExtension')->performReadonlyTransformation());
        }
        
        return $fields;
    }
442239
public function getVariables() 
	{
		if(isset($this->attributes['class'])) {
			$this->attributes['class'] = trim($this
			->attributes['class'].' eden-field-wysiwyg form-control');
		} else {
			$this->attributes['class'] = 'eden-field-wysiwyg form-control';
		}
		
		$loaded = self::$loaded;
		self::$loaded = true;
		
		return array(
			'loaded'		=> $loaded,
			'options'		=> $this->options,
			'attributes' 	=> $this->attributes,
			'value'			=> $this->value);
	}
494401
public function GetHtmlHeadIncludes()
    {
        $aIncludes = parent::GetHtmlHeadIncludes();
        if (!is_array($aIncludes)) {
            $aIncludes = array();
        }

        $this->LoadManufacturer();
        if (!is_null($this->oActiveManufacturer) && !empty($this->oActiveManufacturer->fieldCss)) {
            $aIncludes[] = '<link href="'.TGlobal::OutHTML($this->oActiveManufacturer->fieldCss).'" rel="stylesheet" type="text/css" />';
        }

        return $aIncludes;
    }
872697
protected function getPluginFields()
    {
        return array(
            'debug' => array(
                'type' => 'radio',
                'label' => $this->t('field_debug'),
                'description' => $this->t('desc_debug'),
                'options' => array(
                    PluginConfig::Send_SendAndMailOnError => $this->t('option_debug_1'),
                    PluginConfig::Send_SendAndMail => $this->t('option_debug_2'),
                    PluginConfig::Send_TestMode => $this->t('option_debug_3'),
                ),
                'attributes' => array(
                    'required' => true,
                ),
            ),
            'logLevel' => array(
                'type' => 'radio',
                'label' => $this->t('field_logLevel'),
                'description' => $this->t('desc_logLevel'),
                'options' => array(
                    Log::Notice => $this->t('option_logLevel_3'),
                    Log::Info => $this->t('option_logLevel_4'),
                    Log::Debug => $this->t('option_logLevel_5'),
                ),
                'attributes' => array(
                    'required' => true,
                ),
            ),
        );
    }
1361753
public function tags()
    {
        if ( !is_array( $this->IDArray ) || empty( $this->IDArray ) )
            return array();

        $tags = array();
        foreach ( eZTagsObject::fetchList( array( 'id' => array( $this->IDArray ) ) ) as $item )
        {
            $tags[array_search( $item->attribute( 'id' ), $this->IDArray )] = $item;
        }
        ksort( $tags );

        return $tags;
    }
474973
public static function get_tags($tags) {
        global $CFG, $PAGE, $DB;

        // Validate and normalize parameters.
        $tags = self::validate_parameters(self::get_tags_parameters(), array('tags' => $tags));

        $systemcontext = context_system::instance();
        self::validate_context($systemcontext);

        $canmanage = has_capability('moodle/tag:manage', $systemcontext);
        $canedit = has_capability('moodle/tag:edit', $systemcontext);

        $return = array();
        $warnings = array();

        if (empty($CFG->usetags)) {
            throw new moodle_exception('tagsaredisabled', 'tag');
        }

        $renderer = $PAGE->get_renderer('core');
        foreach ($tags['tags'] as $tag) {
            $tag = (array)$tag;
            if (!$tagobject = $DB->get_record('tag', array('id' => $tag['id']))) {
                $warnings[] = array(
                    'item' => $tag['id'],
                    'warningcode' => 'tagnotfound',
                    'message' => get_string('tagnotfound', 'error')
                );
                continue;
            }
            $tagoutput = new \core_tag\output\tag($tagobject);
            // Do not return some information to users without permissions.
            $rv = $tagoutput->export_for_template($renderer);
            if (!$canmanage) {
                if (!$canedit) {
                    unset($rv->isstandard);
                    unset($rv->official);
                }
                unset($rv->flag);
            }
            $return[] = $rv;
        }
        return array('tags' => $return, 'warnings' => $warnings);
    }
1010161
public function getTypes() {
    // No type specified means type is mixed.
    $types = ['mixed'];
    // Use types from the doc comment if available.
    $doc_comment = $this->getDocComment();
    if (!$doc_comment) {
      return $types;
    }
    $doc_block = $doc_comment->getDocBlock();
    $var_tags = $doc_block->getTagsByName('var');
    if (empty($var_tags)) {
      return $types;
    }
    /** @var \phpDocumentor\Reflection\DocBlock\Tag\VarTag $var_tag */
    $var_tag = reset($var_tags);
    return Types::normalize($var_tag->getTypes());
  }
956511
public static function getEnabledStyleFormats()
    {
        $returnFormats = array();
        $formats = self::getAvailableStyleFormats();
        $enabled = get_field('content_editor_formats', 'options');

        if (is_array($enabled) && !empty($enabled) && is_array($formats) && !empty($formats)) {

            foreach ($formats as $key => &$format) {
                $format = array_filter($format, function ($key) use ($enabled) {
                    return in_array($key, $enabled);
                }, ARRAY_FILTER_USE_KEY);
            }

            foreach ($formats as $key => $items) {
                if (!is_array($items) || count($items) === 0) {
                    continue;
                }

                $returnFormats[] = array(
                    'title' => $key,
                    'items' => $items
                );
            }
        }

        return $returnFormats;
    }
26705
public static function get_available_field_types() {
        $fieldtypes = array();

        $plugins = \core\plugininfo\customfield::get_enabled_plugins();
        foreach ($plugins as $type => $unused) {
            $fieldtypes[$type] = get_string('pluginname', 'customfield_' . $type);
        }
        asort($fieldtypes);

        return $fieldtypes;
    }
328987
protected function renderHiddenReferrerFields()
    {
        $tagBuilder = new TagBuilder('input');
        $tagBuilder->addAttribute('type', 'hidden');
        $tagBuilder->addAttribute('name', $this->prefixFieldName('__state'));
        /** @var FormRuntime $formRuntime */
        $formRuntime = $this->arguments['object'];
        $tagBuilder->addAttribute('value', $formRuntime->getSerializedFormState());
        return $tagBuilder->render();
    }
1091035
public function getValidTags()
    {
        switch ($this->type) {
            case PelIfd::IFD0:
            case PelIfd::IFD1:
                return [
                    PelTag::IMAGE_WIDTH,
                    PelTag::IMAGE_LENGTH,
                    PelTag::BITS_PER_SAMPLE,
                    PelTag::COMPRESSION,
                    PelTag::PHOTOMETRIC_INTERPRETATION,
                    PelTag::DOCUMENT_NAME,
                    PelTag::IMAGE_DESCRIPTION,
                    PelTag::MAKE,
                    PelTag::MODEL,
                    PelTag::STRIP_OFFSETS,
                    PelTag::ORIENTATION,
                    PelTag::SAMPLES_PER_PIXEL,
                    PelTag::ROWS_PER_STRIP,
                    PelTag::STRIP_BYTE_COUNTS,
                    PelTag::X_RESOLUTION,
                    PelTag::Y_RESOLUTION,
                    PelTag::PLANAR_CONFIGURATION,
                    PelTag::RESOLUTION_UNIT,
                    PelTag::TRANSFER_FUNCTION,
                    PelTag::SOFTWARE,
                    PelTag::DATE_TIME,
                    PelTag::ARTIST,
                    PelTag::WHITE_POINT,
                    PelTag::PRIMARY_CHROMATICITIES,
                    PelTag::JPEG_INTERCHANGE_FORMAT,
                    PelTag::JPEG_INTERCHANGE_FORMAT_LENGTH,
                    PelTag::YCBCR_COEFFICIENTS,
                    PelTag::YCBCR_SUB_SAMPLING,
                    PelTag::YCBCR_POSITIONING,
                    PelTag::REFERENCE_BLACK_WHITE,
                    PelTag::COPYRIGHT,
                    PelTag::EXIF_IFD_POINTER,
                    PelTag::GPS_INFO_IFD_POINTER,
                    PelTag::PRINT_IM,
                    PelTag::XP_TITLE,
                    PelTag::XP_COMMENT,
                    PelTag::XP_AUTHOR,
                    PelTag::XP_KEYWORDS,
                    PelTag::XP_SUBJECT,
                    PelTag::RATING,
                    PelTag::RATING_PERCENT
                ];

            case PelIfd::EXIF:
                return [
                    PelTag::EXPOSURE_TIME,
                    PelTag::FNUMBER,
                    PelTag::EXPOSURE_PROGRAM,
                    PelTag::SPECTRAL_SENSITIVITY,
                    PelTag::ISO_SPEED_RATINGS,
                    PelTag::OECF,
                    PelTag::EXIF_VERSION,
                    PelTag::DATE_TIME_ORIGINAL,
                    PelTag::DATE_TIME_DIGITIZED,
                    PelTag::OFFSET_TIME,
                    PelTag::OFFSET_TIME_ORIGINAL,
                    PelTag::OFFSET_TIME_DIGITIZED,
                    PelTag::COMPONENTS_CONFIGURATION,
                    PelTag::COMPRESSED_BITS_PER_PIXEL,
                    PelTag::SHUTTER_SPEED_VALUE,
                    PelTag::APERTURE_VALUE,
                    PelTag::BRIGHTNESS_VALUE,
                    PelTag::EXPOSURE_BIAS_VALUE,
                    PelTag::MAX_APERTURE_VALUE,
                    PelTag::SUBJECT_DISTANCE,
                    PelTag::METERING_MODE,
                    PelTag::LIGHT_SOURCE,
                    PelTag::FLASH,
                    PelTag::FOCAL_LENGTH,
                    PelTag::MAKER_NOTE,
                    PelTag::USER_COMMENT,
                    PelTag::SUB_SEC_TIME,
                    PelTag::SUB_SEC_TIME_ORIGINAL,
                    PelTag::SUB_SEC_TIME_DIGITIZED,
                    PelTag::FLASH_PIX_VERSION,
                    PelTag::COLOR_SPACE,
                    PelTag::PIXEL_X_DIMENSION,
                    PelTag::PIXEL_Y_DIMENSION,
                    PelTag::RELATED_SOUND_FILE,
                    PelTag::FLASH_ENERGY,
                    PelTag::SPATIAL_FREQUENCY_RESPONSE,
                    PelTag::FOCAL_PLANE_X_RESOLUTION,
                    PelTag::FOCAL_PLANE_Y_RESOLUTION,
                    PelTag::FOCAL_PLANE_RESOLUTION_UNIT,
                    PelTag::SUBJECT_LOCATION,
                    PelTag::EXPOSURE_INDEX,
                    PelTag::SENSING_METHOD,
                    PelTag::FILE_SOURCE,
                    PelTag::SCENE_TYPE,
                    PelTag::CFA_PATTERN,
                    PelTag::CUSTOM_RENDERED,
                    PelTag::EXPOSURE_MODE,
                    PelTag::WHITE_BALANCE,
                    PelTag::DIGITAL_ZOOM_RATIO,
                    PelTag::FOCAL_LENGTH_IN_35MM_FILM,
                    PelTag::SCENE_CAPTURE_TYPE,
                    PelTag::GAIN_CONTROL,
                    PelTag::CONTRAST,
                    PelTag::SATURATION,
                    PelTag::SHARPNESS,
                    PelTag::DEVICE_SETTING_DESCRIPTION,
                    PelTag::SUBJECT_DISTANCE_RANGE,
                    PelTag::IMAGE_UNIQUE_ID,
                    PelTag::INTEROPERABILITY_IFD_POINTER,
                    PelTag::GAMMA
                ];

            case PelIfd::GPS:
                return [
                    PelTag::GPS_VERSION_ID,
                    PelTag::GPS_LATITUDE_REF,
                    PelTag::GPS_LATITUDE,
                    PelTag::GPS_LONGITUDE_REF,
                    PelTag::GPS_LONGITUDE,
                    PelTag::GPS_ALTITUDE_REF,
                    PelTag::GPS_ALTITUDE,
                    PelTag::GPS_TIME_STAMP,
                    PelTag::GPS_SATELLITES,
                    PelTag::GPS_STATUS,
                    PelTag::GPS_MEASURE_MODE,
                    PelTag::GPS_DOP,
                    PelTag::GPS_SPEED_REF,
                    PelTag::GPS_SPEED,
                    PelTag::GPS_TRACK_REF,
                    PelTag::GPS_TRACK,
                    PelTag::GPS_IMG_DIRECTION_REF,
                    PelTag::GPS_IMG_DIRECTION,
                    PelTag::GPS_MAP_DATUM,
                    PelTag::GPS_DEST_LATITUDE_REF,
                    PelTag::GPS_DEST_LATITUDE,
                    PelTag::GPS_DEST_LONGITUDE_REF,
                    PelTag::GPS_DEST_LONGITUDE,
                    PelTag::GPS_DEST_BEARING_REF,
                    PelTag::GPS_DEST_BEARING,
                    PelTag::GPS_DEST_DISTANCE_REF,
                    PelTag::GPS_DEST_DISTANCE,
                    PelTag::GPS_PROCESSING_METHOD,
                    PelTag::GPS_AREA_INFORMATION,
                    PelTag::GPS_DATE_STAMP,
                    PelTag::GPS_DIFFERENTIAL
                ];

            case PelIfd::INTEROPERABILITY:
                return [
                    PelTag::INTEROPERABILITY_INDEX,
                    PelTag::INTEROPERABILITY_VERSION,
                    PelTag::RELATED_IMAGE_FILE_FORMAT,
                    PelTag::RELATED_IMAGE_WIDTH,
                    PelTag::RELATED_IMAGE_LENGTH
                ];
            case PelIfd::CANON_MAKER_NOTES:
                return [
                    PelTag::CANON_CAMERA_SETTINGS,
                    PelTag::CANON_FOCAL_LENGTH,
                    PelTag::CANON_SHOT_INFO,
                    PelTag::CANON_PANORAMA,
                    PelTag::CANON_IMAGE_TYPE,
                    PelTag::CANON_FIRMWARE_VERSION,
                    PelTag::CANON_FILE_NUMBER,
                    PelTag::CANON_OWNER_NAME,
                    PelTag::CANON_SERIAL_NUMBER,
                    PelTag::CANON_CAMERA_INFO,
                    PelTag::CANON_CUSTOM_FUNCTIONS,
                    PelTag::CANON_MODEL_ID,
                    PelTag::CANON_PICTURE_INFO,
                    PelTag::CANON_THUMBNAIL_IMAGE_VALID_AREA,
                    PelTag::CANON_SERIAL_NUMBER_FORMAT,
                    PelTag::CANON_SUPER_MACRO,
                    PelTag::CANON_FIRMWARE_REVISION,
                    PelTag::CANON_AF_INFO,
                    PelTag::CANON_ORIGINAL_DECISION_DATA_OFFSET,
                    PelTag::CANON_WHITE_BALANCE_TABLE,
                    PelTag::CANON_LENS_MODEL,
                    PelTag::CANON_INTERNAL_SERIAL_NUMBER,
                    PelTag::CANON_DUST_REMOVAL_DATA,
                    PelTag::CANON_CUSTOM_FUNCTIONS_2,
                    PelTag::CANON_PROCESSING_INFO,
                    PelTag::CANON_MEASURED_COLOR,
                    PelTag::CANON_COLOR_SPACE,
                    PelTag::CANON_VRD_OFFSET,
                    PelTag::CANON_SENSOR_INFO,
                    PelTag::CANON_COLOR_DATA
                ];
            case PelIfd::CANON_CAMERA_SETTINGS:
                return [
                    PelTag::CANON_CS_MACRO,
                    PelTag::CANON_CS_SELF_TIMER,
                    PelTag::CANON_CS_QUALITY,
                    PelTag::CANON_CS_FLASH_MODE,
                    PelTag::CANON_CS_DRIVE_MODE,
                    PelTag::CANON_CS_FOCUS_MODE,
                    PelTag::CANON_CS_RECORD_MODE,
                    PelTag::CANON_CS_IMAGE_SIZE,
                    PelTag::CANON_CS_EASY_MODE,
                    PelTag::CANON_CS_DIGITAL_ZOOM,
                    PelTag::CANON_CS_CONTRAST,
                    PelTag::CANON_CS_SATURATION,
                    PelTag::CANON_CS_SHARPNESS,
                    PelTag::CANON_CS_ISO_SPEED,
                    PelTag::CANON_CS_METERING_MODE,
                    PelTag::CANON_CS_FOCUS_TYPE,
                    PelTag::CANON_CS_AF_POINT,
                    PelTag::CANON_CS_EXPOSURE_PROGRAM,
                    PelTag::CANON_CS_LENS_TYPE,
                    PelTag::CANON_CS_LENS,
                    PelTag::CANON_CS_SHORT_FOCAL,
                    PelTag::CANON_CS_FOCAL_UNITS,
                    PelTag::CANON_CS_MAX_APERTURE,
                    PelTag::CANON_CS_MIN_APERTURE,
                    PelTag::CANON_CS_FLASH_ACTIVITY,
                    PelTag::CANON_CS_FLASH_DETAILS,
                    PelTag::CANON_CS_FOCUS_CONTINUOUS,
                    PelTag::CANON_CS_AE_SETTING,
                    PelTag::CANON_CS_IMAGE_STABILIZATION,
                    PelTag::CANON_CS_DISPLAY_APERTURE,
                    PelTag::CANON_CS_ZOOM_SOURCE_WIDTH,
                    PelTag::CANON_CS_ZOOM_TARGET_WIDTH,
                    PelTag::CANON_CS_SPOT_METERING_MODE,
                    PelTag::CANON_CS_PHOTO_EFFECT,
                    PelTag::CANON_CS_MANUAL_FLASH_OUTPUT,
                    PelTag::CANON_CS_COLOR_TONE,
                    PelTag::CANON_CS_SRAW_QUALITY
                ];
            case PelIfd::CANON_SHOT_INFO:
                return [
                    PelTag::CANON_SI_ISO_SPEED,
                    PelTag::CANON_SI_MEASURED_EV,
                    PelTag::CANON_SI_TARGET_APERTURE,
                    PelTag::CANON_SI_TARGET_SHUTTER_SPEED,
                    PelTag::CANON_SI_WHITE_BALANCE,
                    PelTag::CANON_SI_SLOW_SHUTTER,
                    PelTag::CANON_SI_SEQUENCE,
                    PelTag::CANON_SI_AF_POINT_USED,
                    PelTag::CANON_SI_FLASH_BIAS,
                    PelTag::CANON_SI_AUTO_EXPOSURE_BRACKETING,
                    PelTag::CANON_SI_SUBJECT_DISTANCE,
                    PelTag::CANON_SI_APERTURE_VALUE,
                    PelTag::CANON_SI_SHUTTER_SPEED_VALUE,
                    PelTag::CANON_SI_MEASURED_EV2,
                    PelTag::CANON_SI_CAMERA_TYPE,
                    PelTag::CANON_SI_AUTO_ROTATE,
                    PelTag::CANON_SI_ND_FILTER
                ];
            case PelIfd::CANON_PANORAMA:
                return [
                    PelTag::CANON_PA_PANORAMA_FRAME,
                    PelTag::CANON_PA_PANORAMA_DIRECTION
                ];
            case PelIfd::CANON_PICTURE_INFO:
                return [
                    PelTag::CANON_PI_IMAGE_WIDTH,
                    PelTag::CANON_PI_IMAGE_HEIGHT,
                    PelTag::CANON_PI_IMAGE_WIDTH_AS_SHOT,
                    PelTag::CANON_PI_IMAGE_HEIGHT_AS_SHOT,
                    PelTag::CANON_PI_AF_POINTS_USED,
                    PelTag::CANON_PI_AF_POINTS_USED_20D
                ];
            case PelIfd::CANON_FILE_INFO:
                return [
                    PelTag::CANON_FI_FILE_NUMBER,
                    PelTag::CANON_FI_BRACKET_MODE,
                    PelTag::CANON_FI_BRACKET_VALUE,
                    PelTag::CANON_FI_BRACKET_SHOT_NUMBER,
                    PelTag::CANON_FI_RAW_JPG_QUALITY,
                    PelTag::CANON_FI_RAW_JPG_SIZE,
                    PelTag::CANON_FI_NOISE_REDUCTION,
                    PelTag::CANON_FI_WB_BRACKET_MODE,
                    PelTag::CANON_FI_WB_BRACKET_VALUE_AB,
                    PelTag::CANON_FI_WB_BRACKET_VALUE_GM,
                    PelTag::CANON_FI_FILTER_EFFECT,
                    PelTag::CANON_FI_TONING_EFFECT,
                    PelTag::CANON_FI_MACRO_MAGNIFICATION,
                    PelTag::CANON_FI_LIVE_VIEW_SHOOTING,
                    PelTag::CANON_FI_FOCUS_DISTANCE_UPPER,
                    PelTag::CANON_FI_FOCUS_DISTANCE_LOWER,
                    PelTag::CANON_FI_FLASH_EXPOSURE_LOCK
                ];

            /*
             * TODO: Where do these tags belong?
             * PelTag::FILL_ORDER,
             * PelTag::TRANSFER_RANGE,
             * PelTag::JPEG_PROC,
             * PelTag::BATTERY_LEVEL,
             * PelTag::IPTC_NAA,
             * PelTag::INTER_COLOR_PROFILE,
             * PelTag::CFA_REPEAT_PATTERN_DIM,
             */
        }
    }
248931
public function getDefaultTagNames()
    {
        return [
            self::TAG_NAME_B,
            self::TAG_NAME_I,
            self::TAG_NAME_S,
            self::TAG_NAME_U,
            self::TAG_NAME_CODE,
            self::TAG_NAME_EMAIL,
            self::TAG_NAME_URL,
            self::TAG_NAME_IMG,
            self::TAG_NAME_LIST,
            self::TAG_NAME_LI_STAR,
            self::TAG_NAME_LI,
            self::TAG_NAME_QUOTE,
            self::TAG_NAME_YOUTUBE,
            self::TAG_NAME_FONT,
            self::TAG_NAME_SIZE,
            self::TAG_NAME_COLOR,
            self::TAG_NAME_LEFT,
            self::TAG_NAME_CENTER,
            self::TAG_NAME_RIGHT,
            self::TAG_NAME_SPOILER,
        ];
    }
658805
public int[] getTags() {
        int[] tags = new int[fieldIndex.size()];
        Enumeration e = fieldIndex.keys();
        int i = 0;
        
        while (e.hasMoreElements()) {
            tags[i++] = ((Integer)e.nextElement()).intValue();
        }
        
        return tags;
    }