├── src ├── blog │ ├── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0003_auto_20190527_1928.py │ │ ├── 0001_initial.py │ │ └── 0002_auto_20190402_1821.py │ ├── templatetags │ │ ├── __init__.py │ │ └── post_tag.py │ ├── tests.py │ ├── apps.py │ ├── static │ │ └── blog │ │ │ ├── images │ │ │ ├── favicon.ico │ │ │ └── mim-logo.png │ │ │ ├── fonts │ │ │ ├── Tajawal-Black.ttf │ │ │ ├── Tajawal-Bold.ttf │ │ │ ├── Tajawal-Light.ttf │ │ │ ├── Tajawal-Medium.ttf │ │ │ ├── Tajawal-Regular.ttf │ │ │ ├── Tajawal-ExtraBold.ttf │ │ │ ├── Tajawal-ExtraLight.ttf │ │ │ └── OFL.txt │ │ │ ├── css │ │ │ └── main.css │ │ │ └── js │ │ │ ├── popper.min.js │ │ │ └── bootstrap.min.js │ ├── templates │ │ └── blog │ │ │ ├── about.html │ │ │ ├── latest_posts.html │ │ │ ├── new_post.html │ │ │ ├── post_update.html │ │ │ ├── latest_comments.html │ │ │ ├── post_confirm_delete.html │ │ │ ├── pagination.html │ │ │ ├── index.html │ │ │ ├── detail.html │ │ │ └── base.html │ ├── admin.py │ ├── forms.py │ ├── urls.py │ ├── models.py │ └── views.py ├── my_blog │ ├── __init__.py │ ├── wsgi.py │ ├── urls.py │ └── settings.py ├── user │ ├── __init__.py │ ├── migrations │ │ ├── __init__.py │ │ └── 0001_initial.py │ ├── tests.py │ ├── apps.py │ ├── admin.py │ ├── templates │ │ └── user │ │ │ ├── logout.html │ │ │ ├── register.html │ │ │ ├── profile_update.html │ │ │ ├── login.html │ │ │ └── profile.html │ ├── urls.py │ ├── models.py │ ├── forms.py │ └── views.py ├── media │ ├── profile_pics │ │ ├── admin.jpg │ │ ├── flower.jpg │ │ ├── admin_kWTmkG8.jpg │ │ ├── flower_9eafpwg.jpg │ │ ├── nature-2-26-17.jpg │ │ ├── flower_9eafpwg1.jpg │ │ ├── admin_kWTmkG8_ldMRM89.jpg │ │ └── admin_kWTmkG8_ldMRM89_urR8oOZ.jpg │ └── default.jpg ├── static │ └── css │ │ └── main.css ├── db.sqlite3 └── manage.py ├── .gitignore ├── Plan_of_Blog_project.pdf ├── Requirements.txt ├── README.md └── share └── man └── man1 ├── odfoutline.1 ├── odf2xhtml.1 ├── odflint.1 ├── mailodf.1 ├── odf2xml.1 ├── odf2mht.1 ├── odfimgimport.1 ├── odfuserfield.1 ├── xml2odf.1 ├── csv2ods.1 └── odfmeta.1 /src/blog/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/my_blog/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/user/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/blog/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/blog/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/media/profile_pics/admin.jpg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/user/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/static/css/main.css: -------------------------------------------------------------------------------- 1 | div{ 2 | color: red; 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin/* 2 | include/* 3 | lib/* 4 | *.pyc 5 | .directory 6 | 7 | -------------------------------------------------------------------------------- /src/db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/db.sqlite3 -------------------------------------------------------------------------------- /src/blog/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/user/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /src/media/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/default.jpg -------------------------------------------------------------------------------- /Plan_of_Blog_project.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/Plan_of_Blog_project.pdf -------------------------------------------------------------------------------- /src/blog/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BlogConfig(AppConfig): 5 | name = 'blog' 6 | -------------------------------------------------------------------------------- /src/user/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class UserConfig(AppConfig): 5 | name = 'user' 6 | -------------------------------------------------------------------------------- /src/media/profile_pics/flower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/flower.jpg -------------------------------------------------------------------------------- /src/blog/static/blog/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/images/favicon.ico -------------------------------------------------------------------------------- /src/blog/static/blog/images/mim-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/images/mim-logo.png -------------------------------------------------------------------------------- /src/media/profile_pics/admin_kWTmkG8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/admin_kWTmkG8.jpg -------------------------------------------------------------------------------- /src/media/profile_pics/flower_9eafpwg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/flower_9eafpwg.jpg -------------------------------------------------------------------------------- /src/media/profile_pics/nature-2-26-17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/nature-2-26-17.jpg -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-Black.ttf -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-Bold.ttf -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-Light.ttf -------------------------------------------------------------------------------- /src/media/profile_pics/flower_9eafpwg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/flower_9eafpwg1.jpg -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-Medium.ttf -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-Regular.ttf -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-ExtraBold.ttf -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/Tajawal-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/blog/static/blog/fonts/Tajawal-ExtraLight.ttf -------------------------------------------------------------------------------- /src/blog/templates/blog/about.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 |

من أنا

4 | {% endblock content %} -------------------------------------------------------------------------------- /src/media/profile_pics/admin_kWTmkG8_ldMRM89.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/admin_kWTmkG8_ldMRM89.jpg -------------------------------------------------------------------------------- /src/media/profile_pics/admin_kWTmkG8_ldMRM89_urR8oOZ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aabouissa/blog-django-ar/HEAD/src/media/profile_pics/admin_kWTmkG8_ldMRM89_urR8oOZ.jpg -------------------------------------------------------------------------------- /src/user/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Profile 3 | from import_export.admin import ImportExportModelAdmin 4 | 5 | # admin.site.register(Profile) 6 | @admin.register(Profile) 7 | class ProfileImportExport(ImportExportModelAdmin): 8 | pass 9 | -------------------------------------------------------------------------------- /src/user/templates/user/logout.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | لقد تم تسجيل خروجك بنجاح 7 | تسجيل الدخول مرة أخرى 8 | 9 |
10 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/templates/blog/latest_posts.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Requirements.txt: -------------------------------------------------------------------------------- 1 | defusedxml==0.6.0 2 | diff-match-patch==20181111 3 | Django==2.2.28 4 | django-crispy-forms==1.7.2 5 | django-import-export==2.1.0 6 | et-xmlfile==1.0.1 7 | jdcal==1.4.1 8 | MarkupPy==1.14 9 | mysqlclient==1.4.6 10 | odfpy==1.4.1 11 | openpyxl==3.0.3 12 | Pillow==9.0.1 13 | pytz==2020.1 14 | PyYAML==5.4 15 | sqlparse==0.3.1 16 | tablib==2.0.0 17 | xlrd==1.2.0 18 | xlwt==1.3.0 19 | -------------------------------------------------------------------------------- /src/blog/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Post, Comment 3 | from import_export.admin import ImportExportModelAdmin 4 | 5 | # admin.site.register(Post) 6 | @admin.register(Post) 7 | class PostImportExport(ImportExportModelAdmin): 8 | pass 9 | 10 | 11 | # admin.site.register(Comment) 12 | @admin.register(Comment) 13 | class CommentImportExport(ImportExportModelAdmin): 14 | pass 15 | -------------------------------------------------------------------------------- /src/blog/templates/blog/new_post.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | تدوينة جديدة 7 |
8 | {% csrf_token %} 9 | {{form|crispy}} 10 | 11 |
12 |
13 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/templates/blog/post_update.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | تحرير التدوينة 7 |
8 | {% csrf_token %} 9 | {{form|crispy}} 10 | 11 |
12 |
13 | {% endblock content %} -------------------------------------------------------------------------------- /src/my_blog/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for my_blog project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_blog.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /src/blog/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from .models import Comment, Post 3 | 4 | 5 | class NewComment(forms.ModelForm): 6 | class Meta: 7 | model = Comment 8 | fields = ('name', 'email', 'body') 9 | 10 | 11 | class PostCreateForm(forms.ModelForm): 12 | title = forms.CharField(label='عنوان التدوينة') 13 | content = forms.CharField(label='نص التدوينة', widget=forms.Textarea) 14 | 15 | class Meta: 16 | model = Post 17 | fields = ['title', 'content'] 18 | -------------------------------------------------------------------------------- /src/blog/templatetags/post_tag.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | from blog.models import Post, Comment 3 | 4 | register = template.Library() 5 | @register.inclusion_tag('blog/latest_posts.html') 6 | def latest_posts(): 7 | context = { 8 | 'l_posts': Post.objects.all()[0:5], 9 | } 10 | return context 11 | 12 | 13 | @register.inclusion_tag('blog/latest_comments.html') 14 | def latest_comments(): 15 | context = { 16 | 'l_comments': Comment.objects.filter(active=True)[:5], 17 | } 18 | return context 19 | -------------------------------------------------------------------------------- /src/blog/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | from .views import PostCreateView, PostUpdateView, PostDeleteView 4 | 5 | urlpatterns = [ 6 | path('', views.home, name='home'), 7 | path('about/', views.about, name='about'), 8 | path('detail//', views.post_detail, name='detail'), 9 | path('new_post/', PostCreateView.as_view(), name='new_post'), 10 | path('detail//update/', PostUpdateView.as_view(), name='post-update'), 11 | path('detail//delete/', PostDeleteView.as_view(), name='post-delete'), 12 | ] 13 | -------------------------------------------------------------------------------- /src/blog/templates/blog/latest_comments.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == '__main__': 6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_blog.settings') 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /src/user/templates/user/register.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | التسجيل 7 |
8 | {% csrf_token %} 9 | {{form|crispy}} 10 | 11 |
12 |
13 | إذا كان لديك حساب من قبل فيمكنك تسجيل الدخول 14 |
15 |
16 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/templates/blog/post_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | حذف تدوينة 7 |
8 | هل أنت متأكد من حذف "{{object.title}}" ؟ 9 | {% csrf_token %} 10 | 11 | تراجع 12 |
13 |
14 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/templates/blog/pagination.html: -------------------------------------------------------------------------------- 1 |
2 | {% if page.has_next %} 3 | التالي 4 | {% else %} 5 | التالي 6 | {% endif %} 7 | 8 | صفحة {{page.number}} من {{page.paginator.num_pages}} 9 | 10 | {% if page.has_previous %} 11 | السابق 12 | {% else %} 13 | السابق 14 | {% endif %} 15 |
-------------------------------------------------------------------------------- /src/user/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | from django.contrib.auth.views import LoginView, LogoutView 4 | from django.conf.urls.static import static 5 | from django.conf import settings 6 | 7 | urlpatterns = [ 8 | path('register/', views.register, name='register'), 9 | # path('login/', LoginView.as_view(template_name='user/login.html'), name='login'), 10 | path('login/', views.login_user, name='login'), 11 | # path('logout/', LogoutView.as_view(template_name='user/logout.html'), name='logout'), 12 | path('logout/', views.logout_user, name='logout'), 13 | path('profile/', views.profile, name='profile'), 14 | path('profile_update/', views.profile_update, name='profile_update'), 15 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 16 | -------------------------------------------------------------------------------- /src/user/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2 on 2019-05-27 19:28 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Profile', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('image', models.ImageField(default='default.jpg', upload_to='profile_pics')), 22 | ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), 23 | ], 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /src/my_blog/urls.py: -------------------------------------------------------------------------------- 1 | """my_blog URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path, include 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | path('', include('blog.urls')), 22 | path('', include('user.urls')), 23 | ] 24 | -------------------------------------------------------------------------------- /src/user/templates/user/profile_update.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 | 5 |
6 | تعديل الملف الشخصي 7 |
8 | {% csrf_token %} 9 | {{user_form|crispy}} 10 | 11 |
12 | صورة الملف الشخصي * 13 | الصورة الحالية: {{user.profile.image}} 14 |
15 | 16 | 17 |
18 | 19 |
20 |
21 | {% endblock content %} -------------------------------------------------------------------------------- /src/user/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import User 3 | from django.db.models.signals import post_save 4 | from PIL import Image 5 | 6 | 7 | class Profile(models.Model): 8 | image = models.ImageField(default='default.jpg', upload_to='profile_pics') 9 | user = models.OneToOneField(User, on_delete=models.CASCADE) 10 | 11 | def __str__(self): 12 | return '{} profile.'.format(self.user.username) 13 | 14 | def save(self, *args, **kwargs): 15 | super().save(*args, **kwargs) 16 | 17 | img = Image.open(self.image.path) 18 | if img.width > 300 or img.height > 300: 19 | output_size = (300, 300) 20 | img.thumbnail(output_size) 21 | img.save(self.image.path) 22 | 23 | 24 | def create_profile(sender, **kwarg): 25 | if kwarg['created']: 26 | Profile.objects.create(user=kwarg['instance']) 27 | 28 | 29 | post_save.connect(create_profile, sender=User) 30 | -------------------------------------------------------------------------------- /src/blog/templates/blog/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% if messages %} 4 | {% for message in messages %} 5 |
6 | {{message}} 7 |
8 | {% endfor %} 9 | {% endif %} 10 | {% for post in posts %} 11 |
12 | صورة الناشر 14 | نشر في {{post.post_date|date:'d-m-Y'}} 15 |

{{post.title}}

16 |

{{post.content}}

17 |
18 | {% empty %} 19 |
20 |

لا يوجد تدوينات، إذا كان لديك حساب مسجل من قبل يمكنك تسجيل الدخول والقيام بنشر 21 | أول تدوينة في الموقع.

22 |
23 | {% endfor %} 24 | 25 | {% include 'blog/pagination.html' with page=posts %} 26 | 27 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/migrations/0003_auto_20190527_1928.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2 on 2019-05-27 19:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('blog', '0002_auto_20190402_1821'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='comment', 15 | options={'ordering': ('-comment_date',)}, 16 | ), 17 | migrations.AlterField( 18 | model_name='comment', 19 | name='body', 20 | field=models.TextField(verbose_name='التعليق'), 21 | ), 22 | migrations.AlterField( 23 | model_name='comment', 24 | name='email', 25 | field=models.EmailField(max_length=254, verbose_name='البريد الإلكتروني'), 26 | ), 27 | migrations.AlterField( 28 | model_name='comment', 29 | name='name', 30 | field=models.CharField(max_length=50, verbose_name='الاسم'), 31 | ), 32 | ] 33 | -------------------------------------------------------------------------------- /src/blog/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.7 on 2019-03-15 22:44 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | import django.utils.timezone 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | initial = True 12 | 13 | dependencies = [ 14 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 15 | ] 16 | 17 | operations = [ 18 | migrations.CreateModel( 19 | name='Post', 20 | fields=[ 21 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('title', models.CharField(max_length=100)), 23 | ('content', models.TextField()), 24 | ('post_date', models.DateTimeField(default=django.utils.timezone.now)), 25 | ('post_update', models.DateTimeField(auto_now=True)), 26 | ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), 27 | ], 28 | ), 29 | ] 30 | -------------------------------------------------------------------------------- /src/user/templates/user/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 |
4 | تسجيل الدخول 5 | {% if messages %} 6 | {% for message in messages %} 7 |
8 | {{message}} 9 |
10 | {% endfor %} 11 | {% endif %} 12 |
13 | {% csrf_token %} 14 |
15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 | 23 |
24 |
25 | إذا لم يكن لديك حساب من قبل فيمكنك التسجيل من هنا 26 |
27 |
28 | {% endblock content %} -------------------------------------------------------------------------------- /src/blog/static/blog/css/main.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Tajawal'; 3 | src: url('../fonts/Tajawal-Regular.ttf') format("truetype"), 4 | local('Tajawal'); 5 | } 6 | 7 | html, body{ 8 | direction: rtl; 9 | text-align: right; 10 | } 11 | 12 | body{ 13 | font-family: 'Tajawal', sans-serif; 14 | } 15 | 16 | .dropdown-menu .dropdown-item{ 17 | text-align: right; 18 | } 19 | 20 | .bg-secondary{ 21 | background-color: #666 !important; 22 | } 23 | 24 | .bg-light{ 25 | background-color: #EEE !important; 26 | } 27 | 28 | /* Start Sidebar */ 29 | .latest-post, .latest-comment{ 30 | padding: 0 15px; 31 | 32 | } 33 | .latest-post .latest-post-item, .latest-comment .latest-comment-item{ 34 | padding: 6px; 35 | } 36 | 37 | .latest-post li:first-child, .latest-comment li:first-child{ 38 | border-top: 0; 39 | } 40 | 41 | .latest-post li:last-child, .latest-comment li:last-child{ 42 | border-bottom: 0; 43 | padding-bottom: 0; 44 | } 45 | 46 | /* End Sidebar */ 47 | 48 | /* Start Comment */ 49 | .comment{ 50 | background-color: #f8f8f8; 51 | border: 1px dashed #CCC; 52 | } 53 | /* End Comment */ 54 | 55 | .btn-editing{ 56 | float: left; 57 | } 58 | 59 | .back-btn{ 60 | float: left; 61 | } -------------------------------------------------------------------------------- /src/blog/migrations/0002_auto_20190402_1821.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.7 on 2019-04-02 18:21 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('blog', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Comment', 16 | fields=[ 17 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('name', models.CharField(max_length=50)), 19 | ('email', models.EmailField(max_length=254)), 20 | ('body', models.TextField()), 21 | ('comment_date', models.DateTimeField(auto_now_add=True)), 22 | ('active', models.BooleanField(default=False)), 23 | ], 24 | ), 25 | migrations.AlterModelOptions( 26 | name='post', 27 | options={'ordering': ('-post_date',)}, 28 | ), 29 | migrations.AddField( 30 | model_name='comment', 31 | name='post', 32 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='blog.Post'), 33 | ), 34 | ] 35 | -------------------------------------------------------------------------------- /src/blog/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import User 3 | from django.utils import timezone 4 | from django.urls import reverse 5 | 6 | 7 | class Post(models.Model): 8 | title = models.CharField(max_length=100) 9 | content = models.TextField() 10 | post_date = models.DateTimeField(default=timezone.now) 11 | post_update = models.DateTimeField(auto_now=True) 12 | author = models.ForeignKey(User, on_delete=models.CASCADE) 13 | 14 | def __str__(self): 15 | return self.title 16 | 17 | def get_absolute_url(self): 18 | # return '/detail/{}'.format(self.pk) 19 | return reverse('detail', args=[self.pk]) 20 | 21 | class Meta: 22 | ordering = ('-post_date', ) 23 | 24 | 25 | class Comment(models.Model): 26 | name = models.CharField(max_length=50, verbose_name='الاسم') 27 | email = models.EmailField(verbose_name='البريد الإلكتروني') 28 | body = models.TextField(verbose_name='التعليق') 29 | comment_date = models.DateTimeField(auto_now_add=True) 30 | active = models.BooleanField(default=False) 31 | post = models.ForeignKey( 32 | Post, on_delete=models.CASCADE, related_name='comments') 33 | 34 | def __str__(self): 35 | return 'علق {} على {}.'.format(self.name, self.post) 36 | 37 | class Meta: 38 | ordering = ('-comment_date',) 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Blog django in arabic 2 | 3 | Project from scratch for arab web developers who search for a full project using django consept. 4 | 5 | # Libraries and framework used: 6 |
    7 |
  • Django 2.2
  • 8 |
  • Bootstrap 4.3.x
  • 9 |
  • jQuery 3.3.1
  • 10 |
  • Font awesome
  • 11 |
  • Pillow
  • 12 |
  • Crispy form
  • 13 |
14 | 15 | 16 |

Steps to download project:

17 |

1- Download the full project from this link:

18 | https://github.com/aabouissa/blog-django-ar/archive/master.zip 19 | 20 | or 21 | 22 | you can clone the repository using this code: 23 | git clone https://github.com/aabouissa/blog-django-ar.git 24 | 25 | 26 |

2- Create your virtual environment:

27 | - If you use Linux or Mac OSX, use this code: 28 | python3 -m virtualenv . 29 |
30 | - If you use Windows, use this code: 31 | virtualenv . 32 | 33 |

3- Activate your virtual enviroment:

34 | - Users of Linux and Mac OSX: 35 | source bin/activate 36 |
37 | - Users of Windows: 38 | Scripts bin\activate 39 | 40 | 41 |

4- Installation of packages via Requirements.txt file:

42 | pip install -r Requirements.txt 43 | 44 |

5- Change directory using this code:

45 | cd src 46 | 47 |

6- Run your developement server:

48 | python manage.py runserver 49 | 50 | -------------------------------------------------------------------------------- /src/blog/templates/blog/detail.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | {% load crispy_forms_tags %} 4 |
5 | صورة الناشر 7 | نشر في {{post.post_date|date:'d-m-Y'}} 8 | 9 | {% if post.author == user %} 10 |
11 | تحرير 12 | حذف 13 |
14 | {% endif %} 15 |

{{post.title}}

16 |

{{post.content}}

17 |
18 | 19 | 20 |

التعليقات ({{comments.count}})

21 | {% for comment in comments %} 22 |
    23 |
    ( {{comment.name}} ) {{comment.comment_date|date:'d-m-Y'}}
    25 | {{comment.body}} 26 |
27 | {% empty %} 28 |
لا يوجد تعليقات
29 | {% endfor %} 30 | 31 | 32 |

إضافة تعلق جديد

33 |
34 |
35 | {% csrf_token %} 36 | {{comment_form|crispy}} 37 | 38 |
39 |
40 | {% endblock content %} -------------------------------------------------------------------------------- /src/user/templates/user/profile.html: -------------------------------------------------------------------------------- 1 | {% extends 'blog/base.html' %} 2 | {% block content %} 3 | 4 | {% if messages %} 5 | {% for message in messages %} 6 |
7 | {{message}} 8 |
9 | {% endfor %} 10 | {% endif %} 11 | 12 |
13 |
14 |
15 | {{user.username}} 17 |
18 | تحرير 20 |
21 |
22 |
23 |

{{user.username}}

24 |

الاسم: {{user.first_name}} 25 | {{user.last_name}}

26 |

البريد الإلكتروني: {{user.email}}

27 |
28 |
29 |
30 | 31 |
32 |
33 |

عدد التدوينات التي دونتها

34 |

35 | {{posts.count}} 36 |

37 | 38 |

تدويناتي

39 | {% for post in post_list %} 40 | 43 | {% empty %} 44 |

لا يوجد تدوينات

45 | {% endfor %} 46 | 47 | {% include 'blog/pagination.html' with page=post_list %} 48 |
49 |
50 | {% endblock content %} -------------------------------------------------------------------------------- /src/user/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.contrib.auth.models import User 3 | from .models import Profile 4 | 5 | 6 | class UserCreationForm(forms.ModelForm): 7 | username = forms.CharField(label='اسم المستخدم', max_length=30, 8 | help_text='اسم المستخدم يجب ألا يحتوي على مسافات.') 9 | email = forms.EmailField(label='البريد الإلكتروني') 10 | first_name = forms.CharField(label='الاسم الأول') 11 | last_name = forms.CharField(label='الاسم الأخير') 12 | password1 = forms.CharField( 13 | label='كلمة المرور', widget=forms.PasswordInput(), min_length=8) 14 | password2 = forms.CharField( 15 | label='تأكيد كلمة المرور', widget=forms.PasswordInput(), min_length=8) 16 | 17 | class Meta: 18 | model = User 19 | fields = ('username', 'email', 'first_name', 20 | 'last_name', 'password1', 'password2') 21 | 22 | def clean_password2(self): 23 | cd = self.cleaned_data 24 | if cd['password1'] != cd['password2']: 25 | raise forms.ValidationError('كلمة المرور غير متطابقة') 26 | return cd['password2'] 27 | 28 | def clean_username(self): 29 | cd = self.cleaned_data 30 | if User.objects.filter(username=cd['username']).exists(): 31 | raise forms.ValidationError('يوجد مستخدم مسجل بهذا الاسم.') 32 | return cd['username'] 33 | 34 | 35 | class LoginForm(forms.ModelForm): 36 | username = forms.CharField(label='اسم المستخدم') 37 | password = forms.CharField( 38 | label='كلمة المرور', widget=forms.PasswordInput()) 39 | 40 | class Meta: 41 | model = User 42 | fields = ('username', 'password') 43 | 44 | 45 | class UserUpdateForm(forms.ModelForm): 46 | first_name = forms.CharField(label='الاسم الأول') 47 | last_name = forms.CharField(label='الاسم الأخير') 48 | email = forms.EmailField(label='البريد الإلكتروني') 49 | 50 | class Meta: 51 | model = User 52 | fields = ('first_name', 'last_name', 'email') 53 | 54 | 55 | class ProfileUpdateForm(forms.ModelForm): 56 | class Meta: 57 | model = Profile 58 | fields = ('image',) 59 | -------------------------------------------------------------------------------- /src/blog/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, get_object_or_404, redirect 2 | from .models import Post, Comment 3 | from .forms import NewComment, PostCreateForm 4 | from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 5 | from django.views.generic import CreateView, UpdateView, DeleteView 6 | from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin 7 | 8 | 9 | def home(request): 10 | posts = Post.objects.all() 11 | paginator = Paginator(posts, 5) 12 | page = request.GET.get('page') 13 | try: 14 | posts = paginator.page(page) 15 | except PageNotAnInteger: 16 | posts = paginator.page(1) 17 | except EmptyPage: 18 | posts = paginator.page(paginator.num_page) 19 | context = { 20 | 'title': 'الصفحة الرئيسية', 21 | 'posts': posts, 22 | 'page': page, 23 | } 24 | return render(request, 'blog/index.html', context) 25 | 26 | 27 | def about(request): 28 | return render(request, 'blog/about.html', {'title': 'من أنا'}) 29 | 30 | 31 | def post_detail(request, post_id): 32 | post = get_object_or_404(Post, pk=post_id) 33 | comments = post.comments.filter(active=True) 34 | 35 | # check before save data from comment form 36 | if request.method == 'POST': 37 | comment_form = NewComment(data=request.POST) 38 | if comment_form.is_valid(): 39 | new_comment = comment_form.save(commit=False) 40 | new_comment.post = post 41 | new_comment.save() 42 | # Deprecated line to prevent form to post data when refresh a page 43 | # comment_form = NewComment() 44 | return redirect('detail', post_id) 45 | else: 46 | comment_form = NewComment() 47 | 48 | context = { 49 | 'title': post, 50 | 'post': post, 51 | 'comments': comments, 52 | 'comment_form': comment_form, 53 | } 54 | 55 | return render(request, 'blog/detail.html', context) 56 | 57 | 58 | class PostCreateView(LoginRequiredMixin, CreateView): 59 | model = Post 60 | # fields = ['title', 'content'] 61 | template_name = 'blog/new_post.html' 62 | form_class = PostCreateForm 63 | 64 | def form_valid(self, form): 65 | form.instance.author = self.request.user 66 | return super().form_valid(form) 67 | 68 | 69 | class PostUpdateView(UserPassesTestMixin, LoginRequiredMixin, UpdateView): 70 | model = Post 71 | template_name = 'blog/post_update.html' 72 | form_class = PostCreateForm 73 | 74 | def form_valid(self, form): 75 | form.instance.author = self.request.user 76 | return super().form_valid(form) 77 | 78 | def test_func(self): 79 | post = self.get_object() 80 | if self.request.user == post.author: 81 | return True 82 | else: 83 | return False 84 | 85 | 86 | class PostDeleteView(UserPassesTestMixin, LoginRequiredMixin, DeleteView): 87 | model = Post 88 | success_url = '/' 89 | 90 | def test_func(self): 91 | post = self.get_object() 92 | if self.request.user == post.author: 93 | return True 94 | return False 95 | -------------------------------------------------------------------------------- /src/user/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, redirect 2 | from .forms import UserCreationForm, LoginForm, UserUpdateForm, ProfileUpdateForm 3 | from django.contrib import messages 4 | from django.contrib.auth import login, authenticate, logout 5 | from blog.models import Post 6 | from django.contrib.auth.decorators import login_required 7 | from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage 8 | 9 | 10 | def register(request): 11 | if request.method == 'POST': 12 | form = UserCreationForm(request.POST) 13 | if form.is_valid(): 14 | new_user = form.save(commit=False) 15 | #username = form.cleaned_data['username'] 16 | new_user.set_password(form.cleaned_data['password1']) 17 | new_user.save() 18 | # messages.success( 19 | # request, 'تهانينا {} لقد تمت عملية التسجيل بنجاح.'.format(username)) 20 | messages.success( 21 | request, f'تهانينا {new_user} لقد تمت عملية التسجيل بنجاح.') 22 | return redirect('login') 23 | else: 24 | form = UserCreationForm() 25 | return render(request, 'user/register.html', { 26 | 'title': 'التسجيل', 27 | 'form': form, 28 | }) 29 | 30 | 31 | def login_user(request): 32 | if request.method == 'POST': 33 | username = request.POST['username'] 34 | password = request.POST['password'] 35 | user = authenticate(request, username=username, password=password) 36 | if user is not None: 37 | login(request, user) 38 | return redirect('profile') 39 | else: 40 | messages.warning( 41 | request, 'هناك خطأ في اسم المستخدم أو كلمة المرور.') 42 | 43 | return render(request, 'user/login.html', { 44 | 'title': 'تسجيل الدخول', 45 | }) 46 | 47 | 48 | def logout_user(request): 49 | logout(request) 50 | return render(request, 'user/logout.html', { 51 | 'title': 'تسجيل الخروج' 52 | }) 53 | 54 | 55 | @login_required(login_url='login') 56 | def profile(request): 57 | posts = Post.objects.filter(author=request.user) 58 | post_list = Post.objects.filter(author=request.user) 59 | paginator = Paginator(post_list, 10) 60 | page = request.GET.get('page') 61 | try: 62 | post_list = paginator.page(page) 63 | except PageNotAnInteger: 64 | post_list = paginator.page(1) 65 | except EmptyPage: 66 | post_list = paginator.page(paginator.num_page) 67 | return render(request, 'user/profile.html', { 68 | 'title': 'الملف الشخصي', 69 | 'posts': posts, 70 | 'page': page, 71 | 'post_list': post_list, 72 | }) 73 | 74 | 75 | @login_required(login_url='login') 76 | def profile_update(request): 77 | if request.method == 'POST': 78 | user_form = UserUpdateForm(request.POST, instance=request.user) 79 | profile_form = ProfileUpdateForm( 80 | request.POST, request.FILES, instance=request.user.profile) 81 | if user_form.is_valid and profile_form.is_valid: 82 | user_form.save() 83 | profile_form.save() 84 | messages.success( 85 | request, 'تم تحديث الملف الشخصي.') 86 | return redirect('profile') 87 | else: 88 | user_form = UserUpdateForm(instance=request.user) 89 | profile_form = ProfileUpdateForm(instance=request.user.profile) 90 | 91 | context = { 92 | 'title': 'تعديل الملف الشخصي', 93 | 'user_form': user_form, 94 | 'profile_form': profile_form, 95 | } 96 | 97 | return render(request, 'user/profile_update.html', context) 98 | -------------------------------------------------------------------------------- /src/my_blog/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for my_blog project. 3 | 4 | Generated by 'django-admin startproject' using Django 2.1.7. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/2.1/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '&g(sa$3c%ls#ru9l$k5&eu-b_%+(ptn87qpu=7ucll5kn!5$ns' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'blog.apps.BlogConfig', 41 | 'user.apps.UserConfig', 42 | 'crispy_forms', 43 | 'import_export', 44 | ] 45 | 46 | MIDDLEWARE = [ 47 | 'django.middleware.security.SecurityMiddleware', 48 | 'django.contrib.sessions.middleware.SessionMiddleware', 49 | 'django.middleware.common.CommonMiddleware', 50 | 'django.middleware.csrf.CsrfViewMiddleware', 51 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 52 | 'django.contrib.messages.middleware.MessageMiddleware', 53 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 54 | ] 55 | 56 | ROOT_URLCONF = 'my_blog.urls' 57 | 58 | TEMPLATES = [ 59 | { 60 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 61 | 'DIRS': [], 62 | 'APP_DIRS': True, 63 | 'OPTIONS': { 64 | 'context_processors': [ 65 | 'django.template.context_processors.debug', 66 | 'django.template.context_processors.request', 67 | 'django.contrib.auth.context_processors.auth', 68 | 'django.contrib.messages.context_processors.messages', 69 | ], 70 | }, 71 | }, 72 | ] 73 | 74 | WSGI_APPLICATION = 'my_blog.wsgi.application' 75 | 76 | 77 | # Database 78 | # https://docs.djangoproject.com/en/2.1/ref/settings/#databases 79 | 80 | DATABASES = { 81 | 'default': { 82 | 'ENGINE': 'django.db.backends.mysql', 83 | 'NAME': 'blog_ar', 84 | 'USER': 'root', 85 | 'PASSWORD': '', 86 | 'HOST': '127.0.0.1', 87 | 'PORT': '', 88 | } 89 | } 90 | 91 | 92 | # Password validation 93 | # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators 94 | 95 | AUTH_PASSWORD_VALIDATORS = [ 96 | { 97 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 98 | }, 99 | { 100 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 101 | }, 102 | { 103 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 104 | }, 105 | { 106 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 107 | }, 108 | ] 109 | 110 | 111 | # Internationalization 112 | # https://docs.djangoproject.com/en/2.1/topics/i18n/ 113 | 114 | LANGUAGE_CODE = 'en-us' 115 | 116 | TIME_ZONE = 'UTC' 117 | 118 | USE_I18N = True 119 | 120 | USE_L10N = True 121 | 122 | USE_TZ = True 123 | 124 | 125 | # Static files (CSS, JavaScript, Images) 126 | # https://docs.djangoproject.com/en/2.1/howto/static-files/ 127 | 128 | STATIC_URL = '/static/' 129 | 130 | # If you want to make Static folder for all project you can use this code. 131 | # STATICFILES_DIRS = [ 132 | # os.path.join(BASE_DIR, "static"), 133 | # '/home/abouissa/Desktop/myprojects/2019/Blogger/src/static', 134 | # ] 135 | CRISPY_TEMPLATE_PACK = 'bootstrap4' 136 | LOGIN_REDIRECT_URL = 'home' 137 | LOGIN_URL = 'login' 138 | 139 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 140 | MEDIA_URL = '/media/' 141 | -------------------------------------------------------------------------------- /src/blog/static/blog/fonts/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2018 Boutros International. (http://www.boutrosfonts.com) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /share/man/man1/odfoutline.1: -------------------------------------------------------------------------------- 1 | .\" Title: odfoutline 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODFOUTLINE" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odfoutline \- Show outline of OpenDocument 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodfoutline\fR\ 'u 174 | \fBodfoutline\fR \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | odfoutline is a simple program that will show the headings in the file and the level the heading is\&. 179 | .PP 180 | 181 | \(lqPath\(rq 182 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 183 | .SH "Example" 184 | .sp 185 | .if n \{\ 186 | .RS 4 187 | .\} 188 | .fam C 189 | .ps -1 190 | .nf 191 | .if t \{\ 192 | .sp -1 193 | .\} 194 | .BB lightgray adjust-for-leading-newline 195 | .sp -1 196 | 197 | odfoutline odf\-file 198 | .EB lightgray adjust-for-leading-newline 199 | .if t \{\ 200 | .sp 1 201 | .\} 202 | .fi 203 | .fam 204 | .ps +1 205 | .if n \{\ 206 | .RE 207 | .\} 208 | .SH "Author" 209 | .PP 210 | \fBS\(/oren Roug\fR 211 | .RS 4 212 | Original author 213 | .RE 214 | -------------------------------------------------------------------------------- /share/man/man1/odf2xhtml.1: -------------------------------------------------------------------------------- 1 | .\" Title: odf2xhtml 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 01/04/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODF2XHTML" "1" "01/04/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odf2xhtml \- Convert ODF to HTML 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodf2xhtml\fR\ 'u 174 | \fBodf2xhtml\fR [\-e] \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | \fBodf2xhtml\fR 179 | is a program that will create a webpage (\&.html) from the input file and will write the webpage to stdout\&. 180 | .PP 181 | "Path" is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 182 | .SH "Options" 183 | .PP 184 | \-p, \-\-plain 185 | .RS 4 186 | The \-p flag will generate HTML without CSS\&. 187 | .RE 188 | .SH "Example" 189 | .sp 190 | .if n \{\ 191 | .RS 4 192 | .\} 193 | .fam C 194 | .ps -1 195 | .nf 196 | .if t \{\ 197 | .sp -1 198 | .\} 199 | .BB lightgray adjust-for-leading-newline 200 | .sp -1 201 | 202 | odf2xhtml odf\-file 203 | .EB lightgray adjust-for-leading-newline 204 | .if t \{\ 205 | .sp 1 206 | .\} 207 | .fi 208 | .fam 209 | .ps +1 210 | .if n \{\ 211 | .RE 212 | .\} 213 | .SH "See Also" 214 | .PP 215 | \fBodf2mht\fR(1) 216 | .SH "Author" 217 | .PP 218 | \fBS\(/oren Roug\fR 219 | .RS 4 220 | Original author 221 | .RE 222 | -------------------------------------------------------------------------------- /share/man/man1/odflint.1: -------------------------------------------------------------------------------- 1 | .\" Title: odflint 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODFLINT" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odflint \- Check ODF file for problems 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodflint\fR\ 'u 174 | \fBodflint\fR \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | \fBodflint\fR 179 | is a program that will check an ODF file and give warning if it finds something suspect\&. It is not able to make a full validation due to the complexity of the schema\&. 180 | .PP 181 | 182 | \(lqPath\(rq 183 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 184 | .SH "Example" 185 | .sp 186 | .if n \{\ 187 | .RS 4 188 | .\} 189 | .fam C 190 | .ps -1 191 | .nf 192 | .if t \{\ 193 | .sp -1 194 | .\} 195 | .BB lightgray adjust-for-leading-newline 196 | .sp -1 197 | 198 | odflint odf\-file 199 | .EB lightgray adjust-for-leading-newline 200 | .if t \{\ 201 | .sp 1 202 | .\} 203 | .fi 204 | .fam 205 | .ps +1 206 | .if n \{\ 207 | .RE 208 | .\} 209 | .SH "Bugs" 210 | .PP 211 | Validates all versions of ODF as if they are version 1\&.1\&. You\'ll therefore get some false positives if you check files that aren\'t generated by odfpy scripts\&. 212 | .SH "Author" 213 | .PP 214 | \fBS\(/oren Roug\fR 215 | .RS 4 216 | Original author 217 | .RE 218 | -------------------------------------------------------------------------------- /share/man/man1/mailodf.1: -------------------------------------------------------------------------------- 1 | .\" Title: mailodf 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "MAILODF" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | mailodf \- Email ODF file as HTML archive 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBmailodf\fR\ 'u 174 | \fBmailodf\fR [\-f\ \fIfrom\fR] [\-s\ \fIsubject\fR] \fIinputfile\fR \fIrecipients\fR... 175 | .fam 176 | .SH "Description" 177 | .PP 178 | mailodf is a program that will create a MIME\-encapsulated web archive and then sends it as an email\&. Most email programs that understand HTML understands this format\&. 179 | .PP 180 | 181 | \(lqInputfile\(rq 182 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 183 | .SH "References" 184 | .RS 4 185 | HTTRACK (http://www\&.httrack\&.com/) can create such archives with the \-%M option\&. 186 | .RE 187 | .RS 4 188 | http://en\&.wikipedia\&.org/wiki/MHTML 189 | .RE 190 | .RS 4 191 | http://www\&.dsv\&.su\&.se/~jpalme/ietf/mhtml\&.html 192 | .RE 193 | .RS 4 194 | http://users\&.otenet\&.gr/~geosp/kmhtconvert/ 195 | .RE 196 | .RS 4 197 | http://www\&.faqs\&.org/rfcs/rfc2557\&.html 198 | .RE 199 | .SH "Example" 200 | .sp 201 | .if n \{\ 202 | .RS 4 203 | .\} 204 | .fam C 205 | .ps -1 206 | .nf 207 | .if t \{\ 208 | .sp -1 209 | .\} 210 | .BB lightgray adjust-for-leading-newline 211 | .sp -1 212 | 213 | mailodf \-f lars\&.oppermann@sun\&.com \-s "F\&.Y\&.I" odf\-file 214 | .EB lightgray adjust-for-leading-newline 215 | .if t \{\ 216 | .sp 1 217 | .\} 218 | .fi 219 | .fam 220 | .ps +1 221 | .if n \{\ 222 | .RE 223 | .\} 224 | .SH "See Also" 225 | .PP 226 | odf2mht 227 | .SH "Author" 228 | .PP 229 | \fBS\(/oren Roug\fR 230 | .RS 4 231 | Original author 232 | .RE 233 | -------------------------------------------------------------------------------- /share/man/man1/odf2xml.1: -------------------------------------------------------------------------------- 1 | .\" Title: odf2xml 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 01/04/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODF2XML" "1" "01/04/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odf2xml \- Create OpenDocument XML file from OD? package 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodf2xml\fR\ 'u 174 | \fBodf2xml\fR [\-e] [\-o\ \fIoutputfile\fR] [\fIinputfile\fR] 175 | .fam 176 | .SH "Description" 177 | .PP 178 | OpenDocument can be a complete office document in a single XML file\&. The script will take an OpenDocument and create an XML file This is mainly useful XML processors such as XSL transformation\&. 179 | .PP 180 | .PP 181 | "Inputfile" is assumed to be an OpenDocument file\&. If there is no inputfile, the program will read from standard input\&. 182 | .SH "Options" 183 | .PP 184 | \-e 185 | .RS 4 186 | Normally, images that are stored in the archive in the Pictures folder are ignored\&. Using the \-e flag will 187 | \fIembed\fR 188 | the images in the XML as base64\&. 189 | .RE 190 | .PP 191 | \-o \fIoutputfile\fR 192 | .RS 4 193 | If output file is not specified output will be to standard out\&. 194 | .RE 195 | .SH "Example" 196 | .sp 197 | .if n \{\ 198 | .RS 4 199 | .\} 200 | .fam C 201 | .ps -1 202 | .nf 203 | .if t \{\ 204 | .sp -1 205 | .\} 206 | .BB lightgray adjust-for-leading-newline 207 | .sp -1 208 | 209 | odf2xml \-o file\&.xml testdocument\&.odt 210 | .EB lightgray adjust-for-leading-newline 211 | .if t \{\ 212 | .sp 1 213 | .\} 214 | .fi 215 | .fam 216 | .ps +1 217 | .if n \{\ 218 | .RE 219 | .\} 220 | .SH "See Also" 221 | .PP 222 | \fBxml2odf\fR(1) 223 | .SH "Bugs" 224 | .PP 225 | Doesn\'t handle external data \-\- images and such\&. 226 | .SH "Author" 227 | .PP 228 | \fBS\(/oren Roug\fR 229 | .RS 4 230 | Original author 231 | .RE 232 | -------------------------------------------------------------------------------- /share/man/man1/odf2mht.1: -------------------------------------------------------------------------------- 1 | .\" Title: odf2mht 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODF2MHT" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odf2mht \- Convert ODF to HTML archive 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodf2mht\fR\ 'u 174 | \fBodf2mht\fR \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | \fBOdf2mht\fR 179 | is a program that will create a MIME\-encapsulated web archive (\&.mht) format where images are preserved\&. The file can be read by Internet Explorer, MS\-Word and many email programs such as MS\-Outlook\&. It will write the web archive to stdout\&. 180 | .PP 181 | 182 | \(lqPath\(rq 183 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 184 | .SH "References" 185 | .RS 4 186 | HTTRACK (http://www\&.httrack\&.com/) can create such archives with the \-%M option\&. 187 | .RE 188 | .RS 4 189 | http://en\&.wikipedia\&.org/wiki/MHTML 190 | .RE 191 | .RS 4 192 | http://www\&.dsv\&.su\&.se/~jpalme/ietf/mhtml\&.html 193 | .RE 194 | .RS 4 195 | http://users\&.otenet\&.gr/~geosp/kmhtconvert/ 196 | .RE 197 | .RS 4 198 | http://www\&.faqs\&.org/rfcs/rfc2557\&.html 199 | .RE 200 | .SH "Example" 201 | .sp 202 | .if n \{\ 203 | .RS 4 204 | .\} 205 | .fam C 206 | .ps -1 207 | .nf 208 | .if t \{\ 209 | .sp -1 210 | .\} 211 | .BB lightgray adjust-for-leading-newline 212 | .sp -1 213 | 214 | odf2mht example\&.odt >example\&.mht 215 | .EB lightgray adjust-for-leading-newline 216 | .if t \{\ 217 | .sp 1 218 | .\} 219 | .fi 220 | .fam 221 | .ps +1 222 | .if n \{\ 223 | .RE 224 | .\} 225 | .SH "Bugs" 226 | .PP 227 | IE6 seems to have problems with large MHT files\&. 228 | .SH "See Also" 229 | .PP 230 | 231 | \fBodftools\fR(1), 232 | \fBodf2war\fR(1), 233 | \fBmailodf\fR(1) 234 | .SH "Author" 235 | .PP 236 | \fBS\(/oren Roug\fR 237 | .RS 4 238 | Original author 239 | .RE 240 | -------------------------------------------------------------------------------- /share/man/man1/odfimgimport.1: -------------------------------------------------------------------------------- 1 | .\" Title: odfimgimport 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 01/04/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODFIMGIMPORT" "1" "01/04/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odfimgimport \- Import external images 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodfimgimport\fR\ 'u 174 | \fBodfimgimport\fR [\-q] [\-o\ \fIoutputfile\fR] [\fIinputfile\fR] 175 | .fam 176 | .SH "Description" 177 | .PP 178 | If you copy and paste html from your webbrowser to your word processor, the pictures in the pasted text will still load the images from the Internet\&. This script will import all images into the OpenDocument file\&. 179 | .PP 180 | If you don\'t provide an input file, the program will read from stdin\&. If the program reads from stdin, it might not know how to resolve relative filenames\&. If you don\'t provide an output file, the program will import the pictures into the input file\&. 181 | .SH "Options" 182 | .PP 183 | \-q 184 | .RS 4 185 | If there are images that can\'t be imported, odfimgimport will write how many has failed\&. The \-q flag will prevent that\&. 186 | .RE 187 | .PP 188 | \-v 189 | .RS 4 190 | Verbose: Prints the URL of every image it tries to import and the result\&. 191 | .RE 192 | .PP 193 | \-o \fIoutputfile\fR 194 | .RS 4 195 | The file to save the output to\&. "\-" is stdout\&. Defaults to the input file\&. 196 | .RE 197 | .SH "Example" 198 | .sp 199 | .if n \{\ 200 | .RS 4 201 | .\} 202 | .fam C 203 | .ps -1 204 | .nf 205 | .if t \{\ 206 | .sp -1 207 | .\} 208 | .BB lightgray adjust-for-leading-newline 209 | .sp -1 210 | 211 | odfimgimport \-v \-o newfile\&.odt oldfile\&.odt 212 | .EB lightgray adjust-for-leading-newline 213 | .if t \{\ 214 | .sp 1 215 | .\} 216 | .fi 217 | .fam 218 | .ps +1 219 | .if n \{\ 220 | .RE 221 | .\} 222 | .SH "Author" 223 | .PP 224 | \fBS\(/oren Roug\fR 225 | .RS 4 226 | Original author 227 | .RE 228 | -------------------------------------------------------------------------------- /share/man/man1/odfuserfield.1: -------------------------------------------------------------------------------- 1 | .\" Title: odfuserfield 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODFUSERFIELD" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odfuserfield \- List or change the user\-field declarations in an ODF file 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodfuserfield\fR\ 'u 174 | \fBodfuserfield\fR [\-l] [\-L] [\-x\ \fIfield\fR...] [\-X\ \fIfield\fR...] [\-s\ \fIfield:value\fR...] [\-o\ \fIpath\fR] \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | 179 | \fBOdfuserfield\fR 180 | is a program that will list or change the user variable declarations in an OpenDocument file\&. There are two kinds of variables in OpenDocument\&. Simple variables can take different values at different positions, throughout a document\&. User variables have the same value throughout a document\&. Due to the latter\'s global nature it is safe to change them with an external application\&. 181 | .PP 182 | Use 183 | \fBodfuserfield\fR 184 | to fill out form letters before printing or giving to the user\&. 185 | .PP 186 | 187 | \(lqPath\(rq 188 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 189 | .SH "Options" 190 | .PP 191 | \-l 192 | .RS 4 193 | List (extract) all known user\-fields\&. 194 | .RE 195 | .PP 196 | \-L 197 | .RS 4 198 | List (extract) all known user\-fields with type and value\&. 199 | .RE 200 | .PP 201 | \-x \fIfield\fR 202 | .RS 4 203 | Extract the contents of this field from the file\&. 204 | .RE 205 | .PP 206 | \-X \fIfield\fR 207 | .RS 4 208 | Same as \-x, but also preserves/includes the field name and type\&. 209 | .RE 210 | .PP 211 | \-s \fIfield:value\fR 212 | .RS 4 213 | Set the value of an existing user field\&. The field type will be the same\&. 214 | .RE 215 | .PP 216 | \-o \fIpath\fR 217 | .RS 4 218 | Filename to write modified ODT file to\&. If no 219 | \fB\-o\fR 220 | option is provided, the ODT file will be written to stdout\&. 221 | .RE 222 | .SH "Example" 223 | .sp 224 | .if n \{\ 225 | .RS 4 226 | .\} 227 | .fam C 228 | .ps -1 229 | .nf 230 | .if t \{\ 231 | .sp -1 232 | .\} 233 | .BB lightgray adjust-for-leading-newline 234 | .sp -1 235 | 236 | odfuserfield \-L odf\-file 237 | .EB lightgray adjust-for-leading-newline 238 | .if t \{\ 239 | .sp 1 240 | .\} 241 | .fi 242 | .fam 243 | .ps +1 244 | .if n \{\ 245 | .RE 246 | .\} 247 | .SH "See Also" 248 | .PP 249 | 250 | \fBformail\fR(1), 251 | \fBid3tag\fR(1) 252 | .SH "Todo" 253 | .PP 254 | Implement formulas\&. See OpenDocument v1\&.0 specification section 6\&.3\&.5\&. This requires a different syntax for \-s arguments\&. 255 | .SH "Authors" 256 | .PP 257 | \fBS\(/oren Roug\fR 258 | .RS 4 259 | Original author 260 | .RE 261 | .PP 262 | \fBMichael Howitz\fR 263 | .br 264 | gocept gmbh & co\&. kg 265 | .RS 4 266 | Refactoring 267 | .RE 268 | -------------------------------------------------------------------------------- /share/man/man1/xml2odf.1: -------------------------------------------------------------------------------- 1 | .\" Title: xml2odf 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "XML2ODF" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | xml2odf \- Create ODF package from OpenDocument in XML form 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBxml2odf\fR\ 'u 174 | \fBxml2odf\fR [\-o\ \fIoutputfile\fR] [\-s] [\fIinputfile\fR] 175 | .fam 176 | .SH "Description" 177 | .PP 178 | OpenDocument can be a complete office document in a single XML file\&. The script will take such a document and create a package\&. This is mainly useful as a postprocesser of a program producing XML, such as a stylesheet\&. 179 | .PP 180 | 181 | \(lqInputfile\(rq 182 | is assumed to be an OpenDocument file in XML form\&. If there is no inputfile, the program will read from standard input\&. The flag \-s adds correct suffix to the filename according to what mime type is found in the XML file, in cause you don\'t know already what document type you are packaging\&. 183 | .PP 184 | If output file is not specified output will be to standard out\&. 185 | .PP 186 | Section 2\&.1\&.1 of 187 | Open Document Format for Office Applications 188 | says that the [content\&.xml] file contains the document content, along with the 189 | \fIautomatic styles\fR 190 | needed for the document content\&. The [styles\&.xml] file contains all the named styles of a document, along with the 191 | \fIautomatic styles\fR 192 | needed for the named styles\&. The application doesn\'t know which automatic style is needed for what, so it puts the same set of automatic styles into both files\&. 193 | .PP 194 | One could assume that the inverse operation would be easier, but OpenOffice\&.org is quite happy to use the same names for two different automatic styles\&. For instance, a style used inside can have the same name as one used inside but be a different paragraph style\&. This is reported as bug #90494 (http://www\&.openoffice\&.org/issues/show_bug\&.cgi?id=90494) 195 | .SH "Example" 196 | .sp 197 | .if n \{\ 198 | .RS 4 199 | .\} 200 | .fam C 201 | .ps -1 202 | .nf 203 | .if t \{\ 204 | .sp -1 205 | .\} 206 | .BB lightgray adjust-for-leading-newline 207 | .sp -1 208 | 209 | xml2odf \-o testdocument \-s xml\-file 210 | .EB lightgray adjust-for-leading-newline 211 | .if t \{\ 212 | .sp 1 213 | .\} 214 | .fi 215 | .fam 216 | .ps +1 217 | .if n \{\ 218 | .RE 219 | .\} 220 | .SH "See Also" 221 | .PP 222 | 223 | \fBodftools\fR(1), 224 | \fBodf2xml\fR(1) 225 | .SH "Bugs" 226 | .PP 227 | Doesn\'t handle external data \-\- images and such\&. 228 | .PP 229 | The library used for the parsing of XML expands empty elements from to \&. It should not have an effect on the document parsing\&. 230 | .SH "Author" 231 | .PP 232 | \fBS\(/oren Roug\fR 233 | .RS 4 234 | Original author 235 | .RE 236 | -------------------------------------------------------------------------------- /share/man/man1/csv2ods.1: -------------------------------------------------------------------------------- 1 | .\" Title: csv2ods 2 | .\" Author: Agustin Henze 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 01/04/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "CSV2ODS" "1" "01/04/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | csv2ods \- Create OpenDocument spreadsheet from comma separated values 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBcsv2ods\fR\ 'u 174 | \fBcsv2ods\fR \-i\ \fIfile\&.csv\fR \-o\ \fIfile\&.ods\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | This program reads a file in CSV format \- table of columns delimited by commas, tabs or any other character\&. It then creates a spreadsheet\&. If a value looks like a number the cell is formatted as a number as well\&. 179 | .SH "Options" 180 | .PP 181 | \-\-version 182 | .RS 4 183 | Show program\'s version number and exit 184 | .RE 185 | .PP 186 | \-h, \-\-help 187 | .RS 4 188 | Show help message and exit 189 | .RE 190 | .PP 191 | \-i \fIINPUT\fR, \-\-input=\fIINPUT\fR 192 | .RS 4 193 | File input in csv\&. 194 | .RE 195 | .PP 196 | \-o \fIOUTPUT\fR, \-\-output=\fIOUTPUT\fR 197 | .RS 4 198 | File output in ods\&. 199 | .RE 200 | .PP 201 | \-d \fIDELIMITER\fR, \-\-delimiter=\fIDELIMITER\fR 202 | .RS 4 203 | Specifies a one\-character string to use as the field separator\&. It defaults to ","\&. 204 | .RE 205 | .PP 206 | \-c \fIENCODING\fR, \-\-encoding=\fIENCODING\fR 207 | .RS 4 208 | Specifies the encoding the file csv\&. It defaults to utf\-8\&. 209 | .RE 210 | .PP 211 | \-t \fITABLENAME\fR, \-\-table=\fITABLENAME\fR 212 | .RS 4 213 | The table name in the output file\&. 214 | .RE 215 | .PP 216 | \-s \fISKIPINITIALSPACE\fR, \-\-skipinitialspace=\fISKIPINITIALSPACE\fR 217 | .RS 4 218 | Specifies how to interpret whitespace which immediately follows a delimiter\&. It defaults to False, which means that whitespace immediately following a delimiter is part of the following field\&. 219 | .RE 220 | .PP 221 | \-l \fILINETERMINATOR\fR, \-\-lineterminator=\fILINETERMINATOR\fR 222 | .RS 4 223 | Specifies the character sequence which should terminate rows\&. 224 | .RE 225 | .PP 226 | \-q \fIQUOTING\fR, \-\-quoting=\fIQUOTING\fR 227 | .RS 4 228 | It can take on any of the following module constants: 0 = QUOTE_MINIMAL means only when required, for example, when a field contains either the quotechar or the delimiter\&. 1 = QUOTE_ALL means that quotes are always placed around fields\&. 2 = QUOTE_NONNUMERIC means that quotes are always placed around fields which do not parse as integers or floating point numbers\&. 3 = QUOTE_NONE means that quotes are never placed around fields\&. It defaults is QUOTE_MINIMAL\&. 229 | .RE 230 | .PP 231 | \-e \fIESCAPECHAR\fR, \-\-escapechar=\fIESCAPECHAR\fR 232 | .RS 4 233 | Specifies a one\-character string used to escape the delimiter when quoting is set to QUOTE_NONE\&. 234 | .RE 235 | .PP 236 | \-r \fIQUOTECHAR\fR, \-\-quotechar=\fIQUOTECHAR\fR 237 | .RS 4 238 | Specifies a one\-character string to use as the quoting character\&. It defaults to "\&. 239 | .RE 240 | .SH "Example" 241 | .sp 242 | .if n \{\ 243 | .RS 4 244 | .\} 245 | .fam C 246 | .ps -1 247 | .nf 248 | .if t \{\ 249 | .sp -1 250 | .\} 251 | .BB lightgray adjust-for-leading-newline 252 | .sp -1 253 | 254 | csv2ods \-i /etc/passwd \-o accounts\&.odt \-d: 255 | .EB lightgray adjust-for-leading-newline 256 | .if t \{\ 257 | .sp 1 258 | .\} 259 | .fi 260 | .fam 261 | .ps +1 262 | .if n \{\ 263 | .RE 264 | .\} 265 | .SH "Author" 266 | .PP 267 | \fBAgustin Henze\fR <\&agustinhenze at gmail\&.com\&> 268 | .RS 4 269 | Original author of csv\-ods\&.py 270 | .RE 271 | -------------------------------------------------------------------------------- /share/man/man1/odfmeta.1: -------------------------------------------------------------------------------- 1 | .\" Title: odfmeta 2 | .\" Author: S\(/oren Roug 3 | .\" Generator: DocBook XSL Stylesheets v1.74.0 4 | .\" Date: 03/15/2009 5 | .\" Manual: User commands 6 | .\" Source: odfpy 7 | .\" Language: English 8 | .\" 9 | .TH "ODFMETA" "1" "03/15/2009" "odfpy" "User commands" 10 | .\" ----------------------------------------------------------------- 11 | .\" * (re)Define some macros 12 | .\" ----------------------------------------------------------------- 13 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | .\" toupper - uppercase a string (locale-aware) 15 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | .de toupper 17 | .tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 18 | \\$* 19 | .tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz 20 | .. 21 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 | .\" SH-xref - format a cross-reference to an SH section 23 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 | .de SH-xref 25 | .ie n \{\ 26 | .\} 27 | .toupper \\$* 28 | .el \{\ 29 | \\$* 30 | .\} 31 | .. 32 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 | .\" SH - level-one heading that works better for non-TTY output 34 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 35 | .de1 SH 36 | .\" put an extra blank line of space above the head in non-TTY output 37 | .if t \{\ 38 | .sp 1 39 | .\} 40 | .sp \\n[PD]u 41 | .nr an-level 1 42 | .set-an-margin 43 | .nr an-prevailing-indent \\n[IN] 44 | .fi 45 | .in \\n[an-margin]u 46 | .ti 0 47 | .HTML-TAG ".NH \\n[an-level]" 48 | .it 1 an-trap 49 | .nr an-no-space-flag 1 50 | .nr an-break-flag 1 51 | \." make the size of the head bigger 52 | .ps +3 53 | .ft B 54 | .ne (2v + 1u) 55 | .ie n \{\ 56 | .\" if n (TTY output), use uppercase 57 | .toupper \\$* 58 | .\} 59 | .el \{\ 60 | .nr an-break-flag 0 61 | .\" if not n (not TTY), use normal case (not uppercase) 62 | \\$1 63 | .in \\n[an-margin]u 64 | .ti 0 65 | .\" if not n (not TTY), put a border/line under subheading 66 | .sp -.6 67 | \l'\n(.lu' 68 | .\} 69 | .. 70 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 | .\" SS - level-two heading that works better for non-TTY output 72 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 | .de1 SS 74 | .sp \\n[PD]u 75 | .nr an-level 1 76 | .set-an-margin 77 | .nr an-prevailing-indent \\n[IN] 78 | .fi 79 | .in \\n[IN]u 80 | .ti \\n[SN]u 81 | .it 1 an-trap 82 | .nr an-no-space-flag 1 83 | .nr an-break-flag 1 84 | .ps \\n[PS-SS]u 85 | \." make the size of the head bigger 86 | .ps +2 87 | .ft B 88 | .ne (2v + 1u) 89 | .if \\n[.$] \&\\$* 90 | .. 91 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 | .\" BB/BE - put background/screen (filled box) around block of text 93 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 | .de BB 95 | .if t \{\ 96 | .sp -.5 97 | .br 98 | .in +2n 99 | .ll -2n 100 | .gcolor red 101 | .di BX 102 | .\} 103 | .. 104 | .de EB 105 | .if t \{\ 106 | .if "\\$2"adjust-for-leading-newline" \{\ 107 | .sp -1 108 | .\} 109 | .br 110 | .di 111 | .in 112 | .ll 113 | .gcolor 114 | .nr BW \\n(.lu-\\n(.i 115 | .nr BH \\n(dn+.5v 116 | .ne \\n(BHu+.5v 117 | .ie "\\$2"adjust-for-leading-newline" \{\ 118 | \M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 119 | .\} 120 | .el \{\ 121 | \M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] 122 | .\} 123 | .in 0 124 | .sp -.5v 125 | .nf 126 | .BX 127 | .in 128 | .sp .5v 129 | .fi 130 | .\} 131 | .. 132 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 | .\" BM/EM - put colored marker in margin next to block of text 134 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 135 | .de BM 136 | .if t \{\ 137 | .br 138 | .ll -2n 139 | .gcolor red 140 | .di BX 141 | .\} 142 | .. 143 | .de EM 144 | .if t \{\ 145 | .br 146 | .di 147 | .ll 148 | .gcolor 149 | .nr BH \\n(dn 150 | .ne \\n(BHu 151 | \M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] 152 | .in 0 153 | .nf 154 | .BX 155 | .in 156 | .fi 157 | .\} 158 | .. 159 | .\" ----------------------------------------------------------------- 160 | .\" * set default formatting 161 | .\" ----------------------------------------------------------------- 162 | .\" disable hyphenation 163 | .nh 164 | .\" disable justification (adjust text to left margin only) 165 | .ad l 166 | .\" ----------------------------------------------------------------- 167 | .\" * MAIN CONTENT STARTS HERE * 168 | .\" ----------------------------------------------------------------- 169 | .SH "Name" 170 | odfmeta \- List or change the metadata of an ODF file 171 | .SH "Synopsis" 172 | .fam C 173 | .HP \w'\fBodfmeta\fR\ 'u 174 | \fBodfmeta\fR [\-l] [\-v] [\-V] [\-c] [\-d] [\-x\ \fImetafield\fR...] [\-X\ \fImetafield\fR...] [\-a\ \fImetafield\fR...] [\-A\ \fImetafield\fR...] [\-I\ \fImetafield\fR...] [\-o\ \fIpath\fR] \fIpath\fR 175 | .fam 176 | .SH "Description" 177 | .PP 178 | \fBodfmeta\fR 179 | is a program that will list or change the metadata in an OpenDocument file\&. This is useful for version control systems\&. You can change title, keywords, description etc\&. 180 | .PP 181 | 182 | \(lqPath\(rq 183 | is assumed to be an OpenDocument file of text, spreadsheet or presentation type\&. 184 | .SH "Options" 185 | .PP 186 | \-l 187 | .RS 4 188 | List (extract) all known metadata fields\&. 189 | .RE 190 | .PP 191 | \-v or \-V 192 | .RS 4 193 | Print the version number of the ODF document 194 | \fIformat\fR\&. If you use \-V it will print "version:" before the number for compatibility with \-X\&. The version number can\'t be modified\&. 195 | .RE 196 | .PP 197 | \-c 198 | .RS 4 199 | Make field values continous by normalizing white space\&. Might be convenient when postprocessing with standard (line oriented) text utilities\&. 200 | .RE 201 | .PP 202 | \-d 203 | .RS 4 204 | Update the modification date to the current date and time\&. 205 | .RE 206 | .PP 207 | \-x \fImetafield\fR 208 | .RS 4 209 | Extract the contents of this metafield from the file\&. Known field names are creation\-date, creator, date, description, editing\-cycles, editing\-duration, generator, initial\-creator, keyword, language, print\-date, printed\-by, subject, title, user\-defined\&. All other names are assumed to be user defined\&. 210 | .RE 211 | .PP 212 | \-X \fImetafield\fR 213 | .RS 4 214 | Same as \-x, but also preserves/includes the field name\&. 215 | .RE 216 | .PP 217 | \-a \fImetafield\fR 218 | .RS 4 219 | Append a custom metafield to the metadata; but only if a similar field does not exist yet\&. 220 | .RE 221 | .PP 222 | \-A \fImetafield\fR 223 | .RS 4 224 | Append a custom metafield to the metadata in any case\&. 225 | .RE 226 | .PP 227 | \-I \fImetafield\fR 228 | .RS 4 229 | Append a custom metafield to the metadata and remove any existing similar field\&. 230 | .RE 231 | .PP 232 | \-o \fIpath\fR 233 | .RS 4 234 | Filename to write modified ODT file to\&. If no 235 | \fB\-o\fR 236 | option is provided, the ODT file will be written to stdout\&. 237 | .RE 238 | .SH "Examples" 239 | .sp 240 | .if n \{\ 241 | .RS 4 242 | .\} 243 | .fam C 244 | .ps -1 245 | .nf 246 | .if t \{\ 247 | .sp -1 248 | .\} 249 | .BB lightgray adjust-for-leading-newline 250 | .sp -1 251 | 252 | odfmeta \-l odf\-file\&.odt 253 | odfmeta \-I "title:The Little Engine That Could" \-A subject:I\-think\-I\-can \-o newfile\&.odt source\&.odt 254 | .EB lightgray adjust-for-leading-newline 255 | .if t \{\ 256 | .sp 1 257 | .\} 258 | .fi 259 | .fam 260 | .ps +1 261 | .if n \{\ 262 | .RE 263 | .\} 264 | .SH "See Also" 265 | .PP 266 | 267 | \fBformail\fR(1), 268 | \fBid3tag\fR(1) 269 | .SH "Bugs" 270 | .PP 271 | All known versions of OpenOffice\&.org keep only four elements\&. If you add more than those, you\'ll loose them next time you save with OpenOffice\&.org\&. KOffice keeps only one element\&. 272 | .SH "Author" 273 | .PP 274 | \fBS\(/oren Roug\fR 275 | .RS 4 276 | Original author 277 | .RE 278 | -------------------------------------------------------------------------------- /src/blog/templates/blog/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | {% load post_tag %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if title %} 11 | مدونة | {{title}} 12 | {% else %} 13 | مدونة 14 | {% endif %} 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 76 | 77 |
78 | 79 |
80 |
81 |
82 |
83 | {% block content %} 84 | 85 | {% endblock content %} 86 |
87 |
88 |
89 |

آخر التدوينات

90 | {% latest_posts %} 91 | 92 |
93 |
94 |

آخر التعليقات

95 | {% latest_comments %} 96 |
97 |
98 |
99 |
100 |
101 | 102 |
103 |
104 |
105 |
106 |
107 |
108 |

من أنا

109 |
110 |
111 | شعار مدونة 112 |
113 |

114 | أحمد أبو عيسى مالك قناة شبكة علوم. أعمل كرئيس قسم لغة فرنسية ومدرب إلكتروني ومهتم 115 | بمجال 116 | تطوير الويب 117 |

118 | 119 |
120 |
121 |
122 |

مواقع هامة

123 | 131 |
132 |
133 |

وسائل التواصل الاجتماعي

134 |

135 | 136 | 137 | 138 | 139 | 140 | 141 |

142 |
143 |
144 |
145 |
146 |
147 |
148 | © جميع الحقوق محفوظة {% now 'Y' %} 149 |
150 |
151 |
152 |
153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /src/blog/static/blog/js/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2019 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?pe:10===e?se:pe||se}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),y&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=C(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=H('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return j(e.instance.popper,e.styles),V(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&j(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),j(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); 5 | //# sourceMappingURL=popper.min.js.map 6 | -------------------------------------------------------------------------------- /src/blog/static/blog/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t