Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function HH_TRIMM(content)
- let content = a:content
- while stridx(content, " ") == 0 || stridx(content, "\t") == 0
- let content = strpart(content, 1)
- endwhile
- while strpart(content, strlen(content) - 1) == " "
- let content = strpart(content, 0, strlen(content) -1)
- endwhile
- return content
- endfunction
- function HH_GET_CLASS_NAME()
- 0
- let NumLineClass = search("class ")
- if NumLineClass == 0
- echo "ERROR : Missing class"
- return
- endif
- let classLine = HH_TRIMM(getline(NumLineClass))
- let classLine = HH_TRIMM(strpart(classLine, 5))
- if stridx(classLine, "{") != -1
- let classLine = strpart(classLine, 0, stridx(classLine, "{"))
- endif
- if stridx(classLine, ":") != -1
- let classLine = strpart(classLine, 0, stridx(classLine, ":"))
- endif
- return HH_TRIMM(classLine)
- endfunction
- function HH_GET_END_CLASS(startClass)
- let result = a:startClass
- let tmp = result + 1
- while tmp > result
- let result = tmp
- let tmp = search("}")
- endwhile
- return result - 1
- endfunction
- function HH_GET_START_NAME(content)
- let endword = stridx(a:content, "(")
- let startword = endword - 1
- let tmp = -1
- while tmp == -1 && startword != 0
- let startword = startword - 1
- let test = strpart(a:content, startword, endword - startword)
- let tmp = stridx(test, " ")
- endwhile
- return startword + 1
- endfunction
- function HH_IS_EQ(content)
- if stridx(a:content, "=") == -1
- return 0
- else
- return 1
- endif
- endfunction
- function HH_CLEAN_EQ_2(content)
- let content = a:content
- let eq = stridx(content, '=')
- let tmp = strpart(content, eq)
- let endeq = stridx(tmp, ',')
- if endeq == -1
- let endeq = stridx(tmp, ')')
- endif
- if endeq == -1
- return content
- endif
- let endeq = endeq + eq
- let part1 = HH_TRIMM(strpart(content, 0, eq))
- let part2 = HH_TRIMM(strpart(content, endeq))
- return part1 . part2
- endfunction
- function HH_CLEAN_EQ(content)
- let content = a:content
- while HH_IS_EQ(content) == 1
- let content = HH_CLEAN_EQ_2(content)
- endwhile
- return content
- endfunction
- function HH_IS_OK(content)
- let content = a:content
- if strpart(content, strlen(content) - 1) != ";"
- return 0
- endif
- if strpart(HH_TRIMM(content), 0, 1) == '*'
- return 0
- endif
- if strpart(HH_TRIMM(content), 0, 1) == '/'
- return 0
- endif
- if strpart(HH_TRIMM(content), 0, 1) == '#'
- return 0
- endif
- if stridx(content, "(") == -1
- return 0
- endif
- if stridx(content, ' = 0;') != -1
- return 0
- endif
- return 1
- endfunction
- function HH_CONVERT()
- let className = HH_GET_CLASS_NAME()
- let startClass = search("{") + 1
- let endClass = HH_GET_END_CLASS(startClass)
- let result = '# include "'. expand("%") . '"' . "\n"
- for line in range(startClass, endClass)
- let content = getline(line)
- if HH_IS_OK(content) == 1
- let startName = HH_GET_START_NAME(content)
- let part1 = strpart(content, 0, startName)
- let part2 = strpart(content, startName)
- let content = part1 . ' ' . className . '::' . part2
- let content = substitute(content, 'virtual', '', '')
- let content = substitute(content, 'static', '', '')
- let content = HH_CLEAN_EQ(content)
- let content = strpart(content, 0, strlen(content) - 1)
- let content = HH_TRIMM(content)
- let result = result . "\n" . content . "\n"
- let result = result . "{\n"
- let result = result . "}\n"
- endif
- endfor
- let fileName = expand("%:p:r") . '.cpp'
- exe "edit " . fileName
- put = result
- 5
- endfunction
- command! HH call HH_CONVERT()
Add Comment
Please, Sign In to add comment