📄 utility.jam
字号:
# Copyright 2001, 2002 Dave Abrahams# Copyright 2002, 2003, 2004, 2005 Vladimir Prus# Copyright 2008 Jurko Gospodnetic# Distributed under the Boost Software License, Version 1.0.# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)import "class" : is-instance ;import errors ;# For all elements of 'list' which do not already have 'suffix', add 'suffix'.#rule apply-default-suffix ( suffix : list * ){ local result ; for local i in $(list) { if $(i:S) = $(suffix) { result += $(i) ; } else { result += $(i)$(suffix) ; } } return $(result) ;}# If 'name' contains a dot, returns the part before the last dot. If 'name'# contains no dot, returns it unmodified.#rule basename ( name ){ if $(name:S) { name = $(name:B) ; } return $(name) ;}# Return the file of the caller of the rule that called caller-file.#rule caller-file ( ){ local bt = [ BACKTRACE ] ; return $(bt[9]) ;}# Tests if 'a' is equal to 'b'. If 'a' is a class instance, calls its 'equal'# method. Uses ordinary jam's comparison otherwise.#rule equal ( a b ){ if [ is-instance $(a) ] { return [ $(a).equal $(b) ] ; } else { if $(a) = $(b) { return true ; } }}# Tests if 'a' is less than 'b'. If 'a' is a class instance, calls its 'less'# method. Uses ordinary jam's comparison otherwise.#rule less ( a b ){ if [ is-instance $(a) ] { return [ $(a).less $(b) ] ; } else { if $(a) < $(b) { return true ; } }}# Returns the textual representation of argument. If it is a class instance,# class its 'str' method. Otherwise, returns the argument.#rule str ( value ){ if [ is-instance $(value) ] { return [ $(value).str ] ; } else { return $(value) ; }}# Accepts a list of gristed values and returns them ungristed. Reports an error# in case any of the passed parameters is not gristed, i.e. surrounded in angle# brackets < and >.#rule ungrist ( names * ){ local result ; for local name in $(names) { local stripped = [ MATCH ^<(.*)>$ : $(name) ] ; if ! $(stripped) { errors.error "in ungrist $(names) : $(name) is not of the form <.*>" ; } result += $(stripped) ; } return $(result) ;}# If the passed value is quoted, unquotes it. Otherwise returns the value# unchanged.#rule unquote ( value ? ){ local match-result = [ MATCH ^(\")(.*)(\")$ : $(value) ] ; if $(match-result) { return $(match-result[2]) ; } else { return $(value) ; }}rule __test__ ( ){ import assert ; import "class" : new ; import errors : try catch ; assert.result 123 : str 123 ; class test-class__ { rule __init__ ( ) { } rule str ( ) { return "str-test-class" ; } rule less ( a ) { return "yes, of course!" ; } rule equal ( a ) { return "not sure" ; } } assert.result "str-test-class" : str [ new test-class__ ] ; assert.true less 1 2 ; assert.false less 2 1 ; assert.result "yes, of course!" : less [ new test-class__ ] 1 ; assert.true equal 1 1 ; assert.false equal 1 2 ; assert.result "not sure" : equal [ new test-class__ ] 1 ; assert.result foo.lib foo.lib : apply-default-suffix .lib : foo.lib foo.lib ; assert.result foo : basename foo ; assert.result foo : basename foo.so ; assert.result foo.so : basename foo.so.1 ; assert.result : unquote ; assert.result "" : unquote "" ; assert.result foo : unquote foo ; assert.result \"foo : unquote \"foo ; assert.result foo\" : unquote foo\" ; assert.result foo : unquote \"foo\" ; assert.result \"foo\" : unquote \"\"foo\"\" ; assert.result : ungrist ; assert.result foo : ungrist <foo> ; assert.result <foo> : ungrist <<foo>> ; assert.result foo bar : ungrist <foo> <bar> ; try ; { ungrist "" ; } catch "in ungrist : is not of the form <.*>" ; try ; { ungrist <> ; } catch "in ungrist <> : <> is not of the form <.*>" ; try ; { ungrist foo ; } catch "in ungrist foo : foo is not of the form <.*>" ; try ; { ungrist <foo ; } catch "in ungrist <foo : <foo is not of the form <.*>" ; try ; { ungrist foo> ; } catch "in ungrist foo> : foo> is not of the form <.*>" ; try ; { ungrist foo bar ; } catch "in ungrist foo : foo is not of the form <.*>" ; try ; { ungrist foo <bar> ; } catch "in ungrist foo : foo is not of the form <.*>" ; try ; { ungrist <foo> bar ; } catch "in ungrist bar : bar is not of the form <.*>" ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -