Giter Site home page Giter Site logo

samd2 / nowide Goto Github PK

View Code? Open in Web Editor NEW

This project forked from boostorg/nowide

0.0 1.0 0.0 1.11 MB

Boost.Nowide - Standard library functions with UTF-8 API on Windows

License: Boost Software License 1.0

C++ 93.97% Shell 0.94% HTML 0.22% CMake 4.86%

nowide's Introduction

Boost.Nowide

Branch Appveyor Github codecov.io Documentation
master Build status codecov Documentation
develop Build status codecov Documentation

Quality checks: Coverity Scan Build Status CodeFactor

Library for cross-platform, unicode aware programming.

The library provides an implementation of standard C and C++ library functions, such that their inputs are UTF-8 aware on Windows without requiring to use the Wide API.

License

Distributed under the Boost Software License, Version 1.0.

Properties

  • optional C++17 (filesystem) support
  • Usable outside of Boost via CMake
  • Compiled library on every OS

Note on the last point: Having a compiled library allows cross-platform access to e.g. setenv which would not be available when using a -std=c++nn flag. This is different to the version available prior to the inclusion in Boost.

Requirements (All versions)

  • C++11 (or higher) compatible compiler
    • MSVC 2015 and up work
    • libstdc++ < 5 is unsupported as it is silently lacking C++11 features

Requirements (Boost version)

  • Boost (>= 1.56)
  • CMake (when not using as part of Boost) or B2 (otherwise)

Requirements (Standalone version)

The standalone branch keeps track of the develop branch and can be used without any other part of Boost. It is automatically updated so referring to a specific commit is recommended. You can also use the standalone source archive which is part of every release.

  • CMake

Quickstart

Instead of using the standard library functions use the corresponding member of Boost.Nowide with the same name. On Linux those are (mostly) aliases for the std ones, but on Windows they accept UTF-8 as input and use the wide API for the underlying functionality.

Examples:

  • std::ifstream -> boost::nowide::ifstream
  • std::fopen -> boost::nowide::fopen
  • std::fclose -> boost::nowide::fclose
  • std::getenv -> boost::nowide::getenv
  • std::putenv -> boost::nowide::putenv
  • std::cout -> boost::nowide::cout

To also convert your input arguments to UTF-8 on Windows use:

int main(int argc, char **argv)
{
    boost::nowide::args _(argc, argv); // Must use an instance!
    ...
}

See the Documentation for details.

Compile

With Boost

Compile and install the Boost super project the usual way via ./b2. The headers and library will then be available together with all other Boost libraries. From within CMake you can then use find_package(Boost COMPONENTS nowide) and link against Boost::nowide. Note that find_package(boost_nowide) will find the package too, but the above is the canonical way.

With CMake

Boost.Nowide fully supports CMake. So you can use add_subdirectory("path-to-boost-nowide-repo") and link your project against the target Boost::nowide.

You can also pre-compile and install Boost.Nowide via the usual workflow:

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make install

A CMake-Config file will be installed alongside Boost.Nowide so find_package(boost_nowide) does work out-of the box (provided it was installed into a "standard" location or its INSTALL_PREFIX was added to CMAKE_PREFIX_PATH).

Boost.Filesystem integration

Boost.Nowide integrates with Boost.Filesystem:

  • Call boost::nowide::nowide_filesystem() to imbue UTF-8 into Boost.Filesystem (for use by boost::filesystem::path) such that narrow strings passed into Boost.Filesystem are treated as UTF-8 on Windows

More information

  • Ask questions
  • Report bugs: Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
  • Submit your patches as pull requests against develop branch. Note that by submitting patches you agree to license your modifications under the Boost Software License, Version 1.0.
  • Discussions about the library are held on the Boost developers mailing list. Be sure to read the discussion policy before posting and add the [nowide] tag at the beginning of the subject line.

nowide's People

Contributors

artyom-beilis avatar davidwed avatar eldiener avatar flamefire avatar lazka avatar pdimov avatar rudolfwalter avatar sfinktah avatar swex avatar tats-u avatar webmaster128 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.