Curl Global Community
マクロ DE 文字列を扱うのが・・・ - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: マクロ DE 文字列を扱うのが・・・ (/showthread.php?tid=306)



マクロ DE 文字列を扱うのが・・・ - nasuB - 10-14-2011

お久しぶりです。

マクロに関して奮闘中です。

nasuマクロの引数で、Identifierを受け取り、
それをoutputに文字列として渡すというマクロを作りました。

Code:
{define-macro public {nasu
                       ?v:identifier
                     }
    def l = {Literal v.name}
    {return {expand-template {output ?l}}}
}


このとき、{nasu BBB}は動くのですが、{nasu BBB.BBB}とすると
”.”がOperandとして認識されるようで、動かなくなったので、
?v:identifierを?v:expressionにしてみました。

Code:
{define-macro public {nasu
                        ?v:expression
                     }
    def l = {Literal {v.get-text}}
    {return {expand-template {output ?l}}}
}

ところが、BBB.BBBはLiteralとして扱えないようで、これも駄目だす。

そこで、トリッキーな感じで、messageでごまかそうと思いましたが、

Code:
{define-macro public {nasu
                        ?v:expression
                      }
    {return {expand-template {output {message ?v}}}}
}

これまたNG出されました!!!

だれか、ぷりーず・へるぷみー。。

マクロ難しい・・・・。

- B



RE: マクロ DE 文字列を扱うのが・・・ - yosuga - 10-14-2011

これでどうでしょう?

Code:
{define-macro public {nasu
                         ?v:verbatim
                     }
  
    def src = {CurlSource.from-string
                  {format
                      |"{output "%s"}"|, {v.get-text}
                  }
              }
    {return {expand-template ?src}}
}



RE: マクロ DE 文字列を扱うのが・・・ - nasuB - 10-14-2011

うぁおっ、ぬんっ!!できました。

ありがとうございます。

ちょっと強引っぽいですが、できればOKだす。。

-B


RE: マクロ DE 文字列を扱うのが・・・ - fukuta - 10-14-2011

ストレートなやり方はこうだと思います。

Code:
{define-macro public {nasu
                         ?v:expression
                     }
    def lit = {Literal {{v.get-text}.to-String}}
    {return lit}
}


{Literal {v.get-text}} がエラーになるのは get-text の戻り値がmutableなSubStringオブジェクトなためなのでto-StringでimmutableなStringにしてやります。