FreeCAD

Форк
0
/
ElementNamingUtils.cpp 
102 строки · 2.4 Кб
1
#include "PreCompiled.h"
2

3
#include "ElementNamingUtils.h"
4
#include <boost/algorithm/string/predicate.hpp>
5

6

7
const char *Data::isMappedElement(const char *name) {
8
    if(name && boost::starts_with(name, ELEMENT_MAP_PREFIX))
9
        return name + ELEMENT_MAP_PREFIX_SIZE;
10
    return nullptr;
11
}
12

13
std::string Data::newElementName(const char *name) {
14
    if(!name)
15
        return {};
16
    const char *dot = strrchr(name,'.');
17
    if(!dot || dot==name)
18
        return name;
19
    const char *c = dot-1;
20
    for(;c!=name;--c) {
21
        if(*c == '.') {
22
            ++c;
23
            break;
24
        }
25
    }
26
    if(isMappedElement(c))
27
        return std::string(name,dot-name);
28
    return name;
29
}
30

31
std::string Data::oldElementName(const char *name) {
32
    if(!name)
33
        return {};
34
    const char *dot = strrchr(name,'.');
35
    if(!dot || dot==name)
36
        return name;
37
    const char *c = dot-1;
38
    for(;c!=name;--c) {
39
        if(*c == '.') {
40
            ++c;
41
            break;
42
        }
43
    }
44
    if(isMappedElement(c))
45
        return std::string(name,c-name)+(dot+1);
46
    return name;
47
}
48

49
std::string Data::noElementName(const char *name) {
50
    if(!name)
51
        return {};
52
    auto element = findElementName(name);
53
    if(element)
54
        return std::string(name,element-name);
55
    return name;
56
}
57

58
const char *Data::findElementName(const char *subname) {
59
    // skip leading dots
60
    while(subname && subname[0] == '.')
61
        ++subname;
62
    if(!subname || !subname[0] || isMappedElement(subname))
63
        return subname;
64
    const char *dot = strrchr(subname,'.');
65
    if(!dot)
66
        return subname;
67
    const char *element = dot+1;
68
    if(dot==subname || isMappedElement(element))
69
        return element;
70
    for(--dot;dot!=subname;--dot) {
71
        if(*dot == '.') {
72
            ++dot;
73
            break;
74
        }
75
    }
76
    if(isMappedElement(dot))
77
        return dot;
78
    return element;
79
}
80

81
bool Data::hasMissingElement(const char *subname) {
82
    if(!subname)
83
        return false;
84
    auto dot = strrchr(subname,'.');
85
    if(dot)
86
        subname = dot+1;
87
    return boost::starts_with(subname, MISSING_PREFIX);
88
}
89

90
const char *Data::hasMappedElementName(const char *subname) {
91
    return isMappedElement(findElementName(subname));
92
}
93

94
const std::string Data::indexSuffix(int index, const char *label)
95
{
96
    if ( index < 2 ) {  // Don't add a suffix for item #1, begin appending at 2
97
        return {""};
98
    }
99
    std::string name(label);
100
    name += std::to_string(index);
101
    return name;
102
}
103

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.