Exemple #1
0
    def _onSnippetEditIdle(self, event):
        if not self._snippetChanged:
            return

        path = self._getSelectedItemData().path
        if os.path.isdir(path):
            return

        snippet_text = self._dialog.currentSnippet
        parser = SnippetParser(snippet_text, os.path.dirname(path),
                               self._application)
        try:
            parser.getVariables()
        except SnippetException as e:
            self._dialog.setError(e.message)
        else:
            self._dialog.setError(_(u'No snippet errors'))

        self._snippetChanged = False
Exemple #2
0
    def _onSnippetEditIdle(self, event):
        if not self._snippetChanged:
            return

        path = self._getSelectedItemData().path
        if os.path.isdir(path):
            return

        snippet_text = self._dialog.currentSnippet
        parser = SnippetParser(snippet_text,
                               os.path.dirname(path),
                               self._application)
        try:
            parser.getVariables()
        except SnippetException as e:
            self._dialog.setError(e.message)
        else:
            self._dialog.setError(_(u'No snippet errors'))

        self._snippetChanged = False
    def test_vars_01(self):
        from snippets.snippetparser import SnippetParser
        template = '{{varname}}'
        selectedText = ''
        vars = {'varname': 'Проверка 123'}

        right_result = 'Проверка 123'
        right_variables = {'varname'}

        page = self.testPage
        parser = SnippetParser(template, '.', self.application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
    def test_empty(self):
        from snippets.snippetparser import SnippetParser
        template = ''
        selectedText = ''
        vars = {}

        right_result = ''
        right_variables = set()

        page = self.testPage
        parser = SnippetParser(template, '.', self.application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #5
0
    def test_empty(self):
        from snippets.snippetparser import SnippetParser
        template = u''
        selectedText = u''
        vars = {}

        right_result = u''
        right_variables = set()

        page = self.testPage
        parser = SnippetParser(template, self._application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #6
0
    def test_vars_01(self):
        from snippets.snippetparser import SnippetParser
        template = u'{{varname}}'
        selectedText = u''
        vars = {u'varname': u'Проверка 123'}

        right_result = u'Проверка 123'
        right_variables = {u'varname'}

        page = self.testPage
        parser = SnippetParser(template, self._application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #7
0
    def test_vars_02(self):
        from snippets.snippetparser import SnippetParser
        template = u'{{varname}}'
        selectedText = u''
        vars = {
            u'varname': u'Проверка 123',
            u'varname_2': u'Абырвалг',
        }

        right_result = u'Проверка 123'
        right_variables = {u'varname'}

        page = self.testPage
        parser = SnippetParser(template, u'.', self._application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #8
0
    def test_include_01(self):
        from snippets.snippetparser import SnippetParser
        template = '{{varname}} {% include "included" %}'
        selectedText = ''
        vars = {
            'varname': 'Проверка 123',
            'var_inc': 'Абырвалг',
        }

        right_result = 'Проверка 123 Включенный шаблон Абырвалг'
        right_variables = {'varname', 'var_inc'}

        page = self.testPage
        parser = SnippetParser(template, 'testdata/snippets', self.application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #9
0
    def test_include_01(self):
        from snippets.snippetparser import SnippetParser
        template = u'{{varname}} {% include "included" %}'
        selectedText = u''
        vars = {
            u'varname': u'Проверка 123',
            u'var_inc': u'Абырвалг',
        }

        right_result = u'Проверка 123 Включенный шаблон Абырвалг'
        right_variables = {u'varname', u'var_inc'}

        page = self.testPage
        parser = SnippetParser(template,
                               u'../test/snippets',
                               self._application)
        result = parser.process(selectedText, page, **vars)
        variables = parser.getVariables()

        self.assertEqual(result, right_result)
        self.assertEqual(variables, right_variables)
Exemple #10
0
class VariablesDialogController(object):
    '''
    Controller to manage VariablesDialog.
    '''
    def __init__(self, application):
        self._application = application

        self.onFinishDialogEvent = Event()
        self._parser = None
        self._selectedText = u''
        self._config = SnippetsConfig(self._application.config)
        self._recentSnippetPath = None

        self._dialog = VariablesDialog(self._application.mainWindow)
        self._dialog.ok_button.Bind(wx.EVT_BUTTON, handler=self._onOk)
        self._dialog.Bind(EVT_VAR_CHANGE, handler=self._onVarChange)
        self._dialog.SetClientSize((self._config.variablesDialogWidth,
                                    self._config.variablesDialogHeight))

    @property
    def dialog(self):
        return self._dialog

    def ShowDialog(self, selectedText, template, template_path):
        self._recentSnippetPath = template_path
        dirname = os.path.dirname(template_path)
        self._selectedText = selectedText
        self._parser = SnippetParser(template, dirname, self._application)
        variables_list = self._parser.getVariables()

        # Get non builtin variables
        variables = sorted([var for var
                            in variables_list
                            if not var.startswith('__')])

        self.dialog.hideVarPanel()
        self.dialog.setSnippetText(template)
        [*map(lambda var: self.dialog.addStringVariable(var), variables)]

        shortTemplateName = self._getShortTemplateName(template_path)
        self.dialog.templateFileName = shortTemplateName
        self.dialog.wikiCommandChecked = False

        # Show dialog if user must enter variable's values
        self._updateResult()
        if (self._application.selectedPage is not None and
                self._application.selectedPage.getTypeString() == u'wiki'):
            self.dialog.setWikiCommandSetVisible(True)
        else:
            self.dialog.setWikiCommandSetVisible(False)

        self.dialog.setFocusToFirstVariable()
        self.dialog.Show()

    def _getShortTemplateName(self, template_fname):
        '''
        Convert full template path to short path
        '''
        snippets_dir = getSnippetsDir()
        shortTemplateName = template_fname

        if shortTemplateName.startswith(snippets_dir):
            shortTemplateName = shortTemplateName[len(snippets_dir) + 1:]

        shortTemplateName = shortTemplateName.replace(u'\\', u'/')
        return shortTemplateName

    def destroy(self):
        self.onFinishDialogEvent.clear()
        self.dialog.ok_button.Unbind(wx.EVT_BUTTON, handler=self._onOk)
        self.dialog.Unbind(EVT_VAR_CHANGE, handler=self._onVarChange)
        self.dialog.Close()
        self.dialog.Destroy()

    def FinishDialog(self):
        try:
            w, h = self._dialog.GetClientSize()
            self._config.variablesDialogWidth = w
            self._config.variablesDialogHeight = h
            self._config.recentSnippet = self._recentSnippetPath
        except EnvironmentError:
            pass

        text = self.GetResult()
        self.onFinishDialogEvent(FinishDialogParams(text))
        self.dialog.Close()

    def CloseDialog(self):
        self.dialog.Close()

    def GetResult(self):
        if not self.dialog.wikiCommandChecked:
            return self.dialog.getResult()
        else:
            return self._makeWikiCommand(self.dialog.getVarDict(),
                                         self.dialog.templateFileName)

    def _makeWikiCommand(self, vardict, template_name):
        vars_str = u''

        for varname in sorted(vardict.keys()):
            value = vardict[varname]
            if u'"' not in value:
                vars_str += u' {name}="{value}"'.format(name=varname,
                                                        value=vardict[varname])
            else:
                vars_str += u" {name}='{value}'".format(name=varname,
                                                        value=vardict[varname])

        result = u'(:snip file="{template}"{vars}:)(:snipend:)'.format(
            template=template_name,
            vars=vars_str)
        return result

    def _onOk(self, event):
        self.FinishDialog()

    def _onVarChange(self, event):
        self._updateResult()

    def _updateResult(self):
        variables = self.dialog.getVarDict()
        text = self._parser.process(self._selectedText,
                                    self._application.selectedPage,
                                    **variables)
        self.dialog.setResult(text)
Exemple #11
0
class VariablesDialogController(object):
    '''
    Controller to manage VariablesDialog.
    '''
    def __init__(self, application):
        self._application = application

        self.onFinishDialog = Event()
        self._dialog = None
        self._parser = None
        self._selectedText = u''

    def ShowDialog(self, selectedText, template):
        if self._application.selectedPage is None:
            return

        if self._dialog is None:
            self._dialog = VariablesDialog(self._application.mainWindow,
                                           self._application)
            self._dialog.ok_button.Bind(wx.EVT_BUTTON, handler=self._onOk)
            self._dialog.Bind(EVT_VAR_CHANGE, handler=self._onVarChange)

        self._selectedText = selectedText
        self._parser = SnippetParser(template, self._application)

        # Get non builtin variables
        variables = sorted([var for var
                            in self._parser.getVariables()
                            if not var.startswith('__')])

        self._dialog.setSnippetText(template)
        map(lambda var: self._dialog.addStringVariable(var), variables)

        # Show dialog if user must enter variable's values
        if variables:
            self._updateResult()
            self._dialog.Show()
        else:
            self._finishDialog()

    def destroy(self):
        self.onFinishDialog.clear()
        if self._dialog is not None:
            self._dialog.ok_button.Unbind(wx.EVT_BUTTON, handler=self._onOk)
            self._dialog.Unbind(EVT_VAR_CHANGE, handle=self._onVarChange)
            self._dialog.Close()
            self._dialog = None

    def _finishDialog(self):
        if self._application.selectedPage is not None:
            text = self._dialog.getResult()
            self.onFinishDialog(FinishDialogParams(text))
        self._dialog.Close()
        self._dialog = None

    def _onOk(self, event):
        self._finishDialog()

    def _onVarChange(self, event):
        self._updateResult()

    def _updateResult(self):
        variables = self._dialog.getVarDict()
        text = self._parser.process(self._selectedText,
                                    self._application.selectedPage,
                                    **variables)
        self._dialog.setResult(text)