------------------------------------------------------------------------------ -- G N A T C O L L -- -- -- -- Copyright (C) 2008-2017, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or modify it -- -- under terms of the GNU General Public License as published by the Free -- -- Software Foundation; either version 3, or (at your option) any later -- -- version. This library is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- -- -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- ------------------------------------------------------------------------------ -- Windows version: all paths are already utf-8 encoded by mingw when -- GNAT_CODE_PAGE is CP_UTF8. Otherwise we need to convert to/from UTF-8. with Ada.Characters.Handling; use Ada.Characters.Handling; with Ada.Environment_Variables; use Ada.Environment_Variables; with GNAT.Decode_UTF8_String; use GNAT.Decode_UTF8_String; with GNAT.Encode_UTF8_String; use GNAT.Encode_UTF8_String; separate (GNATCOLL.IO.Native) package body Codec is Is_UTF8 : Boolean := True; procedure Initialize; -- Initialize current Windows code page ---------------- -- Initialize -- ---------------- procedure Initialize is begin if Exists ("GNAT_CODE_PAGE") and then Value ("GNAT_CODE_PAGE") = "CP_ACP" then Is_UTF8 := False; end if; end Initialize; ------------- -- To_UTF8 -- ------------- function To_UTF8 (Path : Wide_String) return String is begin if Is_UTF8 then return To_String (Path); else return Encode_Wide_String (Path); end if; end To_UTF8; function To_UTF8 (Path : FS_String) return String is begin if Is_UTF8 then return String (Path); else return Encode_Wide_String (To_Wide_String (String (Path))); end if; end To_UTF8; --------------- -- From_UTF8 -- --------------- function From_UTF8 (Path : String) return Wide_String is begin if Is_UTF8 then return Decode_Wide_String (Path); else return To_Wide_String (Path); end if; end From_UTF8; function From_UTF8 (Path : String) return FS_String is begin return FS_String (To_String (From_UTF8 (Path))); end From_UTF8; begin Initialize; end Codec;