Package translate :: Package storage :: Package placeables :: Module base |
[hide private]
[frames] | no frames]

# Source Code for Module translate.storage.placeables.base

      1  #!/usr/bin/env python
      2  # -*- coding: utf-8 -*-
      3  #
      4  # Copyright 2008-2009 Zuza Software Foundation
      5  #
      6  # This file is part of the Translate Toolkit.
      7  #
      8  # This program is free software; you can redistribute it and/or modify
      9  # it under the terms of the GNU General Public License as published by
     10  # the Free Software Foundation; either version 2 of the License, or
     11  # (at your option) any later version.
     12  #
     13  # This program is distributed in the hope that it will be useful,
     14  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  # GNU General Public License for more details.
     17  #
     18  # You should have received a copy of the GNU General Public License
     19  # along with this program; if not, see <http://www.gnu.org/licenses/>.
     20
     21  """
     22  Contains base placeable classes with names based on XLIFF placeables. See the
     23  XLIFF standard for more information about what the names mean.
     24  """
     25
     26  from strelem import StringElem
     27  from interfaces import *
     28
     29
     30  __all__ = ['Bpt', 'Ept', 'Ph', 'It', 'G', 'Bx', 'Ex', 'X', 'Sub', 'to_base_placeables']
     31
     32
     33  # Basic placeable types.
     34 -class Bpt(MaskingPlaceable, PairedDelimiter):
     35      has_content = True
     36
     37
     38 -class Ept(MaskingPlaceable, PairedDelimiter):
     39      has_content = True
     40
     41
     42 -class Ph(MaskingPlaceable):
     43      has_content = True
     44      istranslatable = False
     45
     46
     47 -class It(MaskingPlaceable, Delimiter):
     48      has_content = True
     49
     50
     51 -class G(ReplacementPlaceable):
     52      has_content = True
     53
     54
     55 -class Bx(ReplacementPlaceable, PairedDelimiter):
     56      has_content = False
     57      istranslatable = False
     58
     59 -    def __init__(self, id=None, xid=None, **kwargs):
     60          # kwargs is ignored
     61          ReplacementPlaceable.__init__(self, id=id, xid=xid, **kwargs)
     62
     63
     64 -class Ex(ReplacementPlaceable, PairedDelimiter):
     65      has_content = False
     66      istranslatable = False
     67
     68 -    def __init__(self, id=None, xid=None, **kwargs):
     69          # kwargs is ignored
     70          ReplacementPlaceable.__init__(self, id=id, xid=xid, **kwargs)
     71
     72
     73 -class X(ReplacementPlaceable, Delimiter):
     74      has_content = False
     75      iseditable = False
     76      isfragile = True
     77      istranslatable = False
     78
     79 -    def __init__(self, id=None, xid=None, **kwargs):
     80          ReplacementPlaceable.__init__(self, id=id, xid=xid, **kwargs)
     81
     82
     83 -class Sub(SubflowPlaceable):
     84      has_content = True
     85
     86
     87 -def to_base_placeables(tree):
     88      if not isinstance(tree, StringElem):
     89          return tree
     90
     91      base_class = [klass for klass in tree.__class__.__bases__ \
     92                    if klass in [Bpt, Ept, Ph, It, G, Bx, Ex, X, Sub]]
     93
     94      if not base_class:
     95          base_class = tree.__class__
     96      else:
     97          base_class = base_class[0]
     98
     99      newtree = base_class()
    100      newtree.id = tree.id
    101      newtree.rid = tree.rid
    102      newtree.xid = tree.xid
    103      newtree.sub = []
    104
    105      for subtree in tree.sub:
    106          newtree.sub.append(to_base_placeables(subtree))
    107
    108      return newtree
    109