Thread Rating:
  • 379 Vote(s) - 2.79 Average
  • 1
  • 2
  • 3
  • 4
  • 5
マクロ DE 文字列を扱うのが・・・
10-14-2011, 01:55 PM, (This post was last modified: 10-14-2011, 01:57 PM by nasuB.)
#1
マクロ DE 文字列を扱うのが・・・
お久しぶりです。

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

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
10-14-2011, 02:24 PM,
#2
RE: マクロ DE 文字列を扱うのが・・・
これでどうでしょう?

Code:
{define-macro public {nasu
                         ?v:verbatim
                     }
  
    def src = {CurlSource.from-string
                  {format
                      |"{output "%s"}"|, {v.get-text}
                  }
              }
    {return {expand-template ?src}}
}
10-14-2011, 04:01 PM,
#3
RE: マクロ DE 文字列を扱うのが・・・
うぁおっ、ぬんっ!!できました。

ありがとうございます。

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

-B
10-14-2011, 04:57 PM,
#4
RE: マクロ DE 文字列を扱うのが・・・
ストレートなやり方はこうだと思います。

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にしてやります。

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('306')