{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "858dddfa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import ipywidgets as widgets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94eff880",
   "metadata": {},
   "outputs": [],
   "source": [
    "l = widgets.Label(value=\"Input:\")\n",
    "ta = widgets.Textarea(layout=widgets.Layout(width='80%', height='200px'))\n",
    "b = widgets.Button(description='Convert',tooltip='Convert',icon='check')\n",
    "\n",
    "ol = widgets.Label(value=\"Output:\")\n",
    "\n",
    "olh = widgets.Label(value=\"JSON:\")\n",
    "otah = widgets.Output(layout={'border': '1px solid black'})\n",
    "\n",
    "ool = widgets.Label(value=\"Output:\")\n",
    "out = widgets.Output(layout={'border': '1px solid black'})\n",
    "\n",
    "vbi = widgets.VBox([ l, ta, b])\n",
    "vbo = widgets.VBox([ol, olh, otah, ool, out])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "74160baa",
   "metadata": {},
   "outputs": [],
   "source": [
    "if 'transform_input' in globals():\n",
    "    b.on_click(transform_input, True)\n",
    "\n",
    "def transform_input(b):\n",
    "    with out:\n",
    "        out.clear_output()\n",
    "        \n",
    "    with otah:\n",
    "        otah.clear_output()\n",
    "\n",
    "    lines = ta.value.split('\\n')\n",
    "    \n",
    "    for l in lines:\n",
    "        if l.strip() == '':\n",
    "            #with otah:\n",
    "            #    print('')\n",
    "                      \n",
    "            continue\n",
    "            \n",
    "        with out:\n",
    "            print('line:')\n",
    "            print(l)\n",
    "            print('')\n",
    "            \n",
    "        if '//' in l:\n",
    "            #with otah:\n",
    "            #    print(' ')\n",
    "            continue\n",
    "\n",
    "        l = l.replace(';', '').strip()\n",
    "        l = l.replace('inline', '').strip()\n",
    "        l = l.replace('_FORCE_INLINE_', '').strip()\n",
    "        l = l.replace('GDAPI', '').strip()\n",
    "        l = l.replace('  ', ' ').strip()\n",
    "        l = l.replace('  ', ' ').strip()\n",
    "        l = l.replace('  ', ' ').strip()\n",
    "        l = l.replace(')', '').strip()\n",
    "        l = l.strip()\n",
    "        \n",
    "        data = {}\n",
    "        \n",
    "        method_def_and_argss = l.split('(')\n",
    "        \n",
    "        if len(method_def_and_argss) < 2:\n",
    "            #with otah:\n",
    "            #    print(' ')\n",
    "            continue\n",
    "        \n",
    "        method_ret_and_name = method_def_and_argss[0]\n",
    "        method_ret_and_name_s = method_ret_and_name.split(' ')\n",
    "        \n",
    "        method_return_type = ' '.join(method_ret_and_name_s[:-1]).strip()\n",
    "        method_name = ' '.join(method_ret_and_name_s[len(method_ret_and_name_s) - 1:]).strip()\n",
    "        \n",
    "        if '*' in method_name:\n",
    "            method_name = method_name.replace('*', '')\n",
    "            method_return_type += ' *'\n",
    "            \n",
    "        data['name'] = method_name\n",
    "        data['return_type'] = method_return_type\n",
    "        \n",
    "        \n",
    "        method_all_args = method_def_and_argss[1]\n",
    "        method_all_argss = method_all_args.split(',')\n",
    "        \n",
    "        method_args = []\n",
    "        \n",
    "        for ma in method_all_argss:\n",
    "            mas = ma.split(' ')\n",
    "            \n",
    "            marg_type = ' '.join(mas[:-1]).strip()\n",
    "            marg_name = ' '.join(mas[len(mas) - 1:]).strip()\n",
    "            \n",
    "            sc = marg_name.count('*')\n",
    "            \n",
    "            marg_name = marg_name.replace('*', '')\n",
    "            \n",
    "            if sc > 0:\n",
    "                marg_type += ' ' + '*' * sc\n",
    "            \n",
    "            method_args.append([ marg_type, marg_name ])\n",
    "            \n",
    "        \n",
    "        \n",
    "        data['arguments'] = method_args\n",
    "        \n",
    "        \n",
    "        s = l\n",
    "        \n",
    "        \n",
    "        with otah:\n",
    "            #print(method_return_type)\n",
    "            #print(method_name)\n",
    "            #print(method_args)\n",
    "            \n",
    "            print(str(data).replace(\"'\", '\"') + ',')\n",
    "            \n",
    "        with out:\n",
    "            print(str(l))\n",
    "\n",
    "\n",
    "b.on_click(transform_input)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "730e99a0",
   "metadata": {},
   "source": [
    "# Input"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a78d6458",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "display(vbi)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1662e017",
   "metadata": {},
   "source": [
    "# Output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fae586c3",
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "display(vbo)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a84ec551",
   "metadata": {},
   "source": [
    " "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}