mirror of
https://github.com/librephoenix/nixos-config
synced 2025-01-19 07:05:51 +05:30
Getting rid of ox-odp, since I don't use it
This commit is contained in:
parent
0ffebc8d1f
commit
bdffc3809d
|
@ -431,25 +431,6 @@ same directory as the org-buffer and insert a link to this file."
|
||||||
; :desc "Simple print region in web browser"
|
; :desc "Simple print region in web browser"
|
||||||
; "r" 'org-simple-print-region)
|
; "r" 'org-simple-print-region)
|
||||||
|
|
||||||
;; Custom function to convert org mode to ODP presentation
|
|
||||||
;; Depends on bash, libreoffice, and pandoc
|
|
||||||
(defun my-ox-odp ()
|
|
||||||
"Convert an org mode file to an ODP presentation."
|
|
||||||
(interactive)
|
|
||||||
(setq file-name (buffer-file-name))
|
|
||||||
(setq output-pptx-file-name (replace-regexp-in-string "\.org" "\.pptx" (buffer-file-name)))
|
|
||||||
(setq output-odp-file-name (replace-regexp-in-string "\.org" "\.odp" (buffer-file-name)))
|
|
||||||
(setq odp-style-file-name (completing-read "Choose style: "
|
|
||||||
'("/home/emmet/.doom.d/scripts/ox-odp/styles/water.odp"
|
|
||||||
"/home/emmet/.doom.d/scripts/ox-odp/styles/dark.odp"
|
|
||||||
) nil t))
|
|
||||||
(shell-command (concat "~/.doom.d/scripts/ox-odp/ox-odp.sh \"" (buffer-file-name) "\" \"" odp-style-file-name "\" > /dev/null"))
|
|
||||||
)
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Convert org document to odp presentation"
|
|
||||||
"e p" 'my-ox-odp)
|
|
||||||
|
|
||||||
;;;------ Org roam configuration ------;;;
|
;;;------ Org roam configuration ------;;;
|
||||||
|
|
||||||
(require 'org-roam)
|
(require 'org-roam)
|
||||||
|
|
|
@ -522,243 +522,6 @@ exit
|
||||||
; :desc "Simple print region in web browser"
|
; :desc "Simple print region in web browser"
|
||||||
; "r" 'org-simple-print-region)
|
; "r" 'org-simple-print-region)
|
||||||
|
|
||||||
#+END_SRC
|
|
||||||
*** Org -> ODP Presentation Export
|
|
||||||
#+BEGIN_SRC emacs-lisp :tangle config.el
|
|
||||||
;; Custom function to convert org mode to ODP presentation
|
|
||||||
;; Depends on bash, libreoffice, and pandoc
|
|
||||||
(defun my-ox-odp ()
|
|
||||||
"Convert an org mode file to an ODP presentation."
|
|
||||||
(interactive)
|
|
||||||
(setq file-name (buffer-file-name))
|
|
||||||
(setq output-pptx-file-name (replace-regexp-in-string "\.org" "\.pptx" (buffer-file-name)))
|
|
||||||
(setq output-odp-file-name (replace-regexp-in-string "\.org" "\.odp" (buffer-file-name)))
|
|
||||||
(setq odp-style-file-name (completing-read "Choose style: "
|
|
||||||
'("/home/emmet/.doom.d/scripts/ox-odp/styles/water.odp"
|
|
||||||
"/home/emmet/.doom.d/scripts/ox-odp/styles/dark.odp"
|
|
||||||
) nil t))
|
|
||||||
(shell-command (concat "~/.doom.d/scripts/ox-odp/ox-odp.sh \"" (buffer-file-name) "\" \"" odp-style-file-name "\" > /dev/null"))
|
|
||||||
)
|
|
||||||
|
|
||||||
(map! :leader
|
|
||||||
:desc "Convert org document to odp presentation"
|
|
||||||
"e p" 'my-ox-odp)
|
|
||||||
|
|
||||||
#+END_SRC
|
|
||||||
**** Org -> ODP Helper Scripts
|
|
||||||
These are helper scripts for =my-ox-odp= (defined above), which converts an org document to an ODP presentation. This fundamentally functions by running a shell script ([[./scripts/ox-odp/ox-odp.sh][ox-odp.sh]]), which also calls a Python script ([[./scripts/ox-odp/ox-odp-xml-parse.py][ox-odp-xml-parse.py]]).
|
|
||||||
***** [[./scripts/ox-odp/ox-odp.sh][ox-odp.sh]]
|
|
||||||
#+BEGIN_SRC shell :tangle ./scripts/ox-odp/ox-odp.sh :tangle-mode (identity #o755)
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
filename=$1
|
|
||||||
echo $filename
|
|
||||||
stylefile=$2
|
|
||||||
echo $stylefile
|
|
||||||
|
|
||||||
filenamebase=$(basename "$filename")
|
|
||||||
filenameext="${filenamebase##*.}"
|
|
||||||
echo $filenameext
|
|
||||||
|
|
||||||
if [ $filenameext = "org" ]; then
|
|
||||||
stylefilebase=$(basename "$stylefile")
|
|
||||||
stylefileext="${stylefilebase##*.}"
|
|
||||||
|
|
||||||
if [ $stylefileext = "odp" ]; then
|
|
||||||
output="${filename//\.org/\.pptx}"
|
|
||||||
finaloutput="${filename//\.org/\.odp}"
|
|
||||||
pandoc "$filename" -o "$output"
|
|
||||||
soffice --convert-to odp "$output"
|
|
||||||
unzip "$finaloutput" content.xml
|
|
||||||
unzip "$stylefile" styles.xml
|
|
||||||
|
|
||||||
sed 's~</text:span>~~g' content.xml
|
|
||||||
sed 's~<text:span text:style-name="..">~~g' content.xml
|
|
||||||
|
|
||||||
python3 ~/.doom.d/scripts/ox-odp/ox-odp-xml-parse.py
|
|
||||||
|
|
||||||
zip -d $finaloutput styles.xml
|
|
||||||
zip -m $finaloutput styles.xml
|
|
||||||
|
|
||||||
zip -d $finaloutput content.xml
|
|
||||||
zip -m $finaloutput content.xml
|
|
||||||
|
|
||||||
rm $output
|
|
||||||
|
|
||||||
exit
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Style file is not an odp file."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Base file is not an org file."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit
|
|
||||||
|
|
||||||
#+END_SRC
|
|
||||||
***** [[./scripts/ox-odp/ox-odp-xml-parse.py][ox-odp-xml-parse.py]]
|
|
||||||
This script parses through the raw LibreOffice XML to fix some common formatting errors with the standard Org to pptx to odp conversion strategy.
|
|
||||||
#+BEGIN_SRC python :tangle ./scripts/ox-odp/ox-odp-xml-parse.py :tangle-mode (identity #o755)
|
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
import copy
|
|
||||||
|
|
||||||
# Read content.xml into parser
|
|
||||||
mytree = ET.parse('./content.xml')
|
|
||||||
myroot = mytree.getroot()
|
|
||||||
|
|
||||||
# Read styles.xml into parser
|
|
||||||
styletree = ET.parse('./styles.xml')
|
|
||||||
styleroot = styletree.getroot()
|
|
||||||
|
|
||||||
# Remove direct-formatting from text:style-name attributes in text:p elements
|
|
||||||
counter = 0
|
|
||||||
for text in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}p'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in text.keys():
|
|
||||||
stylename = text.attrib['{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name']
|
|
||||||
if stylename[0] == "P":
|
|
||||||
counter += 1
|
|
||||||
text.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name')
|
|
||||||
print('Deleted '+str(counter)+' text:style-name attributes in text:p elements.')
|
|
||||||
|
|
||||||
# Remove direct-formatting from text:style-name attributes in text:span elements
|
|
||||||
counter = 0
|
|
||||||
for span in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}span'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in span.keys():
|
|
||||||
span.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name')
|
|
||||||
print('Deleted '+str(counter)+' text:style-name attributes in text:span elements.')
|
|
||||||
|
|
||||||
# Remove direct-formatting from draw:text-style-name attributes in draw:frame elements
|
|
||||||
counter = 0
|
|
||||||
for drawing in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}frame'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name' in drawing.keys():
|
|
||||||
stylename = drawing.attrib['{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name']
|
|
||||||
if stylename[0] == "P":
|
|
||||||
counter += 1
|
|
||||||
drawing.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name')
|
|
||||||
print('Deleted '+str(counter)+' draw:text-style-name attributes in text:p elements.')
|
|
||||||
|
|
||||||
# Redefine default styles (style:style elements) and purge unnecessary ones
|
|
||||||
counter = 0
|
|
||||||
kounter = 0
|
|
||||||
for style in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}style'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name' in style.keys():
|
|
||||||
stylename = style.attrib['{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name']
|
|
||||||
if stylename == "pr1":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-title')
|
|
||||||
elif stylename == "pr2":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-subtitle')
|
|
||||||
elif stylename == "pr3":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-notes')
|
|
||||||
elif stylename == "pr4":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-outline1')
|
|
||||||
print('Redefined '+str(counter)+' style:parent-style-name attributes in style:style elements.')
|
|
||||||
print('Deleted '+str(kounter)+' style:style elements.')
|
|
||||||
|
|
||||||
# Search for automatic-styles element
|
|
||||||
i = 0
|
|
||||||
col1 = 0
|
|
||||||
while (i < len(myroot)):
|
|
||||||
print(myroot[i].tag)
|
|
||||||
if myroot[i].tag=="{urn:oasis:names:tc:opendocument:xmlns:office:1.0}automatic-styles":
|
|
||||||
col1 = i
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Remove unnecessary style:style and test:list-style elements underneath automatic-styles
|
|
||||||
i = 0
|
|
||||||
while (i < len(myroot[col1])):
|
|
||||||
if (myroot[col1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:style:1.0}style"):
|
|
||||||
if ("{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name" in myroot[col1][i].keys()):
|
|
||||||
if myroot[col1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"] in ["pr5","pr6","pr7","pr8","pr9"]:
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
elif myroot[col1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"][0] == "P":
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
if (myroot[col1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list-style"):
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
#i = 0
|
|
||||||
#while (i < len(myroot[col1])):
|
|
||||||
# print(myroot[col1][i].attrib)
|
|
||||||
# i += 1
|
|
||||||
|
|
||||||
# Find ML1 in styles.xml and copy it into L1 in content.xml
|
|
||||||
# Search for automatic-styles element
|
|
||||||
i = 0
|
|
||||||
stylecol1 = 0
|
|
||||||
while (i < len(styleroot)):
|
|
||||||
print(styleroot[i].tag)
|
|
||||||
if styleroot[i].tag=="{urn:oasis:names:tc:opendocument:xmlns:office:1.0}automatic-styles":
|
|
||||||
stylecol1 = i
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Remove unnecessary style:style and test:list-style elements underneath automatic-styles
|
|
||||||
i = 0
|
|
||||||
while (i < len(styleroot[stylecol1])):
|
|
||||||
if (styleroot[stylecol1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list-style"):
|
|
||||||
if (styleroot[stylecol1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"] == "ML1"):
|
|
||||||
liststyle_copy = copy.deepcopy(styleroot[stylecol1][i])
|
|
||||||
myroot[col1].append(liststyle_copy)
|
|
||||||
myroot[col1][-1].attrib['{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name'] = "L1"
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Update presentation:style-name attribute of all draw:frame elements
|
|
||||||
counter = 0
|
|
||||||
for frame in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}frame'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}class' in frame.keys():
|
|
||||||
classname = frame.attrib['{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}class']
|
|
||||||
if classname == "title":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr1')
|
|
||||||
elif classname == "subtitle":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr2')
|
|
||||||
elif classname == "notes":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr3')
|
|
||||||
elif classname == "outline":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr4')
|
|
||||||
print("Updated "+str(counter)+" draw:frame elements")
|
|
||||||
|
|
||||||
# Update draw:master-page-name attributes in all draw:page elements
|
|
||||||
# Also delete all presentation:presentation-page-layout attributes
|
|
||||||
counter = 0
|
|
||||||
for page in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}page'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}master-page-name' in page.keys():
|
|
||||||
page.set('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}master-page-name','DefaultTheme')
|
|
||||||
counter += 1
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}presentation-page-layout' in page.keys():
|
|
||||||
page.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}presentation-page-layout')
|
|
||||||
|
|
||||||
print("Updated "+str(counter)+" draw:page elements")
|
|
||||||
|
|
||||||
# Update all text:list elements to have text:style-name = L1
|
|
||||||
counter = 0
|
|
||||||
for page in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in page.keys():
|
|
||||||
page.set('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name','L1')
|
|
||||||
counter += 1
|
|
||||||
|
|
||||||
print("Updated "+str(counter)+" text:list elements")
|
|
||||||
|
|
||||||
#mytree.canonicalize(out='content.xml')
|
|
||||||
mytree.write('content.xml')
|
|
||||||
styletree.write('styles.xml')
|
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
** Org Roam Configuration
|
** Org Roam Configuration
|
||||||
*** Standard Org Roam Configuration
|
*** Standard Org Roam Configuration
|
||||||
|
|
|
@ -1,157 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
import copy
|
|
||||||
|
|
||||||
# Read content.xml into parser
|
|
||||||
mytree = ET.parse('./content.xml')
|
|
||||||
myroot = mytree.getroot()
|
|
||||||
|
|
||||||
# Read styles.xml into parser
|
|
||||||
styletree = ET.parse('./styles.xml')
|
|
||||||
styleroot = styletree.getroot()
|
|
||||||
|
|
||||||
# Remove direct-formatting from text:style-name attributes in text:p elements
|
|
||||||
counter = 0
|
|
||||||
for text in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}p'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in text.keys():
|
|
||||||
stylename = text.attrib['{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name']
|
|
||||||
if stylename[0] == "P":
|
|
||||||
counter += 1
|
|
||||||
text.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name')
|
|
||||||
print('Deleted '+str(counter)+' text:style-name attributes in text:p elements.')
|
|
||||||
|
|
||||||
# Remove direct-formatting from text:style-name attributes in text:span elements
|
|
||||||
counter = 0
|
|
||||||
for span in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}span'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in span.keys():
|
|
||||||
span.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name')
|
|
||||||
print('Deleted '+str(counter)+' text:style-name attributes in text:span elements.')
|
|
||||||
|
|
||||||
# Remove direct-formatting from draw:text-style-name attributes in draw:frame elements
|
|
||||||
counter = 0
|
|
||||||
for drawing in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}frame'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name' in drawing.keys():
|
|
||||||
stylename = drawing.attrib['{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name']
|
|
||||||
if stylename[0] == "P":
|
|
||||||
counter += 1
|
|
||||||
drawing.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}text-style-name')
|
|
||||||
print('Deleted '+str(counter)+' draw:text-style-name attributes in text:p elements.')
|
|
||||||
|
|
||||||
# Redefine default styles (style:style elements) and purge unnecessary ones
|
|
||||||
counter = 0
|
|
||||||
kounter = 0
|
|
||||||
for style in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}style'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name' in style.keys():
|
|
||||||
stylename = style.attrib['{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name']
|
|
||||||
if stylename == "pr1":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-title')
|
|
||||||
elif stylename == "pr2":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-subtitle')
|
|
||||||
elif stylename == "pr3":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-notes')
|
|
||||||
elif stylename == "pr4":
|
|
||||||
counter += 1
|
|
||||||
style.set('{urn:oasis:names:tc:opendocument:xmlns:style:1.0}parent-style-name','DefaultTheme-outline1')
|
|
||||||
print('Redefined '+str(counter)+' style:parent-style-name attributes in style:style elements.')
|
|
||||||
print('Deleted '+str(kounter)+' style:style elements.')
|
|
||||||
|
|
||||||
# Search for automatic-styles element
|
|
||||||
i = 0
|
|
||||||
col1 = 0
|
|
||||||
while (i < len(myroot)):
|
|
||||||
print(myroot[i].tag)
|
|
||||||
if myroot[i].tag=="{urn:oasis:names:tc:opendocument:xmlns:office:1.0}automatic-styles":
|
|
||||||
col1 = i
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Remove unnecessary style:style and test:list-style elements underneath automatic-styles
|
|
||||||
i = 0
|
|
||||||
while (i < len(myroot[col1])):
|
|
||||||
if (myroot[col1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:style:1.0}style"):
|
|
||||||
if ("{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name" in myroot[col1][i].keys()):
|
|
||||||
if myroot[col1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"] in ["pr5","pr6","pr7","pr8","pr9"]:
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
elif myroot[col1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"][0] == "P":
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
if (myroot[col1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list-style"):
|
|
||||||
print("Removing "+myroot[col1][i].tag)
|
|
||||||
myroot[col1].remove(myroot[col1][i])
|
|
||||||
i -= 1
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
#i = 0
|
|
||||||
#while (i < len(myroot[col1])):
|
|
||||||
# print(myroot[col1][i].attrib)
|
|
||||||
# i += 1
|
|
||||||
|
|
||||||
# Find ML1 in styles.xml and copy it into L1 in content.xml
|
|
||||||
# Search for automatic-styles element
|
|
||||||
i = 0
|
|
||||||
stylecol1 = 0
|
|
||||||
while (i < len(styleroot)):
|
|
||||||
print(styleroot[i].tag)
|
|
||||||
if styleroot[i].tag=="{urn:oasis:names:tc:opendocument:xmlns:office:1.0}automatic-styles":
|
|
||||||
stylecol1 = i
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Remove unnecessary style:style and test:list-style elements underneath automatic-styles
|
|
||||||
i = 0
|
|
||||||
while (i < len(styleroot[stylecol1])):
|
|
||||||
if (styleroot[stylecol1][i].tag == "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list-style"):
|
|
||||||
if (styleroot[stylecol1][i].attrib["{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name"] == "ML1"):
|
|
||||||
liststyle_copy = copy.deepcopy(styleroot[stylecol1][i])
|
|
||||||
myroot[col1].append(liststyle_copy)
|
|
||||||
myroot[col1][-1].attrib['{urn:oasis:names:tc:opendocument:xmlns:style:1.0}name'] = "L1"
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
# Update presentation:style-name attribute of all draw:frame elements
|
|
||||||
counter = 0
|
|
||||||
for frame in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}frame'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}class' in frame.keys():
|
|
||||||
classname = frame.attrib['{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}class']
|
|
||||||
if classname == "title":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr1')
|
|
||||||
elif classname == "subtitle":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr2')
|
|
||||||
elif classname == "notes":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr3')
|
|
||||||
elif classname == "outline":
|
|
||||||
counter += 1
|
|
||||||
frame.set('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}style-name','pr4')
|
|
||||||
print("Updated "+str(counter)+" draw:frame elements")
|
|
||||||
|
|
||||||
# Update draw:master-page-name attributes in all draw:page elements
|
|
||||||
# Also delete all presentation:presentation-page-layout attributes
|
|
||||||
counter = 0
|
|
||||||
for page in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}page'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}master-page-name' in page.keys():
|
|
||||||
page.set('{urn:oasis:names:tc:opendocument:xmlns:drawing:1.0}master-page-name','DefaultTheme')
|
|
||||||
counter += 1
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}presentation-page-layout' in page.keys():
|
|
||||||
page.attrib.pop('{urn:oasis:names:tc:opendocument:xmlns:presentation:1.0}presentation-page-layout')
|
|
||||||
|
|
||||||
print("Updated "+str(counter)+" draw:page elements")
|
|
||||||
|
|
||||||
# Update all text:list elements to have text:style-name = L1
|
|
||||||
counter = 0
|
|
||||||
for page in myroot.iter('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}list'):
|
|
||||||
if '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name' in page.keys():
|
|
||||||
page.set('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}style-name','L1')
|
|
||||||
counter += 1
|
|
||||||
|
|
||||||
print("Updated "+str(counter)+" text:list elements")
|
|
||||||
|
|
||||||
#mytree.canonicalize(out='content.xml')
|
|
||||||
mytree.write('content.xml')
|
|
||||||
styletree.write('styles.xml')
|
|
|
@ -1,47 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
filename=$1
|
|
||||||
echo $filename
|
|
||||||
stylefile=$2
|
|
||||||
echo $stylefile
|
|
||||||
|
|
||||||
filenamebase=$(basename "$filename")
|
|
||||||
filenameext="${filenamebase##*.}"
|
|
||||||
echo $filenameext
|
|
||||||
|
|
||||||
if [ $filenameext = "org" ]; then
|
|
||||||
stylefilebase=$(basename "$stylefile")
|
|
||||||
stylefileext="${stylefilebase##*.}"
|
|
||||||
|
|
||||||
if [ $stylefileext = "odp" ]; then
|
|
||||||
output="${filename//\.org/\.pptx}"
|
|
||||||
finaloutput="${filename//\.org/\.odp}"
|
|
||||||
pandoc "$filename" -o "$output"
|
|
||||||
soffice --convert-to odp "$output"
|
|
||||||
unzip "$finaloutput" content.xml
|
|
||||||
unzip "$stylefile" styles.xml
|
|
||||||
|
|
||||||
sed 's~</text:span>~~g' content.xml
|
|
||||||
sed 's~<text:span text:style-name="..">~~g' content.xml
|
|
||||||
|
|
||||||
python3 ~/.doom.d/scripts/ox-odp/ox-odp-xml-parse.py
|
|
||||||
|
|
||||||
zip -d $finaloutput styles.xml
|
|
||||||
zip -m $finaloutput styles.xml
|
|
||||||
|
|
||||||
zip -d $finaloutput content.xml
|
|
||||||
zip -m $finaloutput content.xml
|
|
||||||
|
|
||||||
rm $output
|
|
||||||
|
|
||||||
exit
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Style file is not an odp file."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Base file is not an org file."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit
|
|
Loading…
Reference in a new issue