builder / search_replace.py
mgbam's picture
Rename extractor.py to search_replace.py
53e6ab1 verified
def apply_search_replace_changes(original_content: str, changes_text: str) -> str:
"""Apply search/replace changes to content (HTML, Python, etc.)"""
if not changes_text.strip():
return original_content
blocks=[]
current_block=""
lines=changes_text.split('\n')
for line in lines:
if line.strip()==SEARCH_START:
if current_block.strip(): blocks.append(current_block.strip())
current_block=line+"\n"
elif line.strip()==REPLACE_END:
current_block+=line+"\n"
blocks.append(current_block.strip())
current_block=""
else:
current_block+=line+"\n"
if current_block.strip(): blocks.append(current_block.strip())
modified_content=original_content
for block in blocks:
lines=block.split('\n')
search_lines=[]; replace_lines=[]
in_search=False; in_replace=False
for ln in lines:
if ln.strip()==SEARCH_START:
in_search=True; in_replace=False
elif ln.strip()==DIVIDER:
in_search=False; in_replace=True
elif ln.strip()==REPLACE_END:
in_replace=False
elif in_search:
search_lines.append(ln)
elif in_replace:
replace_lines.append(ln)
if search_lines:
search_text='\n'.join(search_lines).strip()
replace_text='\n'.join(replace_lines).strip()
if search_text in modified_content:
modified_content=modified_content.replace(search_text,replace_text)
else:
print(f"Warning: Search text not found in content: {search_text[:100]}...")
return modified_content
def apply_transformers_js_search_replace_changes(original_formatted_content: str, changes_text: str) -> str:
"""Apply search/replace changes to transformers.js formatted content (three files)"""
if not changes_text.strip():
return original_formatted_content
files=parse_transformers_js_output(original_formatted_content)
blocks=[]; current_block=""
lines=changes_text.split('\n')
for line in lines:
if line.strip()==SEARCH_START:
if current_block.strip(): blocks.append(current_block.strip())
current_block=line+"\n"
elif line.strip()==REPLACE_END:
current_block+=line+"\n"
blocks.append(current_block.strip())
current_block=""
else:
current_block+=line+"\n"
if current_block.strip(): blocks.append(current_block.strip())
for block in blocks:
lines=block.split('\n')
search_lines=[]; replace_lines=[]
in_search=False; in_replace=False; target_file=None
for ln in lines:
if ln.strip()==SEARCH_START:
in_search=True; in_replace=False
elif ln.strip()==DIVIDER:
in_search=False; in_replace=True
elif ln.strip()==REPLACE_END:
in_replace=False
elif in_search:
search_lines.append(ln)
elif in_replace:
replace_lines.append(ln)
if search_lines:
search_text='\n'.join(search_lines).strip()
replace_text='\n'.join(replace_lines).strip()
if search_text in files['index.html']:
target_file='index.html'
elif search_text in files['index.js']:
target_file='index.js'
elif search_text in files['style.css']:
target_file='style.css'
if target_file and search_text in files[target_file]:
files[target_file]=files[target_file].replace(search_text,replace_text)
else:
print(f"Warning: Search text not found in any transformers.js file: {search_text[:100]}...")
return format_transformers_js_output(files)