The Meta-Environment API
00001 #ifndef __RSCRIPT_MODULE_UTILS__ 00002 #define __RSCRIPT_MODULE_UTILS__ 00003 00004 #include <undefined.h> 00005 00006 process ModulenameBase(Modulename: str, Name: str?) is 00007 snd-msg(io-get-path-filename(Modulename)) 00008 . rec-msg(io-filename(Modulename, Name?)) 00009 00010 process ComputeCanonicalLanguagename(Modulename : str, Languagename : str?) is 00011 let 00012 Directory: str, 00013 Prefix: str, 00014 Name: str 00015 in 00016 LanguageNameFromModuleName(Modulename, Prefix?) 00017 . ModulenameBase(Modulename, Name?) 00018 . 00019 if not-equal(Prefix, UNDEFINED) then 00020 Prefix := concat(Prefix, "/") 00021 else 00022 tau 00023 fi 00024 . Languagename := concat(Prefix, Name) 00025 endlet 00026 00027 process LanguageNameFromModuleName(Modulename: str, Languagename: str?) is 00028 let 00029 Directory: str, 00030 Prefix: str, 00031 Name: str 00032 in 00033 snd-msg(io-get-path-directory(Modulename)) 00034 . rec-msg(io-directory(Modulename, Directory?)) 00035 . 00036 if not-equal(Directory, "") then 00037 snd-msg(io-get-path-directory(Directory)) 00038 . rec-msg(io-directory(Directory, Languagename?)) 00039 else 00040 Languagename := "" 00041 fi 00042 endlet 00043 00044 process ComputeFeatureModulename(Modulename : str, Feature : str, FeatureModulename : str?) is 00045 let 00046 Directory: str, 00047 Prefix: str, 00048 Name: str 00049 in 00050 LanguageNameFromModuleName(Modulename, Prefix?) 00051 . ModulenameBase(Modulename, Name?) 00052 . 00053 if not-equal(Prefix, "") then 00054 Prefix := concat(Prefix, "/") 00055 else 00056 tau 00057 fi 00058 . FeatureModulename := concat(concat(Prefix,concat(Feature, "/")), Name) 00059 endlet 00060 00061 /** 00062 * This process connects two modules, by taking the dirname of a 00063 * module name twice, then add the feature string, and then adding the 00064 * basename again to construct a new file name. 00065 */ 00066 process LookupFeatureModuleId(ModuleId: module-id, Feature : str, NewModuleId : module-id?) is 00067 let 00068 Modulename: str, 00069 Directory: str, 00070 Prefix: str, 00071 Name: str, 00072 FeatureModulename: str 00073 in 00074 NewModuleId := UNDEFINED 00075 . MM-GetAttribute(ModuleId, RSCRIPT_NAMESPACE, "name", Modulename?) 00076 . ComputeFeatureModulename(Modulename, Feature, FeatureModulename?) 00077 . MM-GetModuleIdByAttribute(RSCRIPT_NAMESPACE, "name", FeatureModulename, NewModuleId?) 00078 endlet 00079 00080 #endif