All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.lang.properties.charset.Native2AsciiCharset Maven / Gradle / Ivy

Go to download

A packaging of the IntelliJ Community Edition boot library. This is release number 1 of trunk branch 142.

The newest version!
/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.intellij.lang.properties.charset;

import java.nio.charset.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @author Alexey
 */

public class Native2AsciiCharset extends Charset {
  private static final String[] ALIASES = new String[0];
  private final Charset myBaseCharset;
  @SuppressWarnings({"HardCodedStringLiteral"}) private static final String NAME_PREFIX = "NATIVE_TO_ASCII_";
  @SuppressWarnings({"HardCodedStringLiteral"}) private static final String DEFAULT_ENCODING_NAME = "ISO-8859-1";

  private Native2AsciiCharset(String canonicalName) {
    super(canonicalName, ALIASES);
    String baseCharsetName = canonicalName.substring(NAME_PREFIX.length());
    Charset baseCharset = null;
    try {
      baseCharset = Charset.forName(baseCharsetName);
    }
    catch (IllegalCharsetNameException e) {
      //ignore
    }
    catch(UnsupportedCharsetException e){
      //ignore
    }
    myBaseCharset = baseCharset == null ? Charset.forName(DEFAULT_ENCODING_NAME) : baseCharset;
  }

  @Override
  public String displayName() {
    return getBaseCharset().displayName();
  }

  @Override
  public boolean contains(Charset cs) {
    return false;
  }

  @Override
  public CharsetDecoder newDecoder() {
    return new Native2AsciiCharsetDecoder(this);
  }

  @Override
  public CharsetEncoder newEncoder() {
    return new Native2AsciiCharsetEncoder(this);
  }

  public Charset getBaseCharset() {
    return myBaseCharset;
  }
  public static String makeNative2AsciiEncodingName(String baseCharsetName) {
    if (baseCharsetName == null) baseCharsetName = DEFAULT_ENCODING_NAME;
    return NAME_PREFIX + baseCharsetName;
  }

  public static Charset forName(String charsetName) {
    if (charsetName.startsWith(NAME_PREFIX)) {
      Native2AsciiCharset cached = cache.get(charsetName);
      if (cached == null) {
        cached = new Native2AsciiCharset(charsetName);
        Native2AsciiCharset prev = cache.putIfAbsent(charsetName, cached);
        if (prev != null) cached = prev;
      }
      return cached;
    }
    return null;
  }
  public static Charset wrap(Charset baseCharset) {
    return forName(NAME_PREFIX + baseCharset.name());
  }

  public static Charset nativeToBaseCharset(Charset charset) {
    if (charset instanceof Native2AsciiCharset) {
      return ((Native2AsciiCharset)charset).getBaseCharset();
    }
    return charset;
  }

  private static final ConcurrentMap cache = new ConcurrentHashMap();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy