Register
4coder»Forums»Objective-C++ (.mm) files not treated as code files
Alberto
3 posts
Objective-C++ (.mm) files not treated as code files
2 weeks, 4 days ago Edited by Alberto on Aug. 31, 2020, 9:26 a.m.
As the title say, despite the treat_as_code directive in config.4coder includes .mm files, those files in my experience are treated as plain text (no indentation, no syntax highlighting).

Is this a bug or am I missing something ?
How to turn at least syntax hl?
Simon Anciaux
881 posts
Objective-C++ (.mm) files not treated as code files
2 weeks, 4 days ago
Have a look at this github issue and workaround: treat_as_code not working with .odin files in beta 4.1.6
Alberto
3 posts
Objective-C++ (.mm) files not treated as code files
2 weeks, 4 days ago
Thanks I will look into it.
Alberto
3 posts
Objective-C++ (.mm) files not treated as code files
2 weeks, 2 days ago Edited by Alberto on Sept. 2, 2020, 5:35 p.m.
As you can see below, I tried to add "mm" as the first test
1
string_match(ext, string_u8_litexpr("mm"))
, but apparently that did not work.

Any other suggestion ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
BUFFER_HOOK_SIG(default_begin_buffer){
    ProfileScope(app, "begin buffer");
    
    Scratch_Block scratch(app);
    
    b32 treat_as_code = false;
    String_Const_u8 file_name = push_buffer_file_name(app, scratch, buffer_id);
    if (file_name.size > 0){
        String_Const_u8_Array extensions = global_config.code_exts;
        String_Const_u8 ext = string_file_extension(file_name);
        for (i32 i = 0; i < extensions.count; ++i){
            if (string_match(ext, extensions.strings[i])){
                
                if (string_match(ext, string_u8_litexpr("mm")) || 
                    string_match(ext, string_u8_litexpr("cpp")) ||
                    string_match(ext, string_u8_litexpr("h")) ||
                    string_match(ext, string_u8_litexpr("c")) ||
                    string_match(ext, string_u8_litexpr("hpp")) ||
                    string_match(ext, string_u8_litexpr("cc"))){
                    treat_as_code = true;
                }
                
#if 0
                treat_as_code = true;
                
                if (string_match(ext, string_u8_litexpr("cs"))){
                    if (parse_context_language_cs == 0){
                        init_language_cs(app);
                    }
                    parse_context_id = parse_context_language_cs;
                }
                
                if (string_match(ext, string_u8_litexpr("java"))){
                    if (parse_context_language_java == 0){
                        init_language_java(app);
                    }
                    parse_context_id = parse_context_language_java;
                }
                
                if (string_match(ext, string_u8_litexpr("rs"))){
                    if (parse_context_language_rust == 0){
                        init_language_rust(app);
                    }
                    parse_context_id = parse_context_language_rust;
                }
                
                if (string_match(ext, string_u8_litexpr("cpp")) ||
                    string_match(ext, string_u8_litexpr("h")) ||
                    string_match(ext, string_u8_litexpr("c")) ||
                    string_match(ext, string_u8_litexpr("hpp")) ||
                    string_match(ext, string_u8_litexpr("cc"))){
                    if (parse_context_language_cpp == 0){
                        init_language_cpp(app);
                    }
                    parse_context_id = parse_context_language_cpp;
                }
                
                // TODO(NAME): Real GLSL highlighting
                if (string_match(ext, string_u8_litexpr("glsl"))){
                    if (parse_context_language_cpp == 0){
                        init_language_cpp(app);
                    }
                    parse_context_id = parse_context_language_cpp;
                }
                
                // TODO(NAME): Real Objective-C highlighting
                if (string_match(ext, string_u8_litexpr("m"))){
                    if (parse_context_language_cpp == 0){
                        init_language_cpp(app);
                    }
                    parse_context_id = parse_context_language_cpp;
                }
#endif
                
                break;
            }
        }
    }
Simon Anciaux
881 posts
Objective-C++ (.mm) files not treated as code files
2 weeks, 2 days ago
Did you recompile the custom layer after making the change ?

To be clear, the line
1
string_match(ext, extensions.strings[i])

validates that the extension matches one of the extensions from the config file, so you still need it in the config file, even after your change.

On my machine, it's working. But the mm file I used contained only C code since I don't' know ObjectiveC. If ObjectiveC syntax is too different from C/C++, the syntax highlighting and other code related features might not work at all (I don't know). There are still ways to have basic syntax highlighting, but you may have to do it yourself.