Changeset 252


Ignore:
Timestamp:
Mar 15, 2011 1:26:45 PM (7 years ago)
Author:
APA
Message:

Support for "heading5"
Beautified Sources in Wikidata/ in order to make them easier comparable

Location:
branches/mbutscher/work
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/mbutscher/work/Consts.py

    r251 r252  
    55# where branch is normally string "wikidPad", but should be changed if somebody
    66# develops a derived version of WikidPad.
    7 # 
     7#
    88# major and minor are the main versions,
    99# stateAndMicro is:
    10 #     between 0 and 99 for "alpha" 
     10#     between 0 and 99 for "alpha"
    1111#     between 100 and 199 for "beta"
    1212#     between 200 and 299 for "rc" (release candidate)
    1313#     300 for "final"
    14 #     
     14#
    1515#     the unit and tenth place form the micro version.
    16 # 
     16#
    1717# patch is a sub-micro version, if needed, normally 0.
    18 # 
     18#
    1919# Examples:
    2020# (1, 8, 207, 0) is 1.8rc07
     
    4040FormatTypes = Enumeration("FormatTypes", ["Default", "WikiWord",
    4141        "AvailWikiWord", "Bold", "Italic", "Heading1", "Heading2", "Heading3",
    42         "Heading4", "Url", "Script", "Attribute", "ToDo"
     42        "Heading4", "Heading5", "Url", "Script", "Attribute", "ToDo"
    4343        ], 0)
    44        
     44
    4545
    4646# Store hints for WikiData.storeDataBlock()
  • branches/mbutscher/work/extensions/Presentation.py

    r213 r252  
    1212              'other': 'Comic Sans MS',
    1313              'size' : 10,
     14              'heading5': 9,
    1415              'heading4': 10,
    1516              'heading3': 11,
     
    2324              'other': 'new century schoolbook',
    2425              'size' : 10,
     26              'heading5': 9,
    2527              'heading4': 10,
    2628              'heading3': 11,
     
    6365                    "fore:%(colPlaintext)s,face:%(mono)s,size:%(size)d" % styleFaces),
    6466            (FormatTypes.WikiWord,
    65                     "fore:%(colPlaintext)s,underline,face:%(mono)s,size:%(size)d" % styleFaces),     
     67                    "fore:%(colPlaintext)s,underline,face:%(mono)s,size:%(size)d" % styleFaces),
    6668            (FormatTypes.AvailWikiWord,
    67                     "fore:%(colLink)s,underline,face:%(mono)s,size:%(size)d" % styleFaces),     
    68             (FormatTypes.Bold, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(size)d" % styleFaces),   
    69             (FormatTypes.Italic, "fore:%(colPlaintext)s,italic,face:%(mono)s,size:%(size)d" % styleFaces),
    70             (FormatTypes.Heading4, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading4)d" % styleFaces),       
    71             (FormatTypes.Heading3, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading3)d" % styleFaces),       
    72             (FormatTypes.Heading2, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading2)d" % styleFaces),       
    73             (FormatTypes.Heading1, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading1)d" % styleFaces),
     69                    "fore:%(colLink)s,underline,face:%(mono)s,size:%(size)d" % styleFaces),
     70            (FormatTypes.Bold, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(size)d" % styleFaces),
     71            (FormatTypes.Italic, "fore:%(colPlaintext)s,italic,face:%(mono)s,size:%(size)d" % styleFaces),
     72            (FormatTypes.Heading5, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading5)d" % styleFaces),
     73            (FormatTypes.Heading4, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading4)d" % styleFaces),
     74            (FormatTypes.Heading3, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading3)d" % styleFaces),
     75            (FormatTypes.Heading2, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading2)d" % styleFaces),
     76            (FormatTypes.Heading1, "fore:%(colPlaintext)s,bold,face:%(mono)s,size:%(heading1)d" % styleFaces),
    7477            (FormatTypes.Url,
    75                     "fore:%(colLink)s,underline,face:%(mono)s,size:%(size)d" % styleFaces), 
     78                    "fore:%(colLink)s,underline,face:%(mono)s,size:%(size)d" % styleFaces),
    7679            (FormatTypes.Script,
    7780                    "fore:%(colAttribute)s,face:%(mono)s,size:%(size)d" % styleFaces),
  • branches/mbutscher/work/lib/pwiki/WikiTxtCtrl.py

    r249 r252  
    8989# etEVT_STYLE_DONE_COMMAND = wx.NewEventType()
    9090# EVT_STYLE_DONE_COMMAND = wx.PyEventBinder(etEVT_STYLE_DONE_COMMAND, 0)
    91 # 
     91#
    9292# class StyleDoneEvent(wx.PyCommandEvent):
    9393#     """
     
    175175        self.SetMarginWidth(self.SELECT_MARGIN, 16)
    176176        self.SetMarginWidth(self.NUMBER_MARGIN, 0)
    177        
     177
    178178        self.SetMarginType(self.FOLD_MARGIN, wx.stc.STC_MARGIN_SYMBOL)
    179179        self.SetMarginType(self.SELECT_MARGIN, wx.stc.STC_MARGIN_SYMBOL)
     
    201201        # i plan on lexing myself
    202202        self.SetLexer(wx.stc.STC_LEX_CONTAINER)
    203        
     203
    204204        # make the text control a drop target for files and text
    205205        self.SetDropTarget(WikiTxtCtrlDropTarget(self))
    206        
     206
    207207#         self.CmdKeyClearAll()
    208 #         
     208#
    209209#         # register some keyboard commands
    210210#         self.CmdKeyAssign(ord('+'), wx.stc.STC_SCMOD_CTRL, wx.stc.STC_CMD_ZOOMIN)
     
    216216#         self.CmdKeyAssign(wx.stc.STC_KEY_END, wx.stc.STC_SCMOD_SHIFT,
    217217#                 wx.stc.STC_CMD_LINEENDWRAPEXTEND)
    218 # 
    219 # 
     218#
     219#
    220220#         # Clear all key mappings for clipboard operations
    221221#         # PersonalWikiFrame handles them and calls the special clipboard functions
     
    224224#         self.CmdKeyClear(wx.stc.STC_KEY_INSERT, wx.stc.STC_SCMOD_SHIFT)
    225225#         self.CmdKeyClear(wx.stc.STC_KEY_DELETE, wx.stc.STC_SCMOD_SHIFT)
    226 # 
     226#
    227227#         self.CmdKeyClear(ord('X'), wx.stc.STC_SCMOD_CTRL)
    228228#         self.CmdKeyClear(ord('C'), wx.stc.STC_SCMOD_CTRL)
     
    246246                ("options changed", self.onOptionsChanged),
    247247        ), wx.GetApp().getMiscEvent(), self)
    248        
     248
    249249        self.__sinkGlobalConfig = wxKeyFunctionSink((
    250250                ("changed configuration", self.onChangedConfiguration),
     
    280280        wx.stc.EVT_STC_DWELLSTART(self, ID, self.OnDwellStart)
    281281        wx.stc.EVT_STC_DWELLEND(self, ID, self.OnDwellEnd)
    282        
     282
    283283        wx.EVT_LEFT_DOWN(self, self.OnClick)
    284284        wx.EVT_MIDDLE_DOWN(self, self.OnMiddleDown)
     
    292292
    293293        wx.EVT_CONTEXT_MENU(self, self.OnContextMenu)
    294        
     294
    295295#         self.incSearchCharStartPos = 0
    296296        self.incSearchPreviousHiddenLines = None
     
    309309        self.contextMenuTokens = None
    310310        self.contextMenuSpellCheckSuggestions = None
    311        
     311
    312312        # Connect context menu events to functions
    313313        wx.EVT_MENU(self, GUI_ID.CMD_UNDO, lambda evt: self.Undo())
     
    330330
    331331        wx.EVT_MENU(self, GUI_ID.CMD_ADD_THIS_SPELLING_SESSION,
    332                 self.OnAddThisSpellingToIgnoreSession)       
     332                self.OnAddThisSpellingToIgnoreSession)
    333333        wx.EVT_MENU(self, GUI_ID.CMD_ADD_THIS_SPELLING_GLOBAL,
    334                 self.OnAddThisSpellingToIgnoreGlobal)       
     334                self.OnAddThisSpellingToIgnoreGlobal)
    335335        wx.EVT_MENU(self, GUI_ID.CMD_ADD_THIS_SPELLING_LOCAL,
    336                 self.OnAddThisSpellingToIgnoreLocal)       
    337 
    338         wx.EVT_MENU(self, GUI_ID.CMD_ACTIVATE_THIS, self.OnActivateThis)       
     336                self.OnAddThisSpellingToIgnoreLocal)
     337
     338        wx.EVT_MENU(self, GUI_ID.CMD_ACTIVATE_THIS, self.OnActivateThis)
    339339        wx.EVT_MENU(self, GUI_ID.CMD_ACTIVATE_NEW_TAB_THIS,
    340                 self.OnActivateNewTabThis)       
     340                self.OnActivateNewTabThis)
    341341        wx.EVT_MENU(self, GUI_ID.CMD_ACTIVATE_NEW_TAB_BACKGROUND_THIS,
    342342                self.OnActivateNewTabBackgroundThis)
     
    385385            return
    386386
    387         cbIcept = self.presenter.getMainControl().getClipboardInterceptor() 
     387        cbIcept = self.presenter.getMainControl().getClipboardInterceptor()
    388388        if cbIcept is not None:
    389389            cbIcept.informCopyInWikidPadStart(text=text)
     
    406406        if filenames is not None:
    407407            mc = self.presenter.getMainControl()
    408    
     408
    409409            paramDict = {"editor": self, "filenames": filenames,
    410410                    "x": -1, "y": -1, "main control": mc,
     
    425425            img = bmp.ConvertToImage()
    426426            del bmp
    427            
     427
    428428            if self.presenter.getConfig().getboolean("main",
    429429                    "editor_imagePaste_askOnEachPaste", True):
     
    441441                # Couldn't find unused filename or saving denied
    442442                return True
    443                
     443
    444444#                 destPath = fs.findDestPathNoSource(u".png", u"")
    445 #                 
     445#
    446446#                 print "Paste6", repr(destPath)
    447447#                 if destPath is None:
    448448#                     # Couldn't find unused filename
    449449#                     return
    450 # 
     450#
    451451#                 img.SaveFile(destPath, wx.BITMAP_TYPE_PNG)
    452452
    453453            url = self.presenter.getMainControl().makeAbsPathRelUrl(destPath)
    454            
     454
    455455            if url is None:
    456456                url = u"file:" + StringOps.urlFromPathname(destPath)
    457            
     457
    458458            self.ReplaceSelection(url)
    459459
    460460#             locPath = self.presenter.getMainControl().getWikiConfigPath()
    461 # 
     461#
    462462#             if locPath is not None:
    463463#                 locPath = dirname(locPath)
     
    469469#                 else:
    470470#                     url = "rel://%s" % urlFromPathname(relPath)
    471 # 
     471#
    472472#             if url:
    473473#                 self.ReplaceSelection(url)
    474474
    475475            return True
    476        
     476
    477477        if not WindowsHacks:
    478478            return False
     
    482482        if destPath is not None:
    483483            url = self.presenter.getMainControl().makeAbsPathRelUrl(destPath)
    484            
     484
    485485            if url is None:
    486486                url = u"file:" + StringOps.urlFromPathname(destPath)
    487            
     487
    488488            self.ReplaceSelection(url)
    489489            return True
     
    492492#         if destPath is not None:
    493493#             locPath = self.presenter.getMainControl().getWikiConfigPath()
    494 # 
     494#
    495495#             if locPath is not None:
    496496#                 locPath = dirname(locPath)
     
    502502#                 else:
    503503#                     url = "rel://%s>i" % urlFromPathname(relPath)
    504 # 
     504#
    505505#                 if url:
    506506#                     self.ReplaceSelection(url)
     
    514514        self.Copy()
    515515
    516        
    517        
     516
     517
    518518    def setLayerVisible(self, vis, scName=""):
    519519        """
     
    535535    def setAutoIndent(self, onOff):
    536536        self.autoIndent = onOff
    537        
     537
    538538    def getAutoIndent(self):
    539539        return self.autoIndent
     
    541541    def setAutoBullets(self, onOff):
    542542        self.autoBullets = onOff
    543        
     543
    544544    def getAutoBullets(self):
    545545        return self.autoBullets
    546        
     546
    547547    def setTabsToSpaces(self, onOff):
    548548        self.tabsToSpaces = onOff
    549549        self.SetUseTabs(not onOff)
    550        
     550
    551551    def getTabsToSpaces(self):
    552552        return self.tabsToSpaces
     
    569569        forceSync -- when setting folding on, the folding is completed
    570570            before function returns iff forceSync is True
    571         """ 
     571        """
    572572        if onOrOff:
    573573            self.SetMarginWidth(self.FOLD_MARGIN, 16)
     
    648648        self.SetTargetStart(bs)
    649649        self.SetTargetEnd(be)
    650        
     650
    651651        if isUnicode():
    652652            self.ReplaceTarget(newText)
     
    656656#         text = self.GetText()
    657657#         text = text[:pos] + newText + text[(pos + len):]
    658 #         
     658#
    659659#         self.replaceText(text)
    660660
     
    662662    def showSelectionByCharPos(self, start, end):
    663663        """
    664         Same as SetSelectionByCharPos(), but scrolls to position correctly 
     664        Same as SetSelectionByCharPos(), but scrolls to position correctly
    665665        """
    666666        text = self.GetText()
     
    691691
    692692        self.AutoCompSetFillUps(u":=")  # TODO Add '.'?
    693 #         self.SetYCaretPolicy(wxSTC_CARET_SLOP, 2) 
    694 #         self.SetYCaretPolicy(wxSTC_CARET_JUMPS | wxSTC_CARET_EVEN, 4) 
    695         self.SetYCaretPolicy(wx.stc.STC_CARET_SLOP | wx.stc.STC_CARET_EVEN, 4) 
     693#         self.SetYCaretPolicy(wxSTC_CARET_SLOP, 2)
     694#         self.SetYCaretPolicy(wxSTC_CARET_JUMPS | wxSTC_CARET_EVEN, 4)
     695        self.SetYCaretPolicy(wx.stc.STC_CARET_SLOP | wx.stc.STC_CARET_EVEN, 4)
    696696
    697697
     
    739739
    740740            self.wikiPageSink.disconnect()
    741            
     741
    742742            self.presenter.setDocPage(None)
    743743
     
    747747#             self.pageAst = None
    748748            self.pageType = "normal"
    749        
     749
    750750        ## _prof.stop()
    751751
     
    756756        content = None
    757757        wikiDataManager = self.presenter.getWikiDocument()
    758        
     758
    759759        self.presenter.setDocPage(funcPage)
    760        
     760
    761761        if self.getLoadedDocPage() is None:
    762762            return  # TODO How to handle?
     
    898898                    self.setFoldInfo(foldInfo)
    899899                    self.GotoPos(lastPos)
    900                    
     900
    901901                    self.scrollXY(scrollPosX, scrollPosY)
    902                
     902
    903903#                     # Bad hack: First scroll to position to avoid a visible jump
    904904#                     #   if scrolling works, then update display,
    905905#                     #   then scroll again because it may have failed the first time
    906 #                     
     906#
    907907#                     self.SetScrollPos(wx.HORIZONTAL, scrollPosX, False)
    908908#                     screvt = wx.ScrollWinEvent(wx.wxEVT_SCROLLWIN_THUMBTRACK,
     
    912912#                             scrollPosX, wx.HORIZONTAL)
    913913#                     self.ProcessEvent(screvt)
    914 #                     
     914#
    915915#                     self.SetScrollPos(wx.VERTICAL, scrollPosY, True)
    916916#                     screvt = wx.ScrollWinEvent(wx.wxEVT_SCROLLWIN_THUMBTRACK,
     
    920920#                             scrollPosY, wx.VERTICAL)
    921921#                     self.ProcessEvent(screvt)
    922 # 
     922#
    923923#                     self.Update()
    924 # 
     924#
    925925#                     self.SetScrollPos(wx.HORIZONTAL, scrollPosX, False)
    926926#                     screvt = wx.ScrollWinEvent(wx.wxEVT_SCROLLWIN_THUMBTRACK,
     
    930930#                             scrollPosX, wx.HORIZONTAL)
    931931#                     self.ProcessEvent(screvt)
    932 #                     
     932#
    933933#                     self.SetScrollPos(wx.VERTICAL, scrollPosY, True)
    934934#                     screvt = wx.ScrollWinEvent(wx.wxEVT_SCROLLWIN_THUMBTRACK,
     
    955955            self._goToNextFormField()
    956956            return True
    957        
     957
    958958        return False
    959959
     
    994994            wx.GetApp().freeWikiLanguageHelper(self.wikiLanguageHelper)
    995995            self.wikiLanguageHelper = docPage.createWikiLanguageHelper()
    996        
     996
    997997        if self.pageType == u"normal":
    998998            # Scroll page according to the anchor
     
    10391039        faces = self.presenter.getDefaultFontFaces().copy()
    10401040
    1041         if isinstance(self.getLoadedDocPage(), 
     1041        if isinstance(self.getLoadedDocPage(),
    10421042                (DocPages.WikiPage, DocPages.AliasWikiPage)):
    10431043
     
    11241124        Called directly from a doc page to repair the editor state if an
    11251125        invalid file signature was detected.
    1126        
     1126
    11271127        docPage -- calling docpage
    11281128        """
     
    11311131                        (DocPages.DataCarryingPage, DocPages.AliasWikiPage)):
    11321132            return
    1133        
     1133
    11341134        sd, ud = docPage.getDirty()
    11351135        if sd:
     
    11601160        if self.getLoadedDocPage() is not None:
    11611161            self.wikiPageSink.disconnect()
    1162            
     1162
    11631163            self.SetDocPointer(None)
    11641164            self.applyBasicSciSettings()
     
    11821182        text = docPage.getLiveText()  # self.GetText()
    11831183        textlen = len(text)
    1184        
     1184
    11851185        t = self.stylingThreadHolder.getThread()
    11861186        if t is not None:
     
    12091209
    12101210            sth = self.stylingThreadHolder
    1211            
     1211
    12121212            delay = self.presenter.getConfig().getfloat(
    12131213                    "main", "async_highlight_delay")
     
    12341234        templateNames = [n for n in wikiDocument.getAllDefinedWikiPageNames()
    12351235                if templateRe.search(n)]
    1236        
     1236
    12371237        wikiDocument.getCollator().sort(templateNames)
    12381238
     
    12781278        if not isinstance(docPage, DocPages.WikiPage):
    12791279            return
    1280            
     1280
    12811281        if not docPage.isDefined() and not docPage.getDirty()[0]:
    12821282            title = _(u"Select Template")
     
    13001300        self.pageType = docPage.getAttributes().get(u"pagetype",
    13011301                [u"normal"])[-1]
    1302         self.handleSpecialPageType()       
     1302        self.handleSpecialPageType()
    13031303        self.presenter.informEditorTextChanged(self)
    13041304
     
    13071307    def OnContextMenu(self, evt):
    13081308        mousePos = self.ScreenToClient(wx.GetMousePosition())
    1309        
     1309
    13101310        leftFold = 0
    13111311        for i in range(self.FOLD_MARGIN):
     
    13861386                    appendToMenuByMenuDesc(templateSubmenu,
    13871387                            _CONTEXT_MENU_SELECT_TEMPLATE_IN_TEMPLATE_MENU)
    1388    
     1388
    13891389                    menu.AppendSeparator()
    13901390                    menu.AppendMenu(wx.NewId(), _(u'Use Template'),
     
    14451445
    14461446            charStartPos = end
    1447            
     1447
    14481448
    14491449    def handleDropText(self, x, y, text):
     
    14771477#         self.pageAst = pageAst
    14781478        self.foldingseq = foldingseq
    1479        
     1479
    14801480        def putStyle():
    14811481            if stylebytes:
     
    14961496                sleep(delay)
    14971497                threadstop.testRunning()
    1498            
     1498
    14991499            docPage = self.getLoadedDocPage()
    15001500            if docPage is None:
    15011501                return
    1502            
     1502
    15031503            for i in range(20):   # "while True" is too dangerous
    15041504                formatDetails = docPage.getFormatDetails()
     
    15111511
    15121512            stylebytes = self.processTokens(text, pageAst, threadstop)
    1513            
     1513
    15141514            threadstop.testRunning()
    1515    
     1515
    15161516            if self.getFoldingActive():
    15171517                foldingseq = self.processFolding(pageAst, threadstop)
     
    15761576            for node in pageAst.iterFlatNamed():
    15771577                threadstop.testRunning()
    1578                
     1578
    15791579                styleNo = WikiTxtCtrl._TOKEN_TO_STYLENO.get(node.name)
    1580                
     1580
    15811581                if styleNo is not None:
    15821582                    stylebytes.bindStyle(node.pos, node.strLength, styleNo)
     
    15961596                elif node.name == "value" and "todoEntry" in stack:
    15971597                    process(node, stack[:])
    1598                            
     1598
    15991599                elif node.name == "heading":
    1600                     if node.level < 4:
     1600                    if node.level < 5:
    16011601                        styleNo = FormatTypes.Heading1 + \
    16021602                                (node.level - 1)
    16031603                    else:
    1604                         styleNo = FormatTypes.Heading4
     1604                        styleNo = FormatTypes.Heading5
    16051605
    16061606                    stylebytes.bindStyle(node.pos, node.strLength, styleNo)
    1607                
     1607
    16081608                elif node.name in ("table", "tableRow", "tableCell",
    16091609                        "orderedList", "unorderedList", "indentedText",
     
    16311631        levelStack = []
    16321632        foldHeader = False
    1633        
     1633
    16341634        for node in pageAst:
    16351635            threadstop.testRunning()
    1636            
     1636
    16371637            if node.name == "heading":
    16381638                while levelStack and (levelStack[-1][0] != "heading" or
     
    16541654            if lfc > 0:
    16551655                foldingseq += [len(levelStack) + 1] * lfc
    1656                
     1656
    16571657            prevLevel = len(levelStack) + 1
    1658                
     1658
    16591659        # final line
    16601660        foldingseq.append(len(levelStack) + 1)
    1661        
     1661
    16621662        return foldingseq
    16631663
     
    16821682        for i in xrange(self.GetLineCount()):
    16831683            self.SetFoldExpanded(i, True)
    1684        
     1684
    16851685        self.ShowLines(0, self.GetLineCount()-1)
    16861686
     
    17241724                levOut |= 8192
    17251725            if self.GetLineVisible(ln):
    1726                 levOut |= 16384           
     1726                levOut |= 16384
    17271727            result[ln] = levOut
    1728            
     1728
    17291729        return result
    17301730
     
    17401740            if levIn & 4096:
    17411741                levComb |= wx.stc.STC_FOLDLEVELHEADERFLAG
    1742                
     1742
    17431743            self.SetFoldLevel(ln, levComb)
    17441744            self.SetFoldExpanded(ln, bool(levIn & 8192))
     
    17471747            else:
    17481748                self.HideLines(ln, ln)
    1749        
     1749
    17501750        self.repairFoldingVisibility()
    17511751
     
    17551755        if not self.getFoldingActive():
    17561756            return
    1757            
     1757
    17581758        lc = self.GetLineCount()
    1759        
     1759
    17601760        if lc == 0:
    17611761            return
     
    17641764        if lc == 1:
    17651765            return
    1766            
     1766
    17671767        combLevel = self.GetFoldLevel(0)
    17681768        prevLevel = combLevel & 4095
     
    17711771        prevVisible = True  # First line must always be visible
    17721772        prevLn = 0
    1773        
     1773
    17741774#         print "0", prevLevel, bool(prevIsHeader), bool(prevIsExpanded), bool(prevVisible)
    17751775
     
    17881788                        (prevIsHeader and prevIsExpanded):
    17891789                    # if current level is not larger than previous this indicates
    1790                     # an error except that the previous line is a header line and 
     1790                    # an error except that the previous line is a header line and
    17911791                    # folded (not expanded).
    17921792                    # Other possibility of an error is if previous line is a
    17931793                    # header and IS expanded.
    1794                    
     1794
    17951795                    # Show line in these cases
    17961796                    self.SetFoldExpanded(prevLn, True) # Needed?
     
    18151815
    18161816        wikiPage = self.presenter.getWikiDocument().getWikiPageNoError("ScratchPad")
    1817        
     1817
    18181818#         wikiPage.appendLiveText("\n%s\n---------------------------\n\n%s\n" %
    18191819#                 (mbcsDec(strftime("%x %I:%M %p"), "replace")[0], text))
     
    18391839        try:
    18401840            endCharPos += len(startChars)
    1841            
     1841
    18421842            if emptySelection:
    18431843                # If selection is empty, cursor will in the end
     
    18501850            self.gotoCharPos(startCharPos, scroll=False)
    18511851            self.AddText(startChars)
    1852    
     1852
    18531853            self.gotoCharPos(endCharPos, scroll=False)
    18541854            self.AddText(endChars)
     
    18571857        finally:
    18581858            self.EndUndoAction()
    1859            
     1859
    18601860
    18611861    def getPageAst(self):
     
    18871887                    # Same tab
    18881888                    presenter = self.presenter
    1889                    
     1889
    18901890                titleFromLink = self.presenter.getConfig().getboolean("main",
    18911891                        "wikiPageTitle_fromLinkTitle", False)
    1892                
     1892
    18931893                if not titleFromLink or node.titleNode is None:
    18941894                    suggNewPageTitle = None
    18951895                else:
    18961896                    suggNewPageTitle = node.titleNode.getString()
    1897                    
     1897
    18981898                unaliasedTarget = self.presenter.getWikiDocument()\
    18991899                        .getUnAliasedWikiWordOrAsIs(node.wikiWord)
    19001900
    19011901                docPage = self.getLoadedDocPage()
    1902                
     1902
    19031903                # Contains start and end character position where a search fragment
    19041904                # search should never match
     
    19221922                    searchOp.wildCard = "no"   # TODO Why not regex?
    19231923                    searchOp.searchStr = searchfrag
    1924    
     1924
    19251925                    found = presenter.getSubControl("textedit").executeSearch(
    19261926                            searchOp, 0)
    1927                    
     1927
    19281928                    if found[0] >= forbiddenSearchfragHit[0] and \
    19291929                            found[0] < forbiddenSearchfragHit[1]:
     
    19451945            elif node.name == "insertion":
    19461946                if node.key == u"page":
    1947                        
     1947
    19481948                    # open the wiki page
    19491949                    if tabMode & 2:
     
    19541954                        # Same tab
    19551955                        presenter = self.presenter
    1956    
     1956
    19571957                    presenter.openWikiPage(node.value,
    19581958                            motionType="child")  # , anchor=node.value)
     
    19621962                        presenter.getMainControl().getMainAreaPanel().\
    19631963                                showPresenter(presenter)
    1964    
     1964
    19651965                    return True
    19661966
     
    19751975                    pageAst = self.getPageAst()
    19761976                    footnoteId = node.footnoteId
    1977    
     1977
    19781978                    anchorNode = getFootnoteAnchorDict(pageAst).get(footnoteId)
    19791979                    if anchorNode is not None:
     
    19871987                                    self.gotoCharPos(fnNode.pos)
    19881988                                    break
    1989    
     1989
    19901990                    return True
    19911991                except NoPageAstException:
     
    20252025                wantedUnknownWords = allUnknownWords.findNodesForCharPos(
    20262026                        linkCharPos)
    2027                
     2027
    20282028                if linkCharPos > 0 and len(wantedUnknownWords) == 0:
    20292029                    # No unknown word found -> try left to cursor
     
    21392139                    link = self.presenter.getMainControl()\
    21402140                            .makeRelUrlAbsolute(link)
    2141                
     2141
    21422142                elif link.startswith(u"file:"):
    21432143                    link = self.presenter.getMainControl()\
     
    22072207            # Execute all or selected script blocks on the page (or other
    22082208            #   related pages)
    2209             try:           
     2209            try:
    22102210                pageAst = self.getPageAst()
    22112211            except NoPageAstException:
     
    22132213
    22142214            scriptNodeGroups = [list(pageAst.iterDeepByName(SCRIPTFORMAT))]
    2215            
     2215
    22162216            # process script imports
    22172217            if securityLevel > 1: # Local import_scripts attributes allowed
     
    22432243                    except:
    22442244                        pass
    2245              
     2245
    22462246            if self.presenter.getConfig().getboolean("main",
    22472247                    "script_search_reverse", False):
     
    22972297#                 "process_autogenerated_areas"):
    22982298#             return text
    2299 # 
     2299#
    23002300#         return WikiFormatting.AutoGenAreaRE.sub(ur"\1\2\4", text)
    23012301
     
    23282328#                 "process_autogenerated_areas"):
    23292329#             return text
    2330 # 
     2330#
    23312331#         # So the text can be referenced from an AGA function
    23322332#         self.agatext = text
    2333 # 
     2333#
    23342334#         return WikiFormatting.AutoGenAreaRE.sub(self._agaReplace, text)
    23352335
     
    23942394        startLine = self.LineFromPosition(byteStart)
    23952395        endLine = self.LineFromPosition(byteEnd)
    2396        
     2396
    23972397        # Just to be sure, shouldn't happen normally
    23982398        if endLine < startLine:
    23992399            startLine, endLine = endLine, startLine
    2400        
     2400
    24012401        for checkLine in xrange(endLine, startLine - 1, -1):
    24022402            if not self.GetLineVisible(checkLine):
     
    24402440                else:
    24412441                    self.HideLines(line, line)
    2442                
     2442
    24432443                line += 1
    2444            
     2444
    24452445        self.incSearchPreviousHiddenLines = None
    24462446        self.incSearchPreviousHiddenStartLine = -1
    2447        
     2447
    24482448        if start == -1:
    24492449#             self.SetSelection(-1, -1)
     
    24562456        startLine = self.LineFromPosition(byteStart)
    24572457        endLine = self.LineFromPosition(byteEnd)
    2458        
     2458
    24592459        # Store current show/hide state of lines to show
    24602460        shownList = []
    24612461        for i in xrange(startLine, endLine + 1):
    24622462            shownList.append(self.GetLineVisible(i))
    2463            
     2463
    24642464        self.incSearchPreviousHiddenLines = shownList
    24652465        self.incSearchPreviousHiddenStartLine = startLine
     
    24892489#     def startIncrementalSearch(self, initSearch=None):
    24902490#         sb = self.presenter.getStatusBar()
    2491 # 
     2491#
    24922492#         self.incSearchCharStartPos = self.GetSelectionCharPos()[1]
    24932493#         self.incSearchPreviousHiddenLines = None
    24942494#         self.incSearchPreviousHiddenStartLine = -1
    2495 # 
     2495#
    24962496#         rect = sb.GetFieldRect(0)
    24972497#         if isOSX():
    24982498#             # needed on Mac OSX to avoid cropped text
    24992499#             rect = wx._core.Rect(rect.x, rect.y - 2, rect.width, rect.height + 4)
    2500 # 
     2500#
    25012501#         rect.SetPosition(sb.ClientToScreen(rect.GetPosition()))
    2502 # 
     2502#
    25032503#         dlg = WikiTxtDialogs.IncrementalSearchDialog(self, -1, self, rect,
    25042504#                 sb.GetFont(), self.presenter, initSearch)
    25052505#         dlg.Show()
    2506 # 
    2507 #     
     2506#
     2507#
    25082508#     def executeIncrementalSearch(self, next=False):
    25092509#         """
     
    25162516#             else:
    25172517#                 charStartPos = self.incSearchCharStartPos
    2518 # 
     2518#
    25192519#             regex = None
    25202520#             try:
     
    25242524#                 # Regex error
    25252525#                 return charStartPos   # ?
    2526 # 
     2526#
    25272527#             match = regex.search(text, charStartPos, len(text))
    25282528#             if not match and charStartPos > 0:
    25292529#                 match = regex.search(text, 0, charStartPos)
    2530 # 
     2530#
    25312531#             if match:
    25322532# #                 matchbytestart = self.bytelenSct(text[:match.start()])
    25332533# #                 matchbyteend = matchbytestart + \
    25342534# #                         self.bytelenSct(text[match.start():match.end()])
    2535 # 
     2535#
    25362536#                 self.setSelectionForIncSearchByCharPos(
    25372537#                         match.start(), match.end())
    2538 # 
     2538#
    25392539#                 return match.end()
    2540 # 
     2540#
    25412541#         self.setSelectionForIncSearchByCharPos(-1, -1)
    25422542#         self.GotoPos(self.bytelenSct(text[:self.incSearchCharStartPos]))
    2543 # 
     2543#
    25442544#         return -1
    2545 # 
    2546 # 
     2545#
     2546#
    25472547#     def executeIncrementalSearchBackward(self):
    25482548#         """
     
    25522552#         if len(self.searchStr) > 0:
    25532553#             charStartPos = self.GetSelectionCharPos()[0]
    2554 # 
     2554#
    25552555#             regex = None
    25562556#             try:
     
    25602560#                 # Regex error
    25612561#                 return charStartPos   # ?
    2562 # 
     2562#
    25632563#             match = regex.search(text, 0, len(text))
    25642564#             if match:
     
    25702570#                             break
    25712571#                         match = matchNext
    2572 #                         
     2572#
    25732573#                 else:
    25742574#                     while True:
     
    25772577#                             break
    25782578#                         match = matchNext
    2579 # 
     2579#
    25802580#                 self.setSelectionForIncSearchByCharPos(match.start(), match.end())
    2581 # 
     2581#
    25822582#                 return match.start()
    2583 # 
     2583#
    25842584#         self.setSelectionForIncSearchByCharPos(-1, -1)
    25852585#         self.GotoPos(self.bytelenSct(text[:self.incSearchCharStartPos]))
    2586 # 
     2586#
    25872587#         return -1
    2588 # 
    2589 # 
     2588#
     2589#
    25902590#     def forgetIncrementalSearch(self):
    25912591#         """
     
    25942594#         """
    25952595#         pass
    2596 # 
     2596#
    25972597#     def resetIncrementalSearch(self):
    25982598#         """
     
    26022602#         self.setSelectionForIncSearchByCharPos(-1, -1)
    26032603#         self.GotoPos(self.bytelenSct(self.GetText()[:self.incSearchCharStartPos]))
    2604 # 
    2605 # 
     2604#
     2605#
    26062606#     def endIncrementalSearch(self):
    26072607#         """
     
    26102610#         byteStart = self.GetSelectionStart()
    26112611#         byteEnd = self.GetSelectionEnd()
    2612 # 
     2612#
    26132613#         self.setSelectionForIncSearchByCharPos(-1, -1)
    2614 #         
     2614#
    26152615#         self.SetSelection(byteStart, byteEnd)
    26162616#         self.ensureSelectionExpanded()
    2617 # 
    2618 # 
     2617#
     2618#
    26192619#     def getContinuePosForSearch(self, sarOp):
    26202620#         """
     
    26222622#         search operation sarOp. It always continues at beginning
    26232623#         or end of current selection.
    2624 #         
     2624#
    26252625#         If sarOp uses a regular expression, this function may throw
    26262626#         a re.error exception.
    26272627#         """
    26282628#         range = self.GetSelectionCharPos()
    2629 #         
     2629#
    26302630# #         if sarOp.matchesPart(self.GetSelectedText()) is not None:
    26312631#         if sarOp.matchesPart(self.GetText(), range) is not None:
     
    26372637#             # -> continue searching at the beginning of selection
    26382638#             return range[0]
    2639 # 
    2640 # 
     2639#
     2640#
    26412641#     def executeSearch(self, sarOp, searchCharStartPos=-1, next=False):
    26422642#         """
     
    26472647#         if sarOp.booleanOp:
    26482648#             return (-1, -1)  # Not possible
    2649 # 
     2649#
    26502650#         if searchCharStartPos == -2:
    26512651#             searchCharStartPos = self.getContinuePosForSearch(sarOp)
    2652 # 
     2652#
    26532653#         text = self.GetText()
    26542654#         if len(sarOp.searchStr) > 0:
     
    26622662#                 # Regex error
    26632663#                 return (-1, -1)  # (self.anchorCharPosition, self.anchorCharPosition)
    2664 #                 
     2664#
    26652665#             if start is not None:
    26662666#                 self.showSelectionByCharPos(start, end)
    2667 # 
     2667#
    26682668#                 return found    # self.anchorCharPosition
    2669 # 
     2669#
    26702670#         self.SetSelection(-1, -1)
    26712671#         self.GotoPos(self.bytelenSct(text[:searchCharStartPos]))
    2672 # 
     2672#
    26732673#         return (-1, -1)
    2674 #         
    2675 #         
     2674#
     2675#
    26762676#     def executeReplace(self, sarOp):
    26772677#         """
     
    26832683# #         found = sarOp.matchesPart(seltext)
    26842684#         range = self.GetSelectionCharPos()
    2685 #         
     2685#
    26862686# #         if sarOp.matchesPart(self.GetSelectedText()) is not None:
    26872687#         found = sarOp.matchesPart(text, range)
    2688 # 
     2688#
    26892689#         if found is None:
    26902690#             return -1
    2691 # 
    2692 #         replacement = sarOp.replace(text, found)                   
     2691#
     2692#         replacement = sarOp.replace(text, found)
    26932693#         bytestart = self.GetSelectionStart()
    26942694#         self.ReplaceSelection(replacement)
    26952695#         selByteEnd = bytestart + self.bytelenSct(replacement)
    26962696#         selCharEnd = len(self.GetTextRange(0, selByteEnd))
    2697 # 
     2697#
    26982698#         return selCharEnd
    26992699
     
    27212721        bytePos = self.GetCurrentPos()
    27222722        lineStartBytePos = self.PositionFromLine(self.LineFromPosition(bytePos))
    2723        
     2723
    27242724        lineStartCharPos = len(self.GetTextRange(0, lineStartBytePos))
    27252725        charPos = lineStartCharPos + len(self.GetTextRange(lineStartBytePos,
     
    27332733            self.presenter.getWikiDocument().getCollator().sortByFirst(
    27342734                    acResultTuples)
    2735            
     2735
    27362736            self.autoCompBackBytesMap = dict( (
    27372737                    (art[1], self.bytelenSct(text[charPos - art[2]:charPos]))
     
    27972797        selByteStart = self.PositionFromLine(self.LineFromPosition(selByteStart))
    27982798        selByteEnd = self.PositionFromLine(lastLine + 1)
    2799        
     2799
    28002800        if extendOverChildren:
    28012801            # Extend over all lines which are more indented than the last line
    2802            
     2802
    28032803            lastLineDeep = StringOps.splitIndentDeepness(self.GetLine(lastLine))[0]
    2804            
     2804
    28052805            testLine = lastLine + 1
    2806             while True:           
     2806            while True:
    28072807                testLineContent = self.GetLine(testLine)
    28082808                if len(testLineContent) == 0:
     
    28122812                if StringOps.splitIndentDeepness(testLineContent)[0] <= lastLineDeep:
    28132813                    break
    2814                
     2814
    28152815                testLine += 1
    28162816
     
    28272827    def OnKeyDown(self, evt):
    28282828        key = evt.GetKeyCode()
    2829        
     2829
    28302830        self.lastKeyPressed = time()
    28312831        accP = getAccelPairFromKeyDown(evt)
     
    28422842                    selByteStart, selByteEnd = self._getExpandedByteSelectionToLine(
    28432843                            bool(accP[0] & wx.ACCEL_SHIFT))
    2844    
     2844
    28452845                    firstLine = self.LineFromPosition(selByteStart)
    28462846                    if firstLine > 0:
     
    28712871                    selByteStart, selByteEnd = self._getExpandedByteSelectionToLine(
    28722872                            bool(accP[0] & wx.ACCEL_SHIFT))
    2873    
     2873
    28742874                    lastLine = self.LineFromPosition(selByteEnd)
    28752875                    lineCount = self.GetLineCount() - 1
     
    29012901                    self.EndUndoAction()
    29022902                return
    2903            
     2903
    29042904            evt.Skip()
    29052905
     
    29092909#             self.startIncrementalSearch(self.searchStr)
    29102910#             evt.Skip()
    2911 # 
     2911#
    29122912#         elif matchesAccelPair("StartIncrementalSearch", accP):
    29132913#             # Start incremental search
     
    29582958                bytePos = self.GetCurrentPos()
    29592959                lineStartBytePos = self.PositionFromLine(self.LineFromPosition(bytePos))
    2960                
     2960
    29612961                lineStartCharPos = len(self.GetTextRange(0, lineStartBytePos))
    29622962                charPos = lineStartCharPos + len(self.GetTextRange(lineStartBytePos,
     
    29652965                autoUnbullet = self.presenter.getConfig().getboolean("main",
    29662966                        "editor_autoUnbullets", False)
    2967                
     2967
    29682968                settings = {
    29692969                        "autoUnbullet": autoUnbullet,
     
    29712971                        "autoIndent": self.autoIndent
    29722972                        }
    2973                
     2973
    29742974                if self.wikiLanguageHelper.handleNewLineBeforeEditor(self, text,
    29752975                        charPos, lineStartCharPos, wikiDocument, settings):
     
    29792979            else:
    29802980                evt.Skip()
    2981            
     2981
    29822982        else:
    29832983            super(WikiTxtCtrl, self).OnKeyDown(evt)
     
    29952995            evt.Skip()
    29962996            return
    2997            
     2997
    29982998        if key >= wx.WXK_START and (not isUnicode() or evt.GetUnicodeKey() != key):
    29992999            evt.Skip()
     
    30633063
    30643064        tabMode = Configuration.MIDDLE_MOUSE_CONFIG_TO_TABMODE[middleConfig]
    3065        
     3065
    30663066        if not self.activateLink(evt.GetPosition(), tabMode=tabMode):
    30673067            evt.Skip()
     
    30813081#         else:
    30823082#             textPos = self.PositionFromPoint(evt.GetPosition())
    3083 # 
     3083#
    30843084#             if (self.isPositionInWikiWord(textPos) or
    30853085#                         self.isPositionInLink(textPos)):
     
    30963096#         if evt.stylebytes:
    30973097#             self.applyStyling(evt.stylebytes)
    3098 #         
     3098#
    30993099#         if evt.foldingseq:
    31003100#             self.applyFolding(evt.foldingseq)
    3101 # 
     3101#
    31023102
    31033103
     
    31283128            self.ToggleFold(line)
    31293129            self.repairFoldingVisibility()
    3130        
     3130
    31313131        evt.Skip()
    3132        
    3133        
     3132
     3133
    31343134
    31353135    def _threadShowCalltip(self, wikiDocument, charPos, bytePos,
     
    31793179                args=(wikiDocument, charPos, bytePos),
    31803180                kwargs={"threadstop": self.calltipThreadHolder})
    3181                
     3181
    31823182        self.calltipThreadHolder.setThread(thread)
    31833183        thread.start()
     
    32013201        x = paramDict.get("x")
    32023202        y = paramDict.get("y")
    3203        
     3203
    32043204        dlgParams = WikiTxtDialogs.FilePasteParams()
    32053205#             config = editor.presenter.getMainControl().getConfig()
     
    32243224                # User abort
    32253225                return
    3226            
     3226
    32273227            unifActionName = dlgParams.unifActionName
    32283228
     
    32753275        for fn in filenames:
    32763276            url = StringOps.urlFromPathname(fn)
    3277    
     3277
    32783278            if fn.endswith(u".wiki"):
    32793279                urls.append(u"wiki:%s" % url)
     
    32953295                    # Relative rel: URL
    32963296                    url = editor.presenter.getMainControl().makeAbsPathRelUrl(fn)
    3297                    
     3297
    32983298                    if url is None:
    32993299                        url = u"file:" + StringOps.urlFromPathname(fn)
     
    33313331#                 wxGetKeyState(WXK_MBUTTON) or \
    33323332#                 wxGetKeyState(WXK_RBUTTON)
    3333 # 
     3333#
    33343334#         ctrlPressed = wxGetKeyState(WXK_CONTROL)
    3335 # 
     3335#
    33363336#         if (not ctrlPressed) or mouseBtnPressed:
    33373337#             self.SetCursor(WikiTxtCtrl.CURSOR_IBEAM)
     
    33393339#         else:
    33403340#             linkPos = self.PositionFromPoint(wxPoint(*self.ScreenToClientXY(*mousePos)))
    3341 # 
     3341#
    33423342#             if (self.isPositionInWikiWord(linkPos) or
    33433343#                         self.isPositionInLink(linkPos)):
     
    33683368        self.fobj = wx.FileDataObject()
    33693369        dataob.Add(self.fobj)
    3370        
     3370
    33713371        self.dataob = dataob
    33723372        self.SetDataObject(dataob)
     
    34033403        urls = []
    34043404
    3405         # Necessary because key state may change during the loop                               
     3405        # Necessary because key state may change during the loop
    34063406        controlPressed = wx.GetKeyState(wx.WXK_CONTROL)
    34073407        shiftPressed = wx.GetKeyState(wx.WXK_SHIFT)
    3408        
     3408
    34093409        if isLinux():
    34103410            # On Linux, at least Ubuntu, fn may be a UTF-8 encoded unicode(!?)
     
    34393439#         u"action/editor/this/paste/files/insert/url/absolute",
    34403440#         WikiTxtCtrl.userActionPasteFiles)
    3441 # 
     3441#
    34423442# _ACTION_EDITOR_PASTE_FILES_RELATIVE = UserActionCoord.SimpleAction("",
    34433443#         u"action/editor/this/paste/files/insert/url/relative",
    34443444#         WikiTxtCtrl.userActionPasteFiles)
    3445 # 
     3445#
    34463446# _ACTION_EDITOR_PASTE_FILES_TOSTORAGE = UserActionCoord.SimpleAction("",
    34473447#         u"action/editor/this/paste/files/insert/url/tostorage",
    34483448#         WikiTxtCtrl.userActionPasteFiles)
    3449 # 
     3449#
    34503450# _ACTION_EDITOR_PASTE_FILES_ASK = UserActionCoord.SimpleAction("",
    34513451#         u"action/editor/this/paste/files/insert/url/ask",
    34523452#         WikiTxtCtrl.userActionPasteFiles)
    3453 # 
    3454 # 
     3453#
     3454#
    34553455# _ACTIONS = (
    34563456#         _ACTION_EDITOR_PASTE_FILES_ABSOLUTE, _ACTION_EDITOR_PASTE_FILES_RELATIVE,
  • branches/mbutscher/work/lib/pwiki/wikidata/compact_sqlite/DbStructure.py

    r234 r252  
    897897    return int(connwrap.execSqlQuerySingleItem("select value from settings where key=?",
    898898            (key,), default))
     899
     900
    899901
    900902
  • branches/mbutscher/work/lib/pwiki/wikidata/compact_sqlite/WikiData.py

    r250 r252  
    3636#     pass
    3737
    38 
    3938from pwiki.StringOps import getBinCompactForDiff, applyBinCompact, longPathEnc, \
    4039        longPathDec, binCompactToCompact, fileContentToUnicode, utf8Enc, utf8Dec, \
     
    6160
    6261        dbfile = longPathDec(dbfile)
     62
    6363        try:
    6464            self.connWrap = DbStructure.ConnectWrapSyncCommit(
     
    6767            traceback.print_exc()
    6868            raise DbReadAccessError(e)
    69        
     69
    7070        # Set temporary directory if this is first sqlite use after prog. start
    7171        if not GetApp().sqliteInitFlag:
     
    105105            GetApp().sqliteInitFlag = True
    106106
    107 
    108107        DbStructure.registerSqliteFunctions(self.connWrap)
    109108
     
    147146        # return value, used by getContent()
    148147        self.contentDbToOutput = lambda c: utf8Dec(c, "replace")[0]
    149        
     148
    150149        try:
    151150            # Set marker for database type
     
    167166            self._createTempTables()
    168167
    169             # reset cache
     168            # create word caches
    170169            self.cachedContentNames = None
    171    
    172170            self.cachedGlobalAttrs = None
    173171            self.getGlobalAttributes()
     
    180178                raise DbReadAccessError(e2)
    181179            raise DbReadAccessError(e)
    182            
     180
    183181        if lastException:
    184182            raise lastException
     
    198196        # These schema changes are only on a temporary table so they are not
    199197        # in DbStructure.py
    200         self.connWrap.execSql("create temp table temppathfindparents "
     198        self.connWrap.execSql("create temp table temppathfindparents "+
    201199                "(word text primary key, child text, steps integer)")
    202200
    203         self.connWrap.execSql("create index temppathfindparents_steps "
     201        self.connWrap.execSql("create index temppathfindparents_steps "+
    204202                "on temppathfindparents(steps)")
    205203
    206204
    207205    # ---------- Direct handling of page data ----------
    208    
     206
    209207    def getContent(self, word):
     208        """
     209        Function must work for read-only wiki.
     210        """
    210211        try:
    211212            result = self.connWrap.execSqlQuerySingleItem("select content from "+\
     
    365366                        "created = ?, visited = ? where word = ?",
    366367                        (moddate, creadate, visitdate, word))
     368                self.commitNeeded = True
    367369        except (IOError, OSError, sqlite.Error), e:
    368370            traceback.print_exc()
     
    426428
    427429
     430
     431
    428432    # ---------- Renaming/deleting pages with cache update or invalidation ----------
    429433
     
    439443                self.connWrap.execSql("update wikiwordmatchterms set word = ? where word = ?", (toWord, word))
    440444                self._renameContent(word, toWord)
    441    
    442445                self.connWrap.commit()
    443446            except:
     
    449452
    450453
    451     def deleteWord(self, word):
     454    def deleteWord(self, word, delContent=True):
    452455        """
    453456        delete everything about the wikiword passed in. an exception is raised
    454457        if you try and delete the wiki root node.
     458       
     459        delContent -- Should actual content be deleted as well? (Parameter is
     460                not part of official API)
    455461        """
    456462        if word != self.wikiDocument.getWikiName():
     
    465471                    self.deleteAttributes(word)
    466472                    self.deleteTodos(word)
    467                     # self.connWrap.execSql("delete from wikiwordcontent where word = ?", (word,))
    468                     self._deleteContent(word)
     473                    if delContent:
     474                        self._deleteContent(word)
    469475                    self.deleteWikiWordMatchTerms(word, syncUpdate=False)
    470476                    self.deleteWikiWordMatchTerms(word, syncUpdate=True)
     
    488494            self.connWrap.execSql("update wikiwordcontent set metadataprocessed = ? "
    489495                    "where word = ?", (state, word))
     496            self.commitNeeded = True
    490497        except (IOError, OSError, sqlite.Error), e:
    491498            traceback.print_exc()
     
    511518        self.connWrap.execSql("update wikiwordcontent set metadataprocessed = ?",
    512519                (state,))
     520        self.commitNeeded = True
    513521
    514522
  • branches/mbutscher/work/lib/pwiki/wikidata/original_gadfly/WikiData.py

    r250 r252  
    141141
    142142    def getContent(self, word):
     143        """
     144        Function must work for read-only wiki.
     145        """
    143146        try:
    144147            try:
     
    294297        """
    295298        Returns a tuple with modification, creation and visit date of
    296         a word or (None, None, None) if word is not in the database
     299        a word or (None, None, None) if word is not in the database.
     300        Aliases must be resolved beforehand.
     301        Function must work for read-only wiki.
    297302        """
    298303        try:
     
    313318        """
    314319        Set timestamps for an existing wiki page.
     320        Aliases must be resolved beforehand.
    315321        """
    316322        moddate, creadate, visitdate = timestamps[:3]
     
    427433        if word != self.wikiDocument.getWikiName():
    428434            try:
     435                self.connWrap.syncCommit()
    429436                try:
    430                     self.commit()
    431437                    # don't delete the relations to the word since other
    432438                    # pages still have valid outward links to this page.
     
    460466
    461467
    462 
    463468    def setMetaDataState(self, word, state):
    464469        """
     
    601606        """
    602607        get the child relations of this word
     608        Function must work for read-only wiki.
    603609        existingonly -- List only existing wiki words
    604610        selfreference -- List also wikiWord if it references itself
  • branches/mbutscher/work/lib/pwiki/wikidata/original_sqlite/DbStructure.py

    r234 r252  
    350350        finally:
    351351            self.accessLock.release()
    352 
    353352
    354353
     
    551550
    552551    rebuildIndices(connwrap)
     552
    553553#     connwrap.execSql("create unique index wikirelations_pkey on wikirelations(word, relation)")
    554554#     connwrap.execSql("create index wikirelations_word on wikirelations(word)")
  • branches/mbutscher/work/lib/pwiki/wikidata/original_sqlite/WikiData.py

    r250 r252  
    165165            # Remember but continue
    166166            lastException = DbWriteAccessError(e)
    167    
     167
    168168        # Function to convert unicode strings from input to content in database
    169169        # used by setContent
     170
    170171        def contentUniInputToDb(unidata):
    171172            return utf8Enc(unidata, "replace")[0]
     
    403404                        "created = ?, visited = ? where word = ?",
    404405                        (moddate, creadate, visitdate, word))
     406                self.commitNeeded = True
    405407        except (IOError, OSError, sqlite.Error), e:
    406408            traceback.print_exc()
     
    423425                "visited": Last visit date of page
    424426                "firstcharpos": Dummy returning very high value
    425                
    426427        """
    427428        if withFields is None:
     
    530531            self.connWrap.execSql("update wikiwords set metadataprocessed = ? "
    531532                    "where word = ?", (state, word))
     533            self.commitNeeded = True
    532534        except (IOError, OSError, sqlite.Error), e:
    533535            traceback.print_exc()
     
    553555        self.connWrap.execSql("update wikiwords set metadataprocessed = ?",
    554556                (state,))
     557        self.commitNeeded = True
    555558
    556559
Note: See TracChangeset for help on using the changeset viewer.