/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

// Note: This is a variant of WebIDL, but its semantics differ from our
// internal WebIDL implementation. Some particular differences that are
// relevent here include:
//
//  - Attribute declarations refer directly to member variables of the
//    underlying class, and are not forwarded to explicit getter methods.
//
//  - Attribute declarations also do not create getters on the JavaScript
//    wrapper object, but instead generate "get_foo()" and "set_foo()"
//    methods, which must be called in order to access the value. In the case
//    of array attributes, the callers must also pass the index they wish to
//    access.
//
//  - Method overloading is fairly crude. Only explicitly declared variants
//    are supported, and selection is based entirely on index of the first
//    parameter whose value is undefined.
//
//  - DOMString attributes are nullable by default. Null values are not
//    converted to empty strings, and non-null values are converted to
//    null-terminated, UTF-8 byte arrays.

interface Language {
  [Const] DOMString getLanguageCode();
};

interface LanguageGuess {
  byte getPercent();
};

interface LanguageInfo {
  static LanguageInfo detectLanguageWithLength(DOMString buffer, long bufferLength, boolean isPlainText);

  static LanguageInfo detectLanguageWithLength(DOMString buffer, long bufferLength, boolean isPlainText,
                                               DOMString? tldHint, long encodingHint,
                                               DOMString? languageHint);

  static LanguageInfo detectLanguage(DOMString buffer, boolean isPlainText);

  static LanguageInfo detectLanguage(DOMString buffer, boolean isPlainText,
                                     DOMString? tldHint, long encodingHint,
                                     DOMString? languageHint);

  boolean getIsReliable();

  [BoundsChecked,Const] readonly attribute LanguageGuess[] languages;
};

LanguageGuess implements Language;
LanguageInfo implements Language;
