%% %% wings_shape.erl -- %% %% Utilities for shape records. %% -module(wings_shape). -export([insert/3]). -include("wings.hrl"). %%% %%% Exported functions. %%% %% new(We, Suffix, St0) -> St. %% Suffix = cut | clone | copy | extract | sep %% %% Create a new object based on an old object. The name %% will be created from the old name (with digits and known %% suffixes stripped) with the given Suffix and a number %% appended. insert(#we{name=OldName}=We0, Suffix, #st{shapes=Shapes0,onext=Oid}=St) -> Name = new_name(OldName, Suffix, Oid), We = We0#we{id=Oid,name=Name}, Shapes = gb_trees:insert(Oid, We, Shapes0), St#st{shapes=Shapes,onext=Oid+1}. %%% %%% Local functions follow. %%% new_name(OldName, Suffix0, Id) -> Suffix = suffix(Suffix0), Base = base(lists:reverse(OldName)), lists:reverse(Base, "_" ++ Suffix ++ integer_to_list(Id)). %% Note: Filename suffixes are intentionally not translated. %% If we are to translate them in the future, base/1 below %% must be updated to strip suffixes (both for the current language %% and for English). suffix(cut) -> "cut"; suffix(clone) -> "clone"; suffix(copy) -> "copy"; suffix(extract) -> "extract"; suffix(mirror) -> "mirror"; suffix(sep) -> "sep". %% base_1(ReversedName) -> ReversedBaseName %% Given an object name, strip digits and known suffixes to %% create a base name. Returns the unchanged name if %% no known suffix could be stripped. base(OldName) -> case base_1(OldName) of error -> OldName; Base -> Base end. base_1([H|T]) when $0 =< H, H =< $9 -> base_1(T); base_1("tuc_"++Base) -> Base; %"_cut" base_1("enolc_"++Base) -> Base; %"_clone" base_1("ypoc_"++Base) -> Base; %"_copy" base_1("tcartxe_"++Base) -> Base; %"_extract" base_1("rorrim_"++Base) -> Base; %"_mirror" base_1("pes_"++Base) -> Base; %"_sep" base_1(_Base) -> error.