Changeset 549 for CMT/HEAD/source/cmt_symbol.cxx
- Timestamp:
- Aug 12, 2010, 10:45:31 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CMT/HEAD/source/cmt_symbol.cxx
r547 r549 828 828 829 829 symbol.selected_value = -1; 830 symbol.printed = false; 830 831 831 832 return (&symbol); … … 1490 1491 if (Symbols.size () == 0) return; 1491 1492 1492 for (number = 0; number < Symbol::symbol_number (); number++) 1493 { 1494 Symbol& symbol = Symbol::symbol (number); 1495 1496 if ((symbol.type == SymbolSet) || 1497 (symbol.type == SymbolAlias) || 1498 (symbol.type == SymbolSetupScript) || 1499 (symbol.type == SymbolPath)) 1500 { 1501 if (symbol.print (mode)) 1502 { 1503 if (mode == Bat) 1504 { 1505 cout << endl; 1506 } 1507 else 1508 { 1509 cout << endl; 1510 } 1511 } 1512 } 1493 switch (mode) 1494 { 1495 case Requirements : 1496 for (number = 0; number < Symbol::symbol_number (); number++) 1497 { 1498 Symbol& symbol = Symbol::symbol (number); 1499 1500 if ((symbol.type == SymbolSet) || 1501 (symbol.type == SymbolAlias) || 1502 (symbol.type == SymbolSetupScript) || 1503 (symbol.type == SymbolPath) || 1504 (symbol.type == SymbolMacro)) 1505 { 1506 if (symbol.print_macro (mode)) 1507 { 1508 // cout << endl; 1509 } 1510 } 1511 } 1512 break; 1513 default : 1514 for (number = 0; number < Symbol::symbol_number (); number++) 1515 { 1516 Symbol& symbol = Symbol::symbol (number); 1517 1518 if ((symbol.type == SymbolSet) || 1519 (symbol.type == SymbolAlias) || 1520 (symbol.type == SymbolSetupScript) || 1521 (symbol.type == SymbolPath)) 1522 { 1523 if (symbol.print (mode)) 1524 { 1525 if (mode == Bat) 1526 { 1527 cout << endl; 1528 } 1529 else 1530 { 1531 cout << endl; 1532 } 1533 } 1534 } 1535 } 1536 break; 1513 1537 } 1514 1538 } … … 1799 1823 1800 1824 //------------------------------------------------------------- 1825 int Symbol::print_macro (PrintMode mode, ostream& out) const 1826 { 1827 if (mode != Requirements || printed) return 0; 1828 return builder->print (*this, out); 1829 } 1830 1831 //------------------------------------------------------------- 1801 1832 cmt_string Symbol::clean_macro_value () const 1802 1833 { … … 1977 2008 1978 2009 return (temp); 2010 } 2011 2012 //------------------------------------------------------------- 2013 int ValueBuilder::print (const Symbol& symbol, ostream& out) 2014 { 2015 int result (0); 2016 2017 bool first_definition = true; 2018 2019 for (int i = 0; i < symbol.value_lists.size (); i++) 2020 { 2021 const SymbolValueList& value_list = symbol.value_lists[i]; 2022 2023 if ((value_list.use != 0) && 2024 (value_list.use->discarded)) continue; 2025 2026 const int selected = value_list.select_first (); 2027 2028 if (selected < 0) continue; 2029 2030 SymbolValue& value = value_list.values[selected]; 2031 2032 result += value_list.print (symbol, value, first_definition); 2033 } 2034 2035 return result; 1979 2036 } 1980 2037 … … 2986 3043 2987 3044 //------------------------------------------------------------- 3045 // Quote separators (spaces and tabs) with double quotes, 3046 // double quotes with single quotes, 3047 // single quotes with double quotes in text. 3048 // Note: quotes preceded by backslash (i.e., \" or \') are NOT quoted 3049 // (considered escaped) 3050 //------------------------------------------------------------- 3051 static cmt_string quote (const cmt_string& text, 3052 const cmt_string& separators) 3053 { 3054 //cerr << "quote: `" << text << "'" << endl; 3055 cmt_string result; 3056 if (text.size () == 0) return result; 3057 3058 int allocated = 3 * text.size (); // if EACH character of text quoted with " or ' 3059 char* const buffer = (char*) malloc (allocated + 1); 3060 char* b (buffer); 3061 3062 // char* const beg (buffer); 3063 const char* p = text.c_str (); 3064 const char* const text_c (p); 3065 // const char* const beg_t (p); 3066 // cerr << "quote: p = `" << p << "'" << endl; 3067 3068 while (*p) 3069 // while (*p != '\0') 3070 { 3071 size_t l_nonsep = strcspn (p, separators.c_str ()); 3072 //cerr << "quote: l_nonsep = " << l_nonsep << " *p = '" << *p << "'" << endl; 3073 while (l_nonsep--) 3074 { 3075 if (*p == '\"' && 3076 (p > text_c && *(p - 1) != '\\' || p == text_c)) 3077 { // quote " with ' 3078 *b++ = '\''; 3079 *b++ = *p++; 3080 *b++ = '\''; 3081 } 3082 else if (*p == '\'' && 3083 (p > text_c && *(p - 1) != '\\' || p == text_c)) 3084 { // quote ' with " 3085 *b++ = '\"'; 3086 *b++ = *p++; 3087 *b++ = '\"'; 3088 } 3089 else 3090 { // simply copy 3091 *b++ = *p++; 3092 } 3093 } 3094 size_t l_sep = strspn (p, separators.c_str ()); 3095 //cerr << "quote: l_sep = " << l_sep << " *p = '" << *p << "'" << endl; 3096 if (l_sep) 3097 { // quote separators with " 3098 // place quote before all backslashes preceding separators, if any 3099 char* r = b; 3100 while (r > buffer && *(r - 1) == '\\') 3101 r--; 3102 if (r == b) 3103 *b++ = '\"'; 3104 else 3105 *r = '\"', *b++ = '\\'; 3106 while (l_sep--) 3107 *b++ = *p++; 3108 *b++ = '\"'; 3109 } 3110 } 3111 *b = '\0'; 3112 result = buffer; 3113 free (buffer); 3114 return result; 3115 } 3116 3117 //------------------------------------------------------------- 3118 int SymbolValueList::print (const Symbol& symbol, 3119 const SymbolValue& value, 3120 bool& first_definition) const 3121 { 3122 int result (0); 3123 3124 if (use->get_package_name () == "CMT") return result; 3125 3126 cmt_string discarded_text; 3127 cmt_string define_text; 3128 ActionType action = Cmt::get_action (); 3129 3130 switch (command_type) 3131 { 3132 //case CommandSet : 3133 case CommandSetAppend : 3134 case CommandSetPrepend : 3135 case CommandSetRemove : 3136 case CommandSetRemoveRegexp : 3137 //case CommandAlias : 3138 //case CommandPath : 3139 case CommandPathAppend : 3140 case CommandPathPrepend : 3141 case CommandPathRemove : 3142 case CommandPathRemoveRegexp : 3143 case CommandMacroPrepend : 3144 //case CommandMacro : 3145 case CommandMacroAppend : 3146 case CommandMacroRemove : 3147 case CommandMacroRemoveRegexp : 3148 case CommandMacroRemoveAll : 3149 case CommandMacroRemoveAllRegexp : 3150 //case CommandAction : 3151 if (value.text == "") return result; 3152 break; 3153 } 3154 3155 if (discarded) discarded_text = " (discarded by override)"; 3156 else discarded_text = ""; 3157 3158 if (first_definition) define_text = "defines"; 3159 else define_text = "overrides"; 3160 3161 cout << "# Package "; 3162 if (use != 0) 3163 { 3164 cout << use->get_package_name () << " " << use->version; 3165 } 3166 3167 switch (command_type) 3168 { 3169 case CommandSet : 3170 cout << " " << define_text << " set " << symbol.name << " as " << endl; 3171 // cout << " " << define_text << " set " << symbol.name << " as "; 3172 cout << "set " << symbol.name; 3173 first_definition = false; 3174 result = 1; 3175 break; 3176 case CommandSetAppend : 3177 cout << " appends to set " << symbol.name << " : " << endl;; 3178 // cout << " appends to set " << symbol.name << " : "; 3179 cout << "set_append " << symbol.name; 3180 result = 1; 3181 break; 3182 case CommandSetPrepend : 3183 cout << " prepends to set " << symbol.name << " : " << endl; 3184 // cout << " prepends to set " << symbol.name << " : "; 3185 cout << "set_prepend " << symbol.name; 3186 result = 1; 3187 break; 3188 case CommandSetRemove : 3189 cout << " removes from set " << symbol.name << " : " << endl; 3190 // cout << " removes from set " << symbol.name << " : "; 3191 cout << "set_remove " << symbol.name; 3192 result = 1; 3193 break; 3194 case CommandSetRemoveRegexp : 3195 cout << " removes RE from set " << symbol.name << " : " << endl; 3196 // cout << " removes RE from set " << symbol.name << " : "; 3197 cout << "set_remove_regexp " << symbol.name; 3198 result = 1; 3199 break; 3200 case CommandAlias : 3201 cout << " " << define_text << " alias " << symbol.name << endl; 3202 // cout << " " << define_text << " alias " << symbol.name << " as "; 3203 cout << "alias " << symbol.name; 3204 first_definition = false; 3205 result = 1; 3206 break; 3207 case CommandPath : 3208 cout << " " << define_text << " path " << symbol.name << endl; 3209 // cout << " " << define_text << " path " << symbol.name << " as "; 3210 cout << "path " << symbol.name; 3211 first_definition = false; 3212 result = 1; 3213 break; 3214 case CommandPathAppend : 3215 cout << " appends to path " << symbol.name << endl; 3216 // cout << " appends to path " << symbol.name << " : "; 3217 cout << "path_append " << symbol.name; 3218 result = 1; 3219 break; 3220 case CommandPathPrepend : 3221 cout << " prepends to path " << symbol.name << " : " << endl; 3222 // cout << " prepends to path " << symbol.name << " : "; 3223 cout << "path_prepend " << symbol.name; 3224 result = 1; 3225 break; 3226 case CommandPathRemove : 3227 cout << " removes from path " << symbol.name << " : " << endl; 3228 // cout << " removes from path " << symbol.name << " : "; 3229 cout << "path_remove " << symbol.name; 3230 result = 1; 3231 break; 3232 case CommandPathRemoveRegexp : 3233 cout << " removes RE from path " << symbol.name << " : " << endl; 3234 // cout << " removes RE from path " << symbol.name << " : "; 3235 cout << "path_remove_regexp " << symbol.name; 3236 result = 1; 3237 break; 3238 case CommandMacro : 3239 cout << " " << define_text << " macro " << symbol.name << " as " << endl; 3240 // cout << " " << define_text << " macro " << symbol.name << " as "; 3241 cout << "macro " << symbol.name; 3242 result = 1; 3243 break; 3244 case CommandMacroPrepend : 3245 cout << " prepends to macro " << symbol.name << " : " << endl; 3246 // cout << " prepends to macro " << symbol.name << " : "; 3247 cout << "macro_prepend " << symbol.name; 3248 result = 1; 3249 break; 3250 case CommandMacroAppend : 3251 cout << " appends to macro " << symbol.name << " : " << endl; 3252 // cout << " appends to macro " << symbol.name << " : "; 3253 cout << "macro_append " << symbol.name; 3254 result = 1; 3255 break; 3256 case CommandMacroRemove : 3257 cout << " remove from macro " << symbol.name << " : " << endl; 3258 // cout << " remove from macro " << symbol.name << " : "; 3259 cout << "macro_remove " << symbol.name; 3260 result = 1; 3261 break; 3262 case CommandMacroRemoveRegexp : 3263 cout << " remove RE from macro " << symbol.name << " : " << endl; 3264 // cout << " remove RE from macro " << symbol.name << " : "; 3265 cout << "macro_remove_regexp " << symbol.name; 3266 result = 1; 3267 break; 3268 case CommandMacroRemoveAll : 3269 cout << " remove all from macro " << symbol.name << " : " << endl; 3270 // cout << " remove all from macro " << symbol.name << " : "; 3271 cout << "macro_remove_all " << symbol.name; 3272 result = 1; 3273 break; 3274 case CommandMacroRemoveAllRegexp : 3275 cout << " remove all RE from macro " << symbol.name << " : " << endl; 3276 // cout << " remove all RE from macro " << symbol.name << " : "; 3277 cout << "macro_remove_all_regexp " << symbol.name; 3278 result = 1; 3279 break; 3280 case CommandSetupScript : 3281 cout << " " << define_text << " setup script " << symbol.name << endl; 3282 // cout << " " << define_text << " action " << symbol.name << " as "; 3283 cout << "setup_script" /* << symbol.name */; 3284 first_definition = false; 3285 result = 1; 3286 break; 3287 /* 3288 case CommandAction : 3289 cout << " " << define_text << " action " << symbol.name << " as "; 3290 first_definition = false; 3291 break; 3292 */ 3293 } 3294 3295 cout << " " << quote (value.text, " \t"); 3296 // cout << "'" << value.text << "'"; 3297 3298 /* 3299 Tag* selected_tag = value.tag; 3300 3301 if ((selected_tag == 0) || 3302 (selected_tag == Tag::get_default ())) 3303 { 3304 cout << " for default tag"; 3305 } 3306 else 3307 { 3308 cout << " for tag '" << selected_tag->get_name () << "'"; 3309 } 3310 */ 3311 3312 cout << endl; 3313 // cout << discarded_text << endl; 3314 return result; 3315 } 3316 3317 //------------------------------------------------------------- 2988 3318 bool Symbol::check_tag_used (Tag* tag) 2989 3319 {
Note: See TracChangeset
for help on using the changeset viewer.