PHP 7.4.33
Preview: node_i18n.h Size: 4.30 KB
//usr/include/nodejs/src/node_i18n.h
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

#ifndef SRC_NODE_I18N_H_
#define SRC_NODE_I18N_H_

#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

#if defined(NODE_HAVE_I18N_SUPPORT)

#include "base_object.h"
#include "env.h"
#include "util.h"
#include "v8.h"

#include <unicode/ucnv.h>

#include <string>

namespace node {

namespace i18n {

bool InitializeICUDirectory(const std::string& path);

enum idna_mode {
  // Default mode for maximum compatibility.
  IDNA_DEFAULT,
  // Ignore all errors in IDNA conversion, if possible.
  IDNA_LENIENT,
  // Enforce STD3 rules (UseSTD3ASCIIRules) and DNS length restrictions
  // (VerifyDnsLength). Corresponds to `beStrict` flag in the "domain to ASCII"
  // algorithm.
  IDNA_STRICT
};

// Implements the WHATWG URL Standard "domain to ASCII" algorithm.
// https://url.spec.whatwg.org/#concept-domain-to-ascii
int32_t ToASCII(MaybeStackBuffer<char>* buf,
                const char* input,
                size_t length,
                enum idna_mode mode = IDNA_DEFAULT);

// Implements the WHATWG URL Standard "domain to Unicode" algorithm.
// https://url.spec.whatwg.org/#concept-domain-to-unicode
int32_t ToUnicode(MaybeStackBuffer<char>* buf,
                  const char* input,
                  size_t length);

struct ConverterDeleter {
  void operator()(UConverter* pointer) const { ucnv_close(pointer); }
};
using ConverterPointer = std::unique_ptr<UConverter, ConverterDeleter>;

class Converter {
 public:
  explicit Converter(const char* name, const char* sub = nullptr);
  explicit Converter(UConverter* converter, const char* sub = nullptr);

  UConverter* conv() const { return conv_.get(); }

  size_t max_char_size() const;
  size_t min_char_size() const;
  void reset();
  void set_subst_chars(const char* sub = nullptr);

 private:
  ConverterPointer conv_;
};

class ConverterObject : public BaseObject, Converter {
 public:
  enum ConverterFlags {
    CONVERTER_FLAGS_FLUSH      = 0x1,
    CONVERTER_FLAGS_FATAL      = 0x2,
    CONVERTER_FLAGS_IGNORE_BOM = 0x4,
    CONVERTER_FLAGS_UNICODE    = 0x8,
    CONVERTER_FLAGS_BOM_SEEN   = 0x10,
  };

  static void Create(const v8::FunctionCallbackInfo<v8::Value>& args);
  static void Decode(const v8::FunctionCallbackInfo<v8::Value>& args);
  static void Has(const v8::FunctionCallbackInfo<v8::Value>& args);

  SET_NO_MEMORY_INFO()
  SET_MEMORY_INFO_NAME(ConverterObject)
  SET_SELF_SIZE(ConverterObject)

 protected:
  ConverterObject(Environment* env,
                  v8::Local<v8::Object> wrap,
                  UConverter* converter,
                  int flags,
                  const char* sub = nullptr);

  void set_bom_seen(bool seen) {
    if (seen)
      flags_ |= CONVERTER_FLAGS_BOM_SEEN;
    else
      flags_ &= ~CONVERTER_FLAGS_BOM_SEEN;
  }

  bool bom_seen() const {
    return (flags_ & CONVERTER_FLAGS_BOM_SEEN) == CONVERTER_FLAGS_BOM_SEEN;
  }

  bool unicode() const {
    return (flags_ & CONVERTER_FLAGS_UNICODE) == CONVERTER_FLAGS_UNICODE;
  }

  bool ignore_bom() const {
    return (flags_ & CONVERTER_FLAGS_IGNORE_BOM) == CONVERTER_FLAGS_IGNORE_BOM;
  }

 private:
  int flags_ = 0;
};

}  // namespace i18n
}  // namespace node

#endif  // NODE_HAVE_I18N_SUPPORT

#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

#endif  // SRC_NODE_I18N_H_

Directory Contents

Dirs: 0 × Files: 108
Name Size Perms Modified Actions
7.91 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
10.07 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.57 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
10.82 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.83 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
686 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
584 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
7.36 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.44 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
768 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
40.44 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
65.90 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.98 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.83 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
609 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.19 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.53 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.53 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.63 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
28.13 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
12.23 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.28 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.35 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.23 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.10 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
43.55 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.41 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.62 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.25 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.37 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
29.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.22 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.48 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
23.04 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.31 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.89 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.89 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
9.81 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
12.20 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
49.14 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.58 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
28.90 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.30 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
13.34 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.05 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.60 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.28 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.96 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.46 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.07 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.31 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.33 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.78 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
14.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
15.68 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.21 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.99 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.77 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.35 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.45 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
212.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.61 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.56 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.15 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.20 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.19 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.69 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.13 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.17 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
11.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.78 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.67 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.40 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.22 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.55 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
6.87 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
9.16 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
15.92 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.15 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
4.03 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
858 B lrw-r--r-- 2022-01-10 12:24:37
Edit Download
1.50 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
20.92 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
3.65 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.05 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
7.88 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
2.18 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
8.59 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
16.42 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
25.51 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
5.09 KB lrw-r--r-- 2022-01-10 12:24:37
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).