Advertisement
3nids

qgis settings registry

Mar 4th, 2022 (edited)
1,346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.79 KB | None | 0 0
  1. #!/usr/bin/env bash
  2.  
  3.  
  4.  
  5. #static const inline QgsSettingsEntryString settingsLocaleUserLocale = String( QStringLiteral( "locale/userLocale" ), QString() );
  6.  
  7.  
  8. #ag -c 'QgsSettingsEntry.*QgsSettings' | cut -d: -f1 | xargs gsed -i -r 's/QgsSettingsEntry([^ ]+)\( QStringLiteral\( "(.*)" \), QgsSettings::([^ ]+),/QgsSettingsEntry\1( QStringLiteral( "\l\3\/\2" ),/'
  9.  
  10. # TODO sections
  11.  
  12. SETTING_TYPE=StringList
  13. SETTING_TYPE_TO=StringList
  14. MODULE=core
  15. MODULE_CODE=Core
  16. while read -u 3 -r LINE; do
  17.   # echo "****"
  18.   echo $LINE
  19.   FILE=$(echo "${LINE}" | cut -d: -f1)
  20.   CODE=$(echo "${LINE}" | cut -d: -f2,3,4,5,6)
  21.   SETTING_DEFAULT=$(echo "${CODE}" | gsed -r 's/^.*value\( QStringLiteral\( "([^ ]+)" \)(, ([^ ]+))?(, QgsSettings::(\w+))? \).*$/\1!\3!\5/')
  22.   SETTING=$(echo "${SETTING_DEFAULT}" | cut -d! -f1)
  23.   DEFAULT=$(echo "${SETTING_DEFAULT}" | cut -d! -f2)
  24.   SECTION=$(echo "${SETTING_DEFAULT}" | cut -d! -f3)
  25.   PREFIX_STR="${SECTION,,}"$(echo "$SETTING" |  gsed -r 's|(/?%[0-9]+/.*)?/?[^/]+$||; ')
  26.   KEY=$(echo "$SETTING" | gsed "s|${PREFIX_STR}/||")
  27.  
  28.   #SETTING_VAR_NAME=$(echo "${KEY}" | gsed -r 's/^(.)/\U\1/; s/-')
  29.   SETTING_VAR_NAME=${KEY}
  30.   # PREPEND LAST PREFIX PART
  31.   if [[ ! ${PREFIX_STR} =~ ^(UI)$ ]]; then
  32.     SETTING_VAR_NAME=$(echo "${PREFIX_STR}" | gsed 's|^/?(\w+/)+||g'| gsed -r 's/^(.)/\U\1/')"${SETTING_VAR_NAME}"
  33.   fi
  34.   SETTING_VAR_NAME="settings"$(echo "${SETTING_VAR_NAME}" | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;')
  35.  
  36.   PREFIX_VAR=$(echo ${PREFIX_STR} | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;' | gsed -r 's/^(.*)$/\U\1/')
  37.  
  38.   # for regexes
  39.   SETTING_ESC=$(echo "${SETTING}" | gsed 's|/|.|g')
  40.  
  41.  
  42.   HEADER=$(echo ${FILE} | gsed 's|\.cpp$|.h|')
  43.   BASECLASS=$(basename ${HEADER} | gsed 's/\.h$//')
  44.  
  45.   if [[ ! ${HEADER} =~ \.h$ ]]; then
  46.     echo "wrong header: $HEADER"
  47.     exit 1
  48.   fi
  49.  
  50.   # echo "$HEADER $BASECLASS"
  51.  
  52.   HAS_CLASS=$(git grep -i -c "^ *class ${MODULE}_EXPORT ${BASECLASS}" ${HEADER} | cut -d: -f2)
  53.   CLASS_DEF=$(git grep -i "^ *class ${MODULE}_EXPORT ${BASECLASS}" ${HEADER} | cut -d: -f2 | gsed -r "s/^ *class ${MODULE}_EXPORT (${BASECLASS}).*$/\1/i")
  54.  
  55.   echo -e "   FILE: $FILE\n   SETTING: $SETTING\n   DEFAULT: $DEFAULT\n   KEY: $KEY\n   PREFIX_STR: $PREFIX_STR\n   PREFIX_VAR: $PREFIX_VAR\n   SECTION: $SECTION\n   CLASS_DEF: $CLASS_DEF\n   HAS_CLASS: $HAS_CLASS"
  56.  
  57.   MODE=0
  58.   while read C_LINE; do
  59.     C_SETTING=$(echo "$C_LINE" | cut -d: -f1)
  60.     C_ACTION=$(echo "$C_LINE" | cut -d: -f2)
  61.     if [[ "$C_SETTING" == "$SETTING" ]]; then
  62.       echo "setting already in config"
  63.       MODE="${C_ACTION}"
  64.       break
  65.     fi
  66.   done<scripts/settings-migration.dat
  67.  
  68.   if [[ "${MODE}" == 0 ]]; then
  69.     echo "***"
  70.     echo -e "Add ${SETTING}" to
  71.     echo -e "  c) class ${CLASS_DEF}"
  72.     echo -e "  r) registry"
  73.     echo -e "  s) skip and continue"
  74.     echo -e "  e) exit"
  75.  
  76.     while read -n 1 n; do
  77.       echo ""0
  78.       case $n in
  79.           c)
  80.             echo -e "add to class"
  81.             MODE=class
  82.             # https://unix.stackexchange.com/a/533708/238014
  83.             #gsed -e "/^ *class ${MODULE}_EXPORT ${BASECLASS}/{:a; N; /\n *public:/!ba; a\XXXX" -e '}' ${HEADER}
  84.             break
  85.             ;;
  86.           r)
  87.             echo -e "add to registry"
  88.             MODE=registry
  89.             break
  90.             ;;
  91.           s)
  92.             echo -e "skip"
  93.             MODE=SKIP
  94.             break
  95.             ;;
  96.           e)
  97.             exit 1
  98.             ;;
  99.           *) invalid option;;
  100.       esac
  101.     done
  102.   fi
  103.   if [[ ${MODE} != skip ]]; then
  104.     echo "$SETTING:$MODE" >> scripts/settings-migration.dat
  105.  
  106.     if [[ ${MODE} == class ]]; then
  107.       SETTING_VAR_NAME_COMPLETE="${CLASS_DEF}::${SETTING_VAR_NAME}"
  108.       SETTING_VAR_NAME_CLASS="${SETTING_VAR_NAME}"
  109.       SETTING_VAR_NAME_REGISTRY="${CLASS_DEF}::${SETTING_VAR_NAME}"
  110.       CLASS_FOUND=0
  111.       shopt -s nocasematch
  112.       IFS=''
  113.       INCLUDE_IMPL_COUNT=$(git grep -c '#include "qgssettingsentryimpl.h"' ${HEADER} | cut -d: -f2)
  114.       if [[ -z $INCLUDE_IMPL_COUNT ]]; then
  115.         gsed -i '20 i #include "qgssettingsentryimpl.h"' ${HEADER}
  116.       fi
  117.       LINE_NUMBER=0
  118.       while read F_LINE; do
  119.         (( LINE_NUMBER++ ))
  120.         if [[ $CLASS_FOUND -eq 0 ]]; then
  121.           #echo '[[ "'${F_LINE//\"/\\\"g}'" =~ class\ '${MODULE}'_EXPORT\ '${BASECLASS}' ]]'
  122.           if eval '[[ "'${F_LINE//\"/\\\"g}'" =~ class\ '${MODULE}'_EXPORT\ '${BASECLASS}' ]]'; then
  123.             echo "CLASS_FOUND"
  124.             CLASS_FOUND=1
  125.           fi
  126.         else
  127.           if [[ "${F_LINE}" =~ ^\ *public:$ ]]; then
  128.             echo "public found"
  129.             gsed -i "$(( $LINE_NUMBER+2 )) i \ \ \ \ static const inline QgsSettingsEntry${SETTING_TYPE} ${SETTING_VAR_NAME} = QgsSettingsEntry${SETTING_TYPE}( QStringLiteral( \"${KEY}\" ), QgsSettings::Prefix::${PREFIX_VAR} ) SIP_SKIP;\n" $HEADER
  130.             break
  131.           fi
  132.         fi
  133.       done < ${HEADER}
  134.       shopt -u nocasematch
  135.     else
  136.       SETTING_VAR_NAME_COMPLETE="QgsSettingsRegistry${MODULE_CODE}::${SETTING_VAR_NAME}"
  137.       SETTING_VAR_NAME_CLASS="QgsSettingsRegistry${MODULE_CODE}::${SETTING_VAR_NAME}"
  138.       SETTING_VAR_NAME_REGISTRY="${SETTING_VAR_NAME}"
  139.     fi
  140.  
  141.     PREFIX_DECL_COUNT=$(git grep -c "static const inline char \*${PREFIX_VAR} = \"${PREFIX_STR}\";" src/core/settings/qgssettings.h | cut -d: -f2)
  142.     if [[ -z $PREFIX_DECL_COUNT ]]; then
  143.       gsed -i "105 i \ \ \ \ \ \ \ \ static const inline char *${PREFIX_VAR} = \"${PREFIX_STR}\";" src/core/settings/qgssettings.h
  144.     fi
  145.     #gsed -i "185 i static const inline QgsSettingsEntry${SETTING_TYPE} ${SETTING_VAR_NAME_REGISTRY} = QgsSettingsEntry${SETTING_TYPE}( QStringLiteral( \"${KEY}\" ), QgsSettings::Prefix::${PREFIX_VAR} );"
  146.  
  147.     # Add setting to registry
  148.     MODULE_REG=src/${MODULE}/settings/qgssettingsregistry${MODULE}.cpp
  149.     HEADER_BASENAME=$(basename ${HEADER})
  150.     gsed -i "102 i \ \ addSettingsEntry( &${SETTING_VAR_NAME_REGISTRY} );" ${MODULE_REG}
  151.     INCLUDE_REG_COUNT=$(git grep -c "#include \"${HEADER_BASENAME}\"" ${MODULE_REG} | cut -d: -f2)
  152.     if [[ -z $INCLUDE_REG_COUNT ]]; then
  153.       gsed -i "28 i #include \"${HEADER_BASENAME}\"" ${MODULE_REG}
  154.     fi
  155.     while read -r S_FILE; do
  156.       SVARNAME=$([[ ${S_FILE} =~ ${HEADER} ]] && echo "${SETTING_VAR_NAME}" || echo "${SETTING_VAR_NAME_COMPLETE}")
  157.       gsed -i -r "s/(QgsSettings|QSettings|mSettings|settings)\.value\( QStringLiteral. .${SETTING_ESC}. \)(, ([^ ]+))* \).to${SETTING_TYPE_TO}\(\)/${SVARNAME}.value()/" ${S_FILE}
  158.       gsed -i -r "s/(QgsSettings|QSettings|mSettings|settings)\.setValue\( QStringLiteral. .${SETTING_ESC}. \), ([^ ]+)(, ([^ ]+))? \)/${SVARNAME}.setValue( \2 )/" ${S_FILE}
  159.     done<<<$(git grep -E -c "${SETTING_ESC}" src | cut -d: -f1)
  160.   fi
  161. done 3< <( unbuffer ag --noaffinity --only-matching --nonumber --no-group --nocolor -G '\.cpp$' "settings\.value\( QStringLiteral\( \"[^ ]+\" \)(, [^ ]+)+ \).to${SETTING_TYPE_TO}" src/${MODULE})
  162.  
  163. exit 0
  164.  
  165.  
  166. # REPLACING THE STRINGS
  167. while read -r LINE; do
  168.   #echo $LINE
  169.   FILE=$(echo "${LINE}" | cut -d: -f1)
  170.   #echo $LINE
  171.   KEY=$(echo "$LINE" | gsed -r 's/^.*QgsSettingsEntry([^ ]+)\( QStringLiteral\( "([^ ]+)" \).*$/\2/' |  gsed -r 's|(/?%[0-9]+/.*)?/?[^/]+$||; ')
  172.   KEY_WO_SL=$(echo $KEY | gsed 's|^/||')
  173.   #echo $KEY
  174.   VAR=$(echo ${KEY} | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;')
  175.   #echo $VAR
  176.   echo "$VAR $KEY"
  177.  
  178.   #gsed -i -r "s|QgsSettingsEntry([^ ]+)\( QStringLiteral\( .${KEY}/([^ ]+). \)|QgsSettingsEntry\1\( QStringLiteral\( \"\2\" \), ${VAR}|" $FILE
  179.  
  180. done <<< $(ag -G '.h$' --no-group '= QgsSettingsEntry\w+\( QStringLiteral'  )
  181.  
  182.  
  183. exit
  184.  
  185.  
  186.  
  187. ag -c 'QgsSettingsEntry\(' | cut -d: -f1 | xargs gsed -i -r 's/QgsSettingsEntry([^ ]+) ([^ ]+) = QgsSettingsEntry\(.*\)/QgsSettingsEntry\1 \2 = QgsSettingsEntry\1/'
  188.  
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement