Skip to content

Instantly share code, notes, and snippets.

@think49
Created December 29, 2010 13:04
Show Gist options
  • Save think49/758515 to your computer and use it in GitHub Desktop.
Save think49/758515 to your computer and use it in GitHub Desktop.
[Proxomitron] Array を実装するフィルタ prototype
# NoAddURL
#
# ArrayCommand
# 変数の宣言
# https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Variables
# http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.6
# Array Statements
$TST(ArrayStatements=$SET(StatementFlag=true)$SET(ArrayEvaluationValue=)(
[%00\t ]+[\n\r;]$SET(StatementFlag=true) |
\s |
$TST(StatementFlag=true)
var ([$_a-z][$0-9_a-z]+)\9$SET(ArrayCSVLine=\9) = \[
(\"$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\"$SET(ArrayCSVLine=$GET(ArrayCSVLine)"")|([^"])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\"|
\'$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\'$SET(ArrayCSVLine=$GET(ArrayCSVLine)')|([^'])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\')
( , (\"$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\"$SET(ArrayCSVLine=$GET(ArrayCSVLine)"")|([^"])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\"|
\'$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\'$SET(ArrayCSVLine=$GET(ArrayCSVLine)')|([^'])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\'))+
]
$SET(ArrayCSV=$GET(ArrayCSV)$GET(ArrayCSVLine)\r\n)$SET(ArrayEvaluationValue=$GET(ArrayCSVLine))|
$TST(StatementFlag=true)
([$_a-z][$0-9_a-z]+)\9$SET(ArrayVariable=\9)\[([0-9]+{1,*})\9]$SET(ArrayIndex=\9)
($TST(ArrayCSV=((^$TST(ArrayVariable))[^,]+(,\"(\"+{2}|[^"])+\")+\r\n)++
$TST(ArrayVariable)$SET(Num=0)((^$TST(Num=$TST(ArrayIndex))),\"(\"+{2}|[^"])+\"$LST(increment))+
($TST(Num=$TST(ArrayIndex))
,\"$SET(ArrayEvaluationValue=)(\"+{2}$SET(ArrayEvaluationValue=$GET(ArrayEvaluationValue)")|([^"])\9$SET(ArrayEvaluationValue=$GET(ArrayEvaluationValue)\9))+\"|
$SET(ArrayEvaluationValue=undefined))
*)|
$SET(ArrayEvaluationValue=ReferenceError: $GET(ArrayVariable) is not defined))|
$TST(StatementFlag=true)
([$_a-z][$0-9_a-z]+)\9$SET(ArrayVariable=\9)
($TST(ArrayCSV=((^$TST(ArrayVariable))[^,]+(,\"(\"+{2}|[^"])+\")+\r\n)++($TST(ArrayVariable)(,\"(\"+{2}|[^"])+\")+)\9*)
$SET(ArrayEvaluationValue=\9)|
$SET(ArrayEvaluationValue=ReferenceError: $GET(ArrayVariable) is not defined))
)+{1,*})
$SET(ArrayStatements=)$SET(ArrayCSVLine=)$SET(StatementFlag=)
# $TST(ArrayVariable)((^$TST(ArrayIndex=$GET(Num))),\"(\"+{2}|[^"])+\"$LST(increment))+,\"$TST(ArrayIndex=$GET(Num))$SET(ArrayEvaluationValue=)(\"+{2}$SET(ArrayEvaluationValue=$GET(ArrayEvaluationValue)")|([^"])\9$SET(ArrayEvaluationValue=$GET(ArrayEvaluationValue)\9))+\"
# $TST(ArrayCommand=$SET(flag=true)(
# [%00\t ]+[\n\r;]$SET(flag=true) |
# $TST(flag=true)
# var ([$_a-z][$0-9_a-z]+)\9$SET(ArrayCSVLine=)$SET(ArrayCSVLine=\9) = \[
# (\"$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\"$SET(ArrayCSVLine=$GET(ArrayCSVLine)"")|([^"])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\"|
# \'$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\'$SET(ArrayCSVLine=$GET(ArrayCSVLine)')|([^'])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\')
# ( , (\"$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\"$SET(ArrayCSVLine=$GET(ArrayCSVLine)"")|([^"])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\"|
# \'$SET(ArrayCSVLine=$GET(ArrayCSVLine),")(\\\'$SET(ArrayCSVLine=$GET(ArrayCSVLine)')|([^'])\9$SET(ArrayCSVLine=$GET(ArrayCSVLine)\9))+$SET(ArrayCSVLine=$GET(ArrayCSVLine)")\'))+
# ]
# $SET(ArrayCSV=$GET(ArrayCSV)$GET(ArrayCSVLine)\r\n)$SET(ArrayCSVLine=)
# )+{1,*})
# $SET(ArrayCommand=)
# NoAddURL
#
# increment
# 「0~8を1つ以上含む数値」をインクリメント (+1)
$TST(Num=\9(^(^[0-8]9+(^[0-9])))$SET(Ntmp=\9)($LST(Num-plus))+)$SET(Num=$GET(Ntmp))$SET(Ntmp=)
# 「9のみで構成される数値」をインクリメント (+1)
$TST(Num=(^(^9))$SET(Ntmp=1)((^(^9))$LST(Num-plus))+)$SET(Num=$GET(Ntmp))$SET(Ntmp=)
[Patterns]
Name = "Array [2010/12/02] prototype v0.1.31"
Active = TRUE
Limit = 256
Match = "array"
"$SET(ArrayStatements=var hoge = ["foo","\\"Hello, World!\\"",'test'];)"
"$LST(ArrayCommand)"
Replace = "ArrayCSVLine = $GET(ArrayCSVLine)\r\n"
"ArrayCSV = $GET(ArrayCSV)\r\n"
"\\9 = \9 "
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment