sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

D1588.stub-LC_COLLATE-1.patch (9201B)


      1 From 7c28903712ecc6c2709f78f94743a2049f5edb8e Mon Sep 17 00:00:00 2001
      2 From: Koichi Murase <myoga.murase@gmail.com>
      3 Date: Sat, 5 Jun 2021 06:44:52 +0900
      4 Subject: [PATCH] stub: work around LC_COLLATE (1)
      5 
      6 ---
      7  lib/core-syntax.sh | 39 ++++++++++++++++++++++-----------------
      8  make_command.sh    |  9 +++++++++
      9  2 files changed, 31 insertions(+), 17 deletions(-)
     10 
     11 diff --git a/lib/core-syntax.sh b/lib/core-syntax.sh
     12 index e6c5167..4ac774b 100644
     13 --- a/lib/core-syntax.sh
     14 +++ b/lib/core-syntax.sh
     15 @@ -2057,8 +2057,8 @@ function ble/syntax:bash/check-quotes {
     16        ((_ble_syntax_attr[i]=aqdel,i+=2))
     17        local t=${BASH_REMATCH[1]} rematch4=${BASH_REMATCH[4]}
     18  
     19 -      local rex='\\[abefnrtvE"'\''\?]|\\[0-7]{1,3}|\\c.|\\x[0-9a-fA-F]{1,2}'
     20 -      ((_ble_bash>=40200)) && rex=$rex'|\\u[0-9a-fA-F]{1,4}|\\U[0-9a-fA-F]{1,8}'
     21 +      local rex='\\[abefnrtvE"'\''\?]|\\[0-7]{1,3}|\\c.|\\x[0-9a-fA-F]{1,2}' # #D1588 WA LC_COLLATE ok
     22 +      ((_ble_bash>=40200)) && rex=$rex'|\\u[0-9a-fA-F]{1,4}|\\U[0-9a-fA-F]{1,8}' # #D1588 WA LC_COLLATE ok
     23        local rex='^([^'\''\]*)('$rex'|(\\.))'
     24        while [[ $t =~ $rex ]]; do
     25          local m1=${BASH_REMATCH[1]} m2=${BASH_REMATCH[2]}
     26 @@ -2801,10 +2801,10 @@ function ble/syntax:bash/ctx-expr {
     27      local ret; ble/syntax/highlight/vartype "$BASH_REMATCH" readvar:expr
     28      ((_ble_syntax_attr[i]=ret,i+=${#rematch}))
     29      return 0
     30 -  elif rex='^0[xX][0-9a-fA-F]*|^[0-9]+(#[0-9a-zA-Z@_]*)?'; [[ $tail =~ $rex ]]; then
     31 +  elif rex='^0[xX][0-9a-fA-F]*|^[0-9]+(#[0-9a-zA-Z@_]*)?'; [[ $tail =~ $rex ]]; then # #D1588 WA LC_COLLATE
     32      ((_ble_syntax_attr[i]=ATTR_VAR_NUMBER,i+=${#BASH_REMATCH}))
     33      return 0
     34 -  elif ble/syntax:bash/check-plain-with-escape "[^${_ble_syntax_bash_chars[ctx]}a-zA-Z_0-9]+" 1; then
     35 +  elif ble/syntax:bash/check-plain-with-escape "[^${_ble_syntax_bash_chars[ctx]}a-zA-Z_0-9]+" 1; then # #D1588 WA LC_COLLATE
     36      return 0
     37    elif [[ $tail == ['][()}']* ]]; then
     38      local char=${tail::1} ntype
     39 @@ -2856,7 +2856,7 @@ function ble/syntax:bash/ctx-expr {
     40  function ble/syntax:bash/check-brace-expansion {
     41    [[ $tail == '{'* ]] || return 1
     42  
     43 -  local rex='^\{[-+0-9a-zA-Z.]*(\}?)'
     44 +  local rex='^\{[-+0-9a-zA-Z.]*(\}?)' # #D1588 WA LC_COLLATE
     45    [[ $tail =~ $rex ]]
     46    local str=$BASH_REMATCH
     47  
     48 @@ -2897,7 +2897,7 @@ function ble/syntax:bash/check-brace-expansion {
     49      ctx=${_ble_syntax_bash_command_IsAssign[ctx]}
     50  
     51    # {a..b..c} の形式のブレース展開
     52 -  if rex='^\{(([-+]?[0-9]+)\.\.[-+]?[0-9]+|[a-zA-Z]\.\.[a-zA-Z])(\.\.[-+]?[0-9]+)?\}$'; [[ $str =~ $rex ]]; then
     53 +  if rex='^\{(([-+]?[0-9]+)\.\.[-+]?[0-9]+|[a-zA-Z]\.\.[a-zA-Z])(\.\.[-+]?[0-9]+)?\}$'; [[ $str =~ $rex ]]; then # #D1588 WA LC_COLLATE
     54      if [[ $force_attr ]]; then
     55        ((_ble_syntax_attr[i]=force_attr,i+=${#str}))
     56      else
     57 @@ -3139,7 +3139,7 @@ function ble/syntax:bash/check-variable-assignment {
     58    else
     59      suffix="$suffix|\["
     60    fi
     61 -  local rex_assign="^([a-zA-Z_][a-zA-Z_0-9]*)($suffix)"
     62 +  local rex_assign="^([a-zA-Z_][a-zA-Z_0-9]*)($suffix)" # #D1588 WA LC_COLLATE
     63    [[ $tail =~ $rex_assign ]] || return 1
     64    local rematch=$BASH_REMATCH
     65    local rematch1=${BASH_REMATCH[1]} # for bash-3.1 ${#arr[n]} bug
     66 @@ -3333,7 +3333,7 @@ function ble/syntax:bash/ctx-coproc/.is-next-compound {
     67    local is_compound=
     68    if [[ $tail == '('* ]]; then
     69      is_compound=1
     70 -  elif rex='^[a-z]+|^\[\[?|^[{}!]'; [[ $tail =~ $rex ]]; then
     71 +  elif rex='^[a-z]+|^\[\[?|^[{}!]'; [[ $tail =~ $rex ]]; then # #D1588 WA LC_COLLATE
     72      local rematch=$BASH_REMATCH
     73  
     74      ((p+=${#rematch}))
     75 @@ -3367,7 +3367,7 @@ function ble/syntax:bash/ctx-coproc/check-word-end {
     76    local word=${text:wbegin:wlen}
     77    local wt=$wtype
     78  
     79 -  if local rex='^[_a-zA-Z0-9]+$'; [[ $word =~ $rex ]]; then
     80 +  if local rex='^[_a-zA-Z0-9]+$'; [[ $word =~ $rex ]]; then # #D1588 WA LC_COLLATE
     81      if ble/syntax:bash/ctx-coproc/.is-next-compound; then
     82        # Note: [_a-zA-Z0-9]+ は一回の読み取りの筈なので、
     83        #   此処で遡って代入しても問題ない筈。
     84 @@ -3911,7 +3911,7 @@ function ble/syntax:bash/ctx-command {
     85      local attr=$ctx
     86      if ((attr==CTX_FARGI1)); then
     87        # for var in ... の var の部分は変数名をチェックして着色
     88 -      if rex='^[a-zA-Z_][a-zA-Z_0-9]*'; ((i==wbegin)) && [[ $rematch =~ $rex ]]; then
     89 +      if rex='^[a-zA-Z_][a-zA-Z_0-9]*'; ((i==wbegin)) && [[ $rematch =~ $rex ]]; then # #D1588 WA LC_COLLATE
     90          local ret; ble/syntax/highlight/vartype "$BASH_REMATCH"; attr=$ret
     91        else
     92          attr=$ATTR_ERR
     93 @@ -4653,11 +4653,11 @@ function ble/syntax:bash/find-rhs {
     94  
     95    local rex=
     96    if ((wtype==ATTR_VAR)); then
     97 -    rex='^[a-zA-Z0-9_]+(\+?=|\[)'
     98 +    rex='^[a-zA-Z0-9_]+(\+?=|\[)' # #D1588 WA LC_COLLATE
     99    elif ((wtype==CTX_VALI)); then
    100      if [[ :$opts: == *:element-assignment:* ]]; then
    101        # 配列要素に対しても変数代入の形式を許す
    102 -      rex='^[a-zA-Z0-9_]+(\+?=|\[)|^(\[)'
    103 +      rex='^[a-zA-Z0-9_]+(\+?=|\[)|^(\[)' # #D1588 WA LC_COLLATE
    104      else
    105        rex='^(\[)'
    106      fi
    107 @@ -4985,6 +4985,7 @@ function ble/syntax/parse {
    108    ((end==beg&&end0==beg&&_ble_syntax_dbeg<0)) && return 0
    109  
    110    local IFS=$_ble_term_IFS
    111 +  local LC_ALL= LC_COLLATE=C 2>/dev/null # #D1588 WA regex range expression
    112  
    113    local shift=$((end-end0))
    114  #%if !release
    115 @@ -5116,6 +5117,8 @@ function ble/syntax/parse {
    116      '((${#_ble_syntax_stat[@]}==iN+1))' \
    117      "unexpected array length #arr=${#_ble_syntax_stat[@]} (expected to be $iN), #proto=${#_ble_array_prototype[@]} should be >= $iN"
    118  #%end
    119 +
    120 +  ble/util/unlocal LC_ALL LC_COLLATE 2>/dev/null # #D1588 WA regex range expression
    121  }
    122  
    123  ## @fn ble/syntax/highlight text [lang]
    124 @@ -5199,7 +5202,7 @@ function ble/syntax/completion-context/.add {
    125  ## @fn ble/syntax/completion-context/.check/parameter-expansion
    126  ##   @var[in] text istat index ctx
    127  function ble/syntax/completion-context/.check/parameter-expansion {
    128 -  local rex_paramx='^(\$(\{[!#]?)?)([a-zA-Z_][a-zA-Z_0-9]*)?$'
    129 +  local rex_paramx='^(\$(\{[!#]?)?)([a-zA-Z_][a-zA-Z_0-9]*)?$' # #D1588 WA LC_COLLATE
    130    if [[ ${text:istat:index-istat} =~ $rex_paramx ]]; then
    131      local rematch1=${BASH_REMATCH[1]}
    132      local source=variable
    133 @@ -5314,7 +5317,7 @@ function ble/syntax/completion-context/.check-prefix/ctx:next-command {
    134      ble/syntax/completion-context/.add command "$istat"
    135  
    136      # 変数・代入のチェック
    137 -    if local rex='^[a-zA-Z_][a-zA-Z_0-9]*(\+?=)?$' && [[ $word =~ $rex ]]; then
    138 +    if local rex='^[a-zA-Z_][a-zA-Z_0-9]*(\+?=)?$' && [[ $word =~ $rex ]]; then # #D1588 WA LC_COLLATE
    139        if [[ $word == *= ]]; then
    140          if ((_ble_bash>=30100)) || [[ $word != *+= ]]; then
    141            # VAR=<argument>: 現在位置から argument 候補を生成する
    142 @@ -5515,7 +5518,7 @@ function ble/syntax/completion-context/.check-prefix/ctx:rhs {
    143    ble/syntax/completion-context/.check/parameter-expansion
    144    if ((wlen>=0)); then
    145      local p=$wbeg
    146 -    local rex='^[a-zA-Z0-9_]+(\+?=|\[)'
    147 +    local rex='^[a-zA-Z0-9_]+(\+?=|\[)' # #D1588 WA LC_COLLATE
    148      ((ctx==CTX_VALR)) && rex='^(\[)'
    149      if [[ ${text:p:index-p} =~ $rex ]]; then
    150        if [[ ${BASH_REMATCH[1]} == '[' ]]; then
    151 @@ -5568,7 +5571,7 @@ function ble/syntax/completion-context/.check-prefix/ctx:param {
    152  ##   数式中の変数名を補完する文脈
    153  _ble_syntax_bash_complete_check_prefix[CTX_EXPR]=expr
    154  function ble/syntax/completion-context/.check-prefix/ctx:expr {
    155 -  local tail=${text:istat:index-istat} rex='[a-zA-Z_]+$'
    156 +  local tail=${text:istat:index-istat} rex='[a-zA-Z_]+$' # #D1588 WA LC_COLLATE
    157    if [[ $tail =~ $rex ]]; then
    158      local p=$((index-${#BASH_REMATCH}))
    159      ble/syntax/completion-context/.add variable:a "$p"
    160 @@ -5649,7 +5652,7 @@ function ble/syntax/completion-context/.search-last-istat {
    161  ##   @var[in] index
    162  ##   @var[out] sources
    163  function ble/syntax/completion-context/.check-prefix {
    164 -  local rex_param='^[a-zA-Z_][a-zA-Z_0-9]*$'
    165 +  local rex_param='^[a-zA-Z_][a-zA-Z_0-9]*$' # #D1588 WA LC_COLLATE
    166    local from=${1:-$((index-1))}
    167  
    168    local ret
    169 @@ -5737,8 +5740,10 @@ function ble/syntax/completion-context/generate {
    170    sources=()
    171    ((index<0&&(index=0)))
    172  
    173 +  local LC_ALL= LC_COLLATE=C 2>/dev/null # #D1588 WA regex-ranges
    174    ble/syntax/completion-context/.check-prefix
    175    ble/syntax/completion-context/.check-here
    176 +  ble/util/unlocal LC_ALL LC_COLLATE 2>/dev/null # #D1588 WA regex-ranges
    177  }
    178  
    179  #------------------------------------------------------------------------------
    180 diff --git a/make_command.sh b/make_command.sh
    181 index 1a1a629..75828f3 100755
    182 --- a/make_command.sh
    183 +++ b/make_command.sh
    184 @@ -366,6 +366,14 @@ function sub:scan/mistake-_ble_bash {
    185    grc '\(\(.*\b_ble_base\b.*\)\)'
    186  }
    187  
    188 +function sub:scan/WA-regex-range {
    189 +  echo "--- $FUNCNAME ---"
    190 +  grc --color -i 'a-fA-F|a-zA-Z' --exclude=ext |
    191 +    sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*//
    192 +      \Z#D1588Zd
    193 +      g'
    194 +}
    195 +
    196  function sub:scan {
    197    if ! type grc >/dev/null; then
    198      echo 'blesh check: grc not found. grc can be found in github.com:akinomyoga/mshex.git/' >&2
    199 @@ -447,6 +455,7 @@ function sub:scan {
    200    sub:scan/eval-literal
    201    sub:scan/WA-localvar_inherit
    202    sub:scan/mistake-_ble_bash
    203 +  sub:scan/WA-regex-range
    204  
    205    sub:scan/memo-numbering
    206  }
    207 -- 
    208 2.21.3
    209