On Thu, Sep 17, 2009 at 5:23 PM, Nishanth Menon <nm@xxxxxx> wrote: > Hi All, > Ref [1] w.r.t some patchset seen on linux driver project having a similar > condition of ton of camelcasing and [2], > > Can we consider running the following script for DSPBridge code? or if there > are some more improvements folks can think of.. Yes, I think we should do that, and make some sort of release, possibly squashing all the changes... my current branch counts 218 commits. > ----- > #!/bin/bash > # Silly little script to replace CaMELCaSInG to lower_casing > # Half a zillion thoughts later, > # why not use ctags which has c interpreter already to do > # function identification for us? > if [ ! -r 'tags' ]; then > echo "Sorry.. no tags file!" > exit 1 > fi > if [ ! -r "$1" ]; then > echo "I need a directory or a file for replacing.." > exit 2 > fi > DIR_FILE=`echo "$1"|sed -e "s/\//\\\//g"` > # tags have the following notation in field 4 (tab seperated) > # e - enum value > # d - define > # f - function > # F - File itself > # g - enum type > # m - structure parameter > # p - prototype > # r - kconfig define(refered) > # s - structure type > # t - typedefined variable > # v - variable > # x - extern defined variable > # we can choose to have different rules: > # rename rule i am going to follow: > # Any define -> convert camelcase to lower_case_define->convert to caps > # Any function, enum,struct param,prototype,struct type, typedef var,extern > def -> > # camel_case to lower_case_define > # All files will be made unix file only (no point in dos + unix mixtures..) > > #** > #* @brief - changes camel casing to ones with smaller case > #* > camel_to_norm(){ > echo $1|tr '\_' '+' |sed 's/\([A-Z]\)/_\l\1/g' | sed 's/^_\([a-z]\)/\1/g' |\ > tr 'A-Z' 'a-z' | sed "s/\([a-z][a-z]\+\)/-\1-/g"|tr -d '_'|\ > tr '-' '_'|sed -e "s/_$//g"|sed -e "s/^_//g" | tr '+' '_' |\ > sed -e "s/__*/_/g"|sed -e "s/_\([0-9][0-9]*\)/\1/g"|\ > sed -e "s/^[a-z]\_\([a-z][a-z]\+\)/\1/g" > > > } > > #** > #* @brief - all_to_upper - Moves all to upper case > #* > all_to_upper(){ > camel_to_norm $1 | tr 'a-z' 'A-Z' > } > > #** > #* @brief generate_list - will generate list of symbols from tags matching > #* > generate_list() { > cut -d' ' -f1,4 $TMPFILE|grep "$1\$"|cut -d' ' -f1|sort|uniq > } It looks like my tag file was tabs instead of spaces, so that line makes everything explode... how about: awk "\$4 ~ /[$1]/ { print \$1 }" $TMPFILE | sort | uniq > #** > #* @brief find_files - finds list of files from tag file matching usage > #* > find_files(){ > cut -d' ' -f1,2 $TMPFILE|grep "^$1"|cut -d' ' -f2|sort|uniq > } Maybe: awk "\$1 ~ /^$1/ { print \$2 }" $TMPFILE | sort | uniq > TMPFILE=/tmp/cleaner.$$.tmp > TMPFILE1=/tmp/cleaner.$$.1.tmp > # grab the output for only the ones we want.. > grep "$DIR_FILE" tags |grep -v "^\!"|sed -e > "s/\/\^.*\"/REPLACE_1/g">$TMPFILE > > replace_pattern(){ > echo "=====>Search and replace for pattern $1 with $2" > # Convert the functions back to smaller case and replace them in the files > for token in `generate_list "[$1]"` > do > if [ $2 -eq "1" ]; then > new=`camel_to_norm $token` > else > new=`all_to_upper $token` > fi > if [ "$new" != "$token" ]; then > echo "==>Replacing $token with $low" There's no $low, I guess you meant $new. > for file in `find_files $low` Did you mean $token? > do > echo "->replacing $token to $new in file $file" > cp $file $TMPFILE1 > dos2unix $TMPFILE1 This is simpler: dos2unix -n $file $TMPFILE1 However, I think dos2unix should be run separately. > sed -e "s/\(W*\)$token\(\W*\)/\1$new\2/g" $TMPFILE1>$file This is simpler: sed -e "s/\<$token\>/$new/g" $TMPFILE1 > $file > done > else > echo "==>not replacing $token" No need to say that. > fi > done > } > echo "================= Replacing Defines ===============" > replace_pattern d 2 > echo "================= Replacing Functions ===============" > replace_pattern efgmpstvx 1 > rm -f $TMPFILE $TMPFILE1 I did a few more cleanups (yeah, I'm too picky) and here's the result. Unfortunately I still think it needs some work in the camel conversion (E_FOO, __FOOBAR__, etc.) ---- #!/bin/bash # Silly little script to replace CaMELCaSInG to lower_casing # Half a zillion thoughts later, # why not use ctags which has c interpreter already to do # function identification for us? if [ ! -r 'tags' ]; then echo "Sorry.. no tags file!" exit 1 fi if [ ! -r "$1" ]; then echo "I need a directory or a file for replacing.." exit 2 fi DIR_FILE=`echo "$1" | sed -e "s/\//\\\//g"` # tags have the following notation in field 4 (tab seperated) # e - enum value # d - define # f - function # F - File itself # g - enum type # m - structure parameter # p - prototype # r - kconfig define(refered) # s - structure type # t - typedefined variable # v - variable # x - extern defined variable # we can choose to have different rules: # rename rule i am going to follow: # Any define -> convert camelcase to lower_case_define->convert to caps # Any function, enum,struct param,prototype,struct type, typedef var,extern def -> # camel_case to lower_case_define # All files will be made unix file only (no point in dos + unix mixtures..) #** #* @brief - changes camel casing to ones with smaller case #* camel_to_norm() { echo $1 | tr '\_' '+' | sed 's/\([A-Z]\)/_\l\1/g' | sed 's/^_\([a-z]\)/\1/g' | \ tr 'A-Z' 'a-z' | sed "s/\([a-z][a-z]\+\)/-\1-/g" | tr -d '_'| \ tr '-' '_' | sed -e "s/_$//g" | sed -e "s/^_//g" | tr '+' '_' | \ sed -e "s/__*/_/g" | sed -e "s/_\([0-9][0-9]*\)/\1/g" | \ sed -e "s/^[a-z]\_\([a-z][a-z]\+\)/\1/g" } #** #* @brief - all_to_upper - Moves all to upper case #* all_to_upper() { camel_to_norm $1 | tr 'a-z' 'A-Z' } #** #* @brief generate_list - will generate list of symbols from tags matching #* generate_list() { awk "\$4 ~ /[$1]/ { print \$1 }" $TMPFILE | sort | uniq } #** #* @brief find_files - finds list of files from tag file matching usage #* find_files() { awk "\$1 ~ /^$1/ { print \$2 }" $TMPFILE | sort | uniq } TMPFILE=/tmp/cleaner.$$.tmp TMPFILE1=/tmp/cleaner.$$.1.tmp # grab the output for only the ones we want.. grep "$DIR_FILE" tags | grep -v "^\!" | sed -e "s/\/\^.*\"/REPLACE_1/g" > $TMPFILE replace_pattern() { echo "=====> Search and replace for pattern $1 with $2" # Convert the functions back to smaller case and replace them in the files for token in `generate_list $1` do if [ $2 -eq "1" ]; then new=`camel_to_norm $token` else new=`all_to_upper $token` fi if [ "$new" != "$token" ]; then # echo "==> Replacing '$token' with '$new'" for file in `find_files $token` do echo "==> Replacing $token to $new in file $file" dos2unix -n $file $TMPFILE1 sed -e "s/\<$token\>/$new/g" $TMPFILE1 > $file done fi done } echo "================= Replacing Defines ===============" replace_pattern d 2 echo "================= Replacing Functions ===============" replace_pattern efgmpstvx 1 rm -f $TMPFILE $TMPFILE1 ---- Cheers. -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html