Index: gc_lang/fr/config.ini
==================================================================
--- gc_lang/fr/config.ini
+++ gc_lang/fr/config.ini
@@ -90,10 +90,13 @@
# TextFormatter
oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py
oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py
oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py
oxt/TextFormatter/tf_tabrep.py = pythonpath/tf_tabrep.py
+# Lexicographer
+oxt/Lexicographer/Enumerator.py = pythonpath/Enumerator.py
+oxt/Lexicographer/enum_strings.py = pythonpath/enum_strings.py
# Conjugueur
oxt/Conjugueur/Conjugueur.py = pythonpath/Conjugueur.py
# Modify author
oxt/ChangeAuthor/Author.py = pythonpath/Author.py
oxt/ChangeAuthor/ca_strings.py = pythonpath/ca_strings.py
Index: gc_lang/fr/oxt/AppLauncher.py
==================================================================
--- gc_lang/fr/oxt/AppLauncher.py
+++ gc_lang/fr/oxt/AppLauncher.py
@@ -52,10 +52,14 @@
xDialog.run(self.sLang)
elif sCmd == "OP":
import Options
xDialog = Options.GC_Options(self.ctx)
xDialog.run(self.sLang)
+ elif sCmd == "EN":
+ import Enumerator
+ xDialog = Enumerator.Enumerator(self.ctx)
+ xDialog.run(self.sLang)
elif sCmd.startswith("FA/"):
findAll(sCmd[6:], (sCmd[3:4] == "y"), (sCmd[4:5] == "y"))
# elif sCmd.startswith("URL/"):
# # Call from context menu to launch URL?
# # http://opengrok.libreoffice.org/xref/core/sw/source/ui/lingu/olmenu.cxx#785
ADDED gc_lang/fr/oxt/Lexicographer/Enumerator.py
Index: gc_lang/fr/oxt/Lexicographer/Enumerator.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/Lexicographer/Enumerator.py
@@ -0,0 +1,200 @@
+# Dictionary Options
+# by Olivier R.
+# License: MPL 2
+
+import unohelper
+import uno
+import traceback
+import time
+
+import helpers
+import enum_strings
+import grammalecte.graphspell as sc
+
+from com.sun.star.task import XJobExecutor
+from com.sun.star.awt import XActionListener
+from com.sun.star.beans import PropertyValue
+
+
+class Enumerator (unohelper.Base, XActionListener, XJobExecutor):
+
+ def __init__ (self, ctx):
+ self.ctx = ctx
+ self.xSvMgr = self.ctx.ServiceManager
+ self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
+ self.xDocument = self.xDesktop.getCurrentComponent()
+ self.xContainer = None
+ self.xDialog = None
+ self.oSpellChecker = None
+
+ def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
+ xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
+ xWidget.Name = name
+ xWidget.PositionX = x
+ xWidget.PositionY = y
+ xWidget.Width = w
+ xWidget.Height = h
+ for k, w in kwargs.items():
+ setattr(xWidget, k, w)
+ self.xDialog.insertByName(name, xWidget)
+ return xWidget
+
+ def _addGrid (self, name, x, y, w, h, columns, **kwargs):
+ xGridModel = self.xDialog.createInstance('com.sun.star.awt.grid.UnoControlGridModel')
+ xGridModel.Name = name
+ xGridModel.PositionX = x
+ xGridModel.PositionY = y
+ xGridModel.Width = w
+ xGridModel.Height = h
+ xColumnModel = xGridModel.ColumnModel
+ for e in columns:
+ xCol = xColumnModel.createColumn()
+ for k, w in e.items():
+ setattr(xCol, k, w)
+ xColumnModel.addColumn(xCol)
+ for k, w in kwargs.items():
+ setattr(xGridModel, k, w)
+ self.xDialog.insertByName(name, xGridModel)
+ return xGridModel
+
+ def run (self, sLang):
+ dUI = enum_strings.getUI(sLang)
+
+ # dialog
+ self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
+ self.xDialog.Width = 240
+ self.xDialog.Height = 280
+ self.xDialog.Title = dUI.get('title', "#title#")
+ xWindowSize = helpers.getWindowSize()
+ self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
+ self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
+
+ # fonts
+ xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+ xFDTitle.Height = 9
+ xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+ xFDTitle.Name = "Verdana"
+
+ xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+ xFDSubTitle.Height = 8
+ xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+ xFDSubTitle.Name = "Verdana"
+
+ # widget
+ nX = 10
+ nY1 = 10
+ nY2 = nY1 + 225
+
+ nWidth = self.xDialog.Width - 20
+ nHeight = 10
+
+ # List
+ self._addWidget("list_section", 'FixedLine', nX, nY1, nWidth, nHeight, Label = dUI.get("list_section", "#err"), FontDescriptor = xFDTitle)
+ self._addWidget('count_button', 'Button', nX, nY1+12, 70, 10, Label = dUI.get('count_button', "#err"))
+ self._addWidget('count2_button', 'Button', nX+75, nY1+12, 70, 10, Label = dUI.get('count2_button', "#err"))
+ self._addWidget('unknown_button', 'Button', nX+150, nY1+12, 70, 10, Label = dUI.get('unknown_button', "#err"))
+ self.xGridModel = self._addGrid("list_grid", nX, nY1+25, nWidth, 180, [
+ {"Title": "Mot", "ColumnWidth": 180},
+ {"Title": "Occur.", "ColumnWidth": 40}
+ ])
+ self._addWidget('num_of_words', 'FixedText', nX, nY1+210, 60, nHeight, Label = dUI.get('num_of_words', "#err"), Align = 2)
+ self.xNumWord = self._addWidget('num_of_words_res', 'FixedText', nX+65, nY1+210, 30, nHeight, Label = "—")
+ self._addWidget('tot_of_words', 'FixedText', nX+100, nY1+210, 60, nHeight, Label = dUI.get('tot_of_words', "#err"), Align = 2)
+ self.xTotWord = self._addWidget('total_words_res', 'FixedText', nX+165, nY1+210, 30, nHeight, Label = "—")
+
+ # Tag
+ self._addWidget("tag_section", 'FixedLine', nX, nY2, nWidth, nHeight, Label = dUI.get("tag_section", "#err"), FontDescriptor = xFDTitle)
+
+ self._addWidget('tag_button', 'Button', nX, self.xDialog.Height-25, 50, 14, Label = dUI.get('tag_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x000000)
+
+ # Close
+ self._addWidget('close_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-25, 50, 14, Label = dUI.get('close_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
+
+ # container
+ self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
+ self.xContainer.setModel(self.xDialog)
+
+ self.xContainer.getControl('count_button').addActionListener(self)
+ self.xContainer.getControl('count_button').setActionCommand('Count')
+ self.xContainer.getControl('count2_button').addActionListener(self)
+ self.xContainer.getControl('count2_button').setActionCommand('CountByLemma')
+ self.xContainer.getControl('unknown_button').addActionListener(self)
+ self.xContainer.getControl('unknown_button').setActionCommand('UnknownWords')
+ self.xContainer.getControl('tag_button').addActionListener(self)
+ self.xContainer.getControl('tag_button').setActionCommand('Tag')
+ self.xContainer.getControl('close_button').addActionListener(self)
+ self.xContainer.getControl('close_button').setActionCommand('Close')
+ self.xContainer.setVisible(False)
+ toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
+ self.xContainer.createPeer(toolkit, None)
+ self.xContainer.execute()
+
+ # XActionListener
+ def actionPerformed (self, xActionEvent):
+ try:
+ if xActionEvent.ActionCommand == "Count":
+ self.count()
+ elif xActionEvent.ActionCommand == "CountByLemma":
+ self.count(bByLemma=True)
+ elif xActionEvent.ActionCommand == "UnknownWords":
+ self.count(bOnlyUnknownWords=True)
+ elif xActionEvent.ActionCommand == "Tag":
+ pass
+ elif xActionEvent.ActionCommand == "Close":
+ self.xContainer.endExecute()
+ except:
+ traceback.print_exc()
+
+ # XJobExecutor
+ def trigger (self, args):
+ try:
+ xDialog = Enumerator(self.ctx)
+ xDialog.run()
+ except:
+ traceback.print_exc()
+
+ # Code
+ def getParagraphsOfText (self):
+ "generator: returns full document text paragraph by paragraph"
+ xCursor = self.xDocument.Text.createTextCursor()
+ xCursor.gotoStart(False)
+ xCursor.gotoEndOfParagraph(True)
+ yield xCursor.getString()
+ while xCursor.gotoNextParagraph(False):
+ xCursor.gotoEndOfParagraph(True)
+ yield xCursor.getString()
+
+ def count (self, bByLemma=False, bOnlyUnknownWords=False):
+ # change pointer
+ xPointer = self.xSvMgr.createInstanceWithContext("com.sun.star.awt.Pointer", self.ctx)
+ xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.WAIT"))
+ xWindowPeer = self.xContainer.getPeer()
+ xWindowPeer.setPointer(xPointer)
+ for x in xWindowPeer.Windows:
+ x.setPointer(xPointer)
+ # processing
+ if not self.oSpellChecker:
+ self.oSpellChecker = sc.SpellChecker("fr")
+ xGridDataModel = self.xGridModel.GridDataModel
+ xGridDataModel.removeAllRows()
+ dWord = {}
+ for sParagraph in self.getParagraphsOfText():
+ dWord = self.oSpellChecker.countWordsOccurrences(sParagraph, bByLemma, bOnlyUnknownWords, dWord)
+ i = 0
+ nTotOccur = 0
+ for k, w in sorted(dWord.items(), key=lambda t: t[1], reverse=True):
+ xGridDataModel.addRow(i, (k, w))
+ i += 1
+ nTotOccur += w
+ self.xNumWord.Label = str(i)
+ self.xTotWord.Label = str(nTotOccur)
+ # end of processing
+ xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.ARROW"))
+ xWindowPeer.setPointer(xPointer)
+ for x in xWindowPeer.Windows:
+ x.setPointer(xPointer)
+ self.xContainer.setVisible(True) # seems necessary to refresh the dialog box and text widgets (why?)
+
+
+#g_ImplementationHelper = unohelper.ImplementationHelper()
+#g_ImplementationHelper.addImplementation(Enumerator, 'net.grammalecte.enumerator', ('com.sun.star.task.Job',))
ADDED gc_lang/fr/oxt/Lexicographer/enum_strings.py
Index: gc_lang/fr/oxt/Lexicographer/enum_strings.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/Lexicographer/enum_strings.py
@@ -0,0 +1,37 @@
+def getUI (sLang):
+ if sLang in dStrings:
+ return dStrings[sLang]
+ return dStrings["fr"]
+
+dStrings = {
+ "fr": {
+ "title": "Grammalecte · Recenseur",
+
+ "list_section": "Calcul des occurrences des mots",
+ "count_button": "Compter tout",
+ "count2_button": "Compter par lemme",
+ "unknown_button": "Mots inconnus",
+ "num_of_words": "Nombre de mots :",
+ "tot_of_words": "Total des mots :",
+
+ "tag_section": "Formatage",
+ "tag": "Taguer",
+
+ "close_button": "Fermer",
+ },
+ "en": {
+ "title": "Grammalecte · Enumerator",
+
+ "list_section": "Words",
+ "count_button": "Count all",
+ "count2_button": "Count by lemma",
+ "unknown_button": "Unknown words",
+ "num_of_words": "Number of words:",
+ "tot_of_words": "Total of words:",
+
+ "tag_section": "Format",
+ "tag": "Tag",
+
+ "close_button": "Close",
+ },
+}
Index: gc_lang/fr/oxt/addons.xcu
==================================================================
--- gc_lang/fr/oxt/addons.xcu
+++ gc_lang/fr/oxt/addons.xcu
@@ -69,10 +69,26 @@
com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument
+
+ service:net.grammalecte.AppLauncher?EN
+
+
+
+ ~Recenseur…
+ ~Enumerator…
+
+
+ _self
+
+
+ com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument
+
+
+
service:net.grammalecte.AppLauncher?MA
@@ -87,19 +103,19 @@
com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument
-
+
private:separator
com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument
-
+
service:net.grammalecte.AppLauncher?OP