diff --git a/CMakeLists.txt b/CMakeLists.txt index af368e1..d4aa351 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 3.7) - option(VERSION_STRING "Project version string" "0.0.0") project(antkeeper VERSION ${VERSION_STRING} LANGUAGES CXX) diff --git a/src/type/font.cpp b/src/type/font.cpp new file mode 100644 index 0000000..b91bede --- /dev/null +++ b/src/type/font.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#include "type/font.hpp" + +namespace type { + + +} // namespace type diff --git a/src/type/font.hpp b/src/type/font.hpp new file mode 100644 index 0000000..0874545 --- /dev/null +++ b/src/type/font.hpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#ifndef ANTKEEPER_TYPE_FONT_HPP +#define ANTKEEPER_TYPE_FONT_HPP + +#include + +namespace type { + +class font +{ +public: + //font(); + + //float measure(const std::u32string& text) const; + +private: + +}; + +} // namespace type + +#endif // ANTKEEPER_TYPE_FONT_HPP diff --git a/src/type/glyph.hpp b/src/type/glyph.hpp new file mode 100644 index 0000000..77e45a1 --- /dev/null +++ b/src/type/glyph.hpp @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#ifndef ANTKEEPER_TYPE_GLYPH_HPP +#define ANTKEEPER_TYPE_GLYPH_HPP + +namespace type { + +/** + * + */ +struct glyph_metrics +{ + float2 size; + float2 bearing_h; + float2 bearing_v; + float advance_h; + float advance_v; +}; + +} // namespace type + +#endif // ANTKEEPER_TYPE_GLYPH_HPP diff --git a/src/type/type.hpp b/src/type/type.hpp new file mode 100644 index 0000000..bf12988 --- /dev/null +++ b/src/type/type.hpp @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#ifndef ANTKEEPER_TYPE_HPP +#define ANTKEEPER_TYPE_HPP + +/// Text and typography. +namespace type {} + +#include "type/font.hpp" +#include "type/unicode/unicode.hpp" + +#endif // ANTKEEPER_TYPE_HPP diff --git a/src/font/unicode-block.cpp b/src/type/unicode/block.cpp similarity index 99% rename from src/font/unicode-block.cpp rename to src/type/unicode/block.cpp index b835d53..2fa21a8 100644 --- a/src/font/unicode-block.cpp +++ b/src/type/unicode/block.cpp @@ -17,9 +17,9 @@ * along with Antkeeper source code. If not, see . */ -#include "unicode-block.hpp" +#include "type/unicode/block.hpp" -namespace font { +namespace type { namespace unicode { const block block::basic_latin{0x0, 0x7F}; @@ -344,4 +344,4 @@ const block block::supplementary_private_use_area_a{0xF0000, 0xFFFFF}; const block block::supplementary_private_use_area_b{0x100000, 0x10FFFF}; } // namespace unicode -} // namespace font +} // namespace type diff --git a/src/font/unicode-block.hpp b/src/type/unicode/block.hpp similarity index 99% rename from src/font/unicode-block.hpp rename to src/type/unicode/block.hpp index 7c0fd9a..0e0dfc5 100644 --- a/src/font/unicode-block.hpp +++ b/src/type/unicode/block.hpp @@ -17,12 +17,10 @@ * along with Antkeeper source code. If not, see . */ -#ifndef ANTKEEPER_FONT_UNICODE_BLOCK_HPP -#define ANTKEEPER_FONT_UNICODE_BLOCK_HPP +#ifndef ANTKEEPER_TYPE_UNICODE_BLOCK_HPP +#define ANTKEEPER_TYPE_UNICODE_BLOCK_HPP -namespace font { - -/// Unicode-related functions and data +namespace type { namespace unicode { /** @@ -1001,6 +999,6 @@ struct block }; } // namespace unicode -} // namespace font +} // namespace type -#endif // ANTKEEPER_FONT_UNICODE_BLOCK_HPP +#endif // ANTKEEPER_TYPE_UNICODE_BLOCK_HPP diff --git a/src/type/unicode/convert.cpp b/src/type/unicode/convert.cpp new file mode 100644 index 0000000..12228ee --- /dev/null +++ b/src/type/unicode/convert.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#include "type/unicode/convert.hpp" +#include + +namespace font { +namespace unicode { + +std::u32string u32(const std::string& u8) +{ + std::wstring_convert, char32_t> convert; + return convert.from_bytes(u8); +} + +std::string u8(const std::u32string& u32) +{ + std::wstring_convert, char32_t> convert; + return convert.to_bytes(u32); +} + +} // namespace unicode +} // namespace font diff --git a/src/type/unicode/convert.hpp b/src/type/unicode/convert.hpp new file mode 100644 index 0000000..9014377 --- /dev/null +++ b/src/type/unicode/convert.hpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#ifndef ANTKEEPER_TYPE_UNICODE_CONVERT_HPP +#define ANTKEEPER_TYPE_UNICODE_CONVERT_HPP + +#include + +namespace type { +namespace unicode { + +/** + * Converts a UTF-8 string to UTF-32. + * + * @param u8 UTF-8 string. + * @return UTF-32 string. + */ +std::u32string u32(const std::string& u8); + +/** + * Converts a UTF-32 string to UTF-8. + * + * @param u32 UTF-32 string. + * @return UTF-8 string. + */ +std::string u32(const std::u32string& u32); + +} // namespace unicode +} // namespace type + +#endif // ANTKEEPER_TYPE_UNICODE_CONVERT_HPP diff --git a/src/type/unicode/unicode.hpp b/src/type/unicode/unicode.hpp new file mode 100644 index 0000000..11de428 --- /dev/null +++ b/src/type/unicode/unicode.hpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2021 Christopher J. Howard + * + * This file is part of Antkeeper source code. + * + * Antkeeper source code is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Antkeeper source code is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Antkeeper source code. If not, see . + */ + +#ifndef ANTKEEPER_TYPE_UNICODE_HPP +#define ANTKEEPER_TYPE_UNICODE_HPP + +namespace type { + +/// Unicode-related functions and data. +namespace unicode {} + +} // namespace type + +#include "type/unicode/block.hpp" +#include "type/unicode/convert.hpp" + +#endif // ANTKEEPER_TYPE_UNICODE_HPP