summaryrefslogtreecommitdiff
path: root/src/lib/eolian_cxx/grammar/cxx_class_name.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/eolian_cxx/grammar/cxx_class_name.hpp')
-rw-r--r--src/lib/eolian_cxx/grammar/cxx_class_name.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/lib/eolian_cxx/grammar/cxx_class_name.hpp b/src/lib/eolian_cxx/grammar/cxx_class_name.hpp
new file mode 100644
index 0000000000..ab7a81281c
--- /dev/null
+++ b/src/lib/eolian_cxx/grammar/cxx_class_name.hpp
@@ -0,0 +1,37 @@
+#ifndef EOLIAN_CXX_CLASS_NAME_HH
+#define EOLIAN_CXX_CLASS_NAME_HH
+
+#include "grammar/case.hpp"
+#include "grammar/string.hpp"
+
+namespace efl { namespace eolian { namespace grammar {
+
+struct cxx_class_name_generator
+{
+ template <typename OutputIterator, typename Context>
+ bool generate(OutputIterator sink, std::string name, Context const& context) const
+ {
+ if(name == "Class")
+ {
+ name = "efl_class";
+ }
+
+ return as_generator(lower_case[string]).generate(sink, name, context);
+ }
+};
+
+cxx_class_name_generator const cxx_class_name{};
+
+template <>
+struct is_eager_generator<cxx_class_name_generator> : std::true_type {};
+template <>
+struct is_generator<cxx_class_name_generator> : std::true_type {};
+
+namespace type_traits {
+template <>
+struct attributes_needed<cxx_class_name_generator> : std::integral_constant<int, 1> {};
+}
+
+} } }
+
+#endif