This repository has been archived on 2021-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
kaneton/export/modules/breplace.py
Mercier Pierre-Olivier fee4dd4e6d Initial snapshot
2013-02-11 22:04:30 +01:00

74 lines
2.1 KiB
Python

#
# ---------- header -----------------------------------------------------------
#
# project kaneton
#
# license kaneton
#
# file /home/mycure/kaneton/export/modules/breplace.py
#
# created francois goudal [sat oct 25 20:57:38 2008]
# updated julien quintard [sat feb 5 10:33:33 2011]
#
#
# ---------- imports ----------------------------------------------------------
#
import env
import re
#
# ---------- functions --------------------------------------------------------
#
#
# module_init()
#
# called by export.py on startup, to discover the available actions
# returns an array of strings, the index 0 is the action name, and the
# others are the parameters required in the YAML file.
#
def module_init():
return ['breplace','id','data']
#
# module_action(export_dir, arg)
#
# called by export.py when required by the YAML file.
# this function does the job of the action.
# arg contains the parameters required as specified in the module_init return
# value.
#
def module_action(export_dir, arg):
strip = 0
env.display(env.HEADER_OK, 'action breplace ' + arg['id'], env.OPTION_NONE)
id = arg['id'].split('::', 1)
filepath = id[0]
label = id[1]
tmpfilepath = env.temporary(env.OPTION_FILE)
srcf = open(export_dir + '/' + filepath, 'r')
dstf = open(tmpfilepath, 'w')
line = srcf.readline()
startpattern = re.compile(".*[[]block\:\:" + label + "[]].*")
endpattern = re.compile(".*[[]/block\:\:" + label + "[]].*")
while line != "":
if strip == 0:
if startpattern.match(line) != None:
strip = 1
dstf.write(arg['data'])
if strip != 1:
dstf.write(line)
if strip == 1:
if endpattern.match(line) != None:
strip = 2
line = srcf.readline()
dstf.close()
srcf.close()
env.copy(tmpfilepath, export_dir + '/' + filepath, env.OPTION_NONE)
env.remove(tmpfilepath, env.OPTION_NONE)
if strip == 0:
env.display(env.HEADER_ERROR, 'no block ' + label + ' in file ' + filepath, env.OPTION_NONE)
return -1
return 0