10 November 2010

The United Colours of Libre: Take Two

I took a quick look at http://wiki.documentfoundation.org/Marketing/Branding#Colors earlier today, and discovered that the Colour palette has changed.

One change for the better, is that Libre Maroon has been changed to Libre Orange.

The color palette can be downloaded from http://toki-kantoor.pastebin.com/AXTzeUpe

09 November 2010

The ultimate colour palette for LibreOffice

Back in 2004, one of the complaints about OpenOffice.org was that it's colour palette was too small. I wrote the following python script, to address that issue.

The resulting colour palette requires roughly one gigabyte of disk space.

#### code starts here ###
#!usr/bin/python
import sys, string

def bump_case(bump_string, bump_direction):
bump_string, atribute_data = clean_string(bump_string, bump_direction)
if atribute_data == "string":
return_string = bump_string
elif atribute_data == "unknown":
bump_string = bump_string[0]
bump_string = convert_unknown_to_string(bump_string)
elif atribute_data == "integer":
return_string = convert_integer_to_string(bump_string)
else:
print " bump_case(bump_string, bump_direction) can not process the following "
print bump_string
print " as it is not a string "
print " It appears to be the following: ", atribute_data
return return_string

def convert_integer_to_string( integer_string ):
integer_string = str(integer_string)
checkpoint = len(integer_string)
return_string, attribute_type = clean_string(integer_string)
return return_string

def convert_unknown_to_string( unknown_string ):
some_string = unknown_string[0]
return_string, attribute_type = clean_string(some_string, "lower" )
return return_string

def clean_string(some_string, bump_direction):
try:
check = len(some_string)
new_string = string.strip ( some_string )
direction_check = string.lower(bump_direction)
if direction_check == "upper":
check_string = string.upper ( new_string)
else:
check_string = string.lower ( new_string )
attribute_type = "string"
except TypeError:
try:
check_string = int(some_string)
attribute_type = "integer"
except:
print "Unknown Error at clean string"
print some_string
print "This is neither a string, nor an integer"
attribute_type = "unknown"
check_string = some_string

def true_false(message_string):
is_valid = "false"
while is_valid == "false":
print_headline(message_string)
print ( 'If this is correct, type "yes". ' )
# , otherwise type "no". ')
temp_string = raw_input()
temp_string = string.strip(temp_string)
temp_string = string.lower(temp_string)
if temp_string in [ "yes", "true", "0", "+", "ja", "y", "good", "g" ]:
check_point = "true"
is_valid = "true"
elif temp_string in [ "no", "false", "1", "-", "nie", "n", "bad", "b" ]:
check_point = "false"
is_valid = "true"
else:
is_valid = "false"
return check_point

def read_input_data( message_string, validation_string ):
check_point = "false"
while check_point == "false":
clear_screen ( 5 )
print message_string
input_string = raw_input()
input_string = string.strip(input_string)
temp_string = ( validation_string + " " + input_string )
check_point = true_false( temp_string )
return input_string

def in_range( check_this_number, low_number, high_number ):
check_this_number = abs(check_this_number)
if check_this_number > high_number:
check_this_number = check_this_number / high_number
if check_this_number < low_number:
check_this_number = check_this_number + high_number
return check_this_number

# file read / write functions

def get_lines_of_file(var_which_file):
check_the_file = (var_which_file, "lower")
try:
input_file_handle = open(check_this_file , "r")
data = input_file_handle.readlines()
break_line_count = len(data)
except:
break_line_count = 0
return break_line_count

def print_a_file(var_which_file, file_suffix, temp_line):
check_point = string.strip(file_suffix)
if check_point == "":
file_suffix = "data"
check_point = string.strip(var_which_file)
if check_point == "":
var_which_file = "default"
file_name = validate_file_name ( var_which_file, file_suffix )
print_to_this_file = file_name
write_line = string.strip(str(temp_line))
data_check = convert_unknown_to_string(print_to_this_file)
print_to_this_file = data_check
check_point = len(write_line)
if check_point > 1:
line_count = get_lines_of_file(print_to_this_file)
if line_count > 0 :
kountry_datafile = open(print_to_this_file, "w")
kountry_datafile.write(write_line + "\n")
kountry_datafile.close()
kounter = 1
else:
kountry_datafile = open(print_to_this_file, "a")
kountry_datafile.write(write_line + "\n")
kountry_datafile.close()
kounter = 0
else:
kounter = 0
return kounter

def validate_file_name( file_prefix, file_suffix ):
file_prefix = clean_string(file_prefix, "lower")
file_suffix = clean_string(file_suffix, "lower")
if len(file_prefix) > 8:
file_prefix = file_prefix[0:7]
if len(file_suffix) > 4:
file_suffix = file_suffix[0:3]
dot = "."
file_suffix = (dot, file_suffix )
return_name = ( file_prefix + file_suffix )
return return_name

def grab_a_file(var_which_file, file_suffix):
file_name = validate_file_name ( var_which_file, file_suffix )
print_to_this_file = file_name
print
print
line_count = get_lines_of_file(print_to_this_file)
if line_count > 0 :
data = open(print_this_file, "r")
datum = data.readlines()
check = len(datum)
if check < line_count:
print " File length mismatch "
elif check > line_count:
print " File length mismatch "
else:
print "file has zero or less lines in it"
print line_count, " is the line_length"
print print_to_this_file
datum = ""
return datum

def initialize_data(size_of_data_field):
initialized_number = -11111
return_list = [ initialized_number ] * size_of_data_field
return return_list


def delete_blanks(check_string):
working_string = string.strip(check_string)
data_length = len(working_string)
date_length = int(data_length)
new_string = " "
for s_checking in range (0, data_length):
am_on = s_checking
s_data = working_string[am_on]
if s_data <> " ":
new_string = (new_string + s_data)
new_string = string.strip(new_string)
return new_string

#
# main sequence starts here
#

def create_hexadecimal_palette(checking_data):
output_file = "ultimate_color_palette.soc"
data_range_2_is = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
palette_string_1 = ''
for first_data in data_range_2_is:
for second_data in data_range_2_is:
for third_data in data_range_2_is:
for fourth_data in data_range_2_is:
for fifth_data in data_range_2_is:
for sixth_data in data_range_2_is:
check_1 = first_data
check_2 = second_data
check_3 = third_data
check_4 = fourth_data
check_5 = fifth_data
check_6 = sixth_data
temp_string = (check_1 + check_2 + check_3 + check_4 + check_5 + check_6)
check_string = (palette_string_1 + temp_string + palette_string_2 + temp_string + palette_string_3)
check_point = print_a_file ( output_file, "data", check_string)
print check_string
return check_point

checking_data = "junk string"
checkpoint = print_a_file ("start_time", "data", checking_data)
b_color = create_hexadecimal_palette(checking_data)
print b_check_data
checkpoint = print_a_file ("end_time", "data", checking_data)
print "The End"
### code ends here ###

Two minor details:
  1. The contents of the file soc_head https://docs.google.com/leaf?id=1sqTcJuFxh8kmZcvBbSrmMWyiTSwVtaF_uFtewVbXfU0&sort=name&layout=list&num=50 needs to be added to the beginning of the file that the script creates;
  2. The contents of the file soc_base https://docs.google.com/leaf?id=1LIkr1-YGFMCIzaM0gNMpL7rajeBMU6Jhe6_5quKKtrQ&sort=name&layout=list&num=50 needs to be added to the end of the file that the script creates;
Finally, Blogger mangled the code written here almost beyond usability. https://docs.google.com/leaf?id=1VjbFsfES_Lgy4HGysyEHuLilocn8W5DYZBds-7Z_1wI&sort=name&layout=list&num=50 has the code, albeit mangled somewhat differently than was done here.

03 November 2010

A Short List of A11Y Requirements

A Short List of A11Y requirements.
  • All input can be done by voice;
  • All input can be done by a joystick;
  • All input can be done by a Perkins Keyboard;
  • All input can be done by a mouse;
  • All input can be done using an 78 key keyboard;
  • All input can be done on a touchpad;
  • All input can be done using a virtual keyboard;
The program has to be able to accept simultaneous input from all of those devices, to be A11Y compliant;
  • All output can be read on a Braille display monitor;
  • All output is in an audio format;
  • All output can be read on either a CRT or LCD monitor;
  • All output can be felt on a touchpad;
The program has to be able to simultaneously output to all of those devices, to be A11Y compliant;
  • The display size of the data that is presented to them:
  • This includes screen magnification on CRT or LCD monitors;
  • This includes screen magnification on touchpads;
  • This includes all tactile devices;
The user must be able to change:
# The display size of the data that is presented to them:
  • This includes screen magnification on CRT or LCD monitors;
  • This includes screen magnification on touchpads;
  • This includes all tactile devices;
# The audio volume of the data that is presented to them:
  • This includes screen readers;
  • This includes self-voicing functionality;
  • This includes all audio output devices;
# The colours that are used:
  • Icons must be changeable both individually, and as a group;
  • Colours used anywhere in the program must be user changeable;
The program must be able to print to:
  • A Moon Printer;
  • An audio file;
  • A Braille printer;
  • A "normal" printer:
The latter includes, but is not limited to:
  • Ink jet printer;
  • Dot matrix printer;
  • Laser printer;
  • Thermal ink printer;
In an ideal world, the user could select any of those, and the program would automatically print out the data on the requested printer, without any more user intervention.

There is an extension that tries to do output to Braille. The major issue with it, is that it only works for one or two languages.

I have read about an extension that outputs a text document to mp3 format. I do not know how far it progressed.

Arguably, A11Y also requires the program to be able to print out the following file formats:
# Plain text:
  • ANSI/ASCII;
  • UTF-8;
  • UTF-16;
  • UTF-32;
  • Other common plain text character encodings;
# eBook file formats:
  • PDF;
  • Postscript;
  • Mobi;
  • ePub;
  • HTML 5.0;
  • DAISY;
  • DjVu;
  • AZW (Kindle);
  • PDB (eReader);
  • Other common eBook file formats;
# Graphical file formats:
  • PNG;
  • SVG;
  • JPEG;
  • GIF;
  • Other common graphical file formats;
This does not mean the ability to create a picture, but rather to export a text file as a graphical image.

# Audio file formats:
  • OGG;
  • WAV;
  • MP3;
  • MP4;
  • WMA;
  • MPC;
  • FLAC;
  • AIFF;
  • VOX;
  • AU;
  • Other common audio file formats;
This does not mean the ability to create or edit audio files, but rather the ability to export a text file in an audio format. IOW, a self-voicing application that can output the data in an audio file format.

I think that most of these could be done as extensions that the user installs, if they want/need/require the specific output capability. Some of these, involve file formats that are patented, trademarked, under copyright, or otherwise blemished.

02 November 2010

United Colours of Liberty . SOC

Christoph Noack proposed the United Colours of Liberty on 9 October 2010 at
http://luxate.blogspot.com/2010/10/united-colors-of-liberty.html

I haven't figured out how to display XML markup in this blog. :(

The current proposal at http://wiki.documentfoundation.org/Marketing/Branding#Colors can be found as a Google document at https://docs.google.com/document/d/1v_7esM6avaNBEzyYvl9wlnW8k50Ziqf0fAzvcK2Dmzg/edit?hl=en&authkey=CIOLvBg that is ready to cut and paste as a new palette. SOC.

I added four colours:
  • Black;
  • White;
  • Gray: RGB: 192 192 192
  • Silver: RGB: 123 123 123
If you'd like to add it to your existing standard.soc file, then copy only the lines that begin

draw:color draw:name

And remember the less than sign that precedes "draw"

#####

Update added 10 November 2010.
I just discovered pastebin.com

You can download the soc from http://toki-kantoor.pastebin.com/CCbPhNFz

The version at pastebin has one modification:
  • The color names have been changed from "Libre" to "1st Libre".

30 October 2010

Alternative Names

Alternative Names

Languages that OOo treats as dialects

Bosnian

  • Serbian

Dialects that OOo treats as One language.

Kurdish

  • Kurmanji

  • Sorani

Malay

  • Bahasa Indonesia

  • Bahasa Malaysia

  • Bahasa Kelantan

  • Peranakan

  • Jawi


Dialects that OOo treats as different Languages

Norwegian

  • Bokmål

  • Nynork

Glossary

Glossary

'Phags pa

This is an abugida, whose writing direction is from top to bottom, left to right.

Abjad

This writing system consists of glyphs that denote consonants only.

Abugida

This writing system consists of glyphs that denote consonants followed by a particular vowel, and in which diacritics denote the other vowels

Alibata

This is an abugida, whose writing direction is from the bottom up, left to right.

Alphabet

This writing system uses glyphs that denote either vowels, or consonants.

Berber

This is an abjad, whose writing direction can be in any direction.

BiDi

See Bi-Directional language.

Bi-Directional Language

This refers to a language that is read from right to left. This is a typical feature of Semitic writing systems.

Boustrophedon

A writing system in which the direction of writing changes at the end of each line. It the first line is from right to left, the second line will be from left to right. This is a typical feature of early Mesopotamian writing

Carian

This is an alphabet, whose writing direction can be in any direction.

Chinese, Simplified

I am arbitrarily defining this as being the glyphs that have been introduced in The People's Republic of China, since the communist takeover.

Chinese, Traditional

I am arbitrarily defining this as being the glyphs that were not introduced by the The People's Republic of China, since the communist takeover.

Clicks

These are found in Khosian and Bantu languages. Unicode representations are:

  • dental click ǀ Ux01C0

  • Retroflex click ǃ Ux01C3

Coptic

This is an alphabet, whose writing direction is from left to right.

Complex Text Layout

This is a writing system in which the characters change shape, according to the characters that they are next to. This is a typical feature of Indic Valley Scripts.

Consonant

A sound in spoken language that is characterized by a constriction or closure at one or more points along the vocal tract.

CTL

See Complex Text Layout

Diacritic marks

These are marks added to a letter, that change the phonetic meaning of the letter.

  • Acute Accent ´

  • Anunaasika ˙

  • Anusvaara .

  • Apostrophe '

  • Bar

  • Breve ˘

  • Caron ˇ

  • Cedilla ¸

  • Circumflex ^ UxOO5E

  • Comma ,

  • Diaresis ¨

  • Dot

  • Double Acute ˝

  • Grave Accent ` Ux0060

  • Háček ˇ

  • Kroužek °

  • Kroužek ͦ Unicode U+0366

  • Macron ¯

  • Middle Dot ·

  • Ogonek ˛

  • Ring ͦ Unicode U+0366

  • Slash /

  • Spiritus Asper ̔ Unicode U+0314

  • Spiritus Lenis ̕ Unicode U+0315

  • Tilde ~ Unicode

  • Titlo Unicode U+0483

  • Umlaut ¨

  • Virgule /

Egyptian demotic

This is a logosyllabary, whose writing direction is from right to left.

Esperanto

Artificial Language created in the late 19th century, as a second langauge for everybody. It draws its vocabulary mainly from European languages.

Evidential Grammar

A grammar that requires the sentence to include the evidence supporting the statements within the sentence.

Featural Writing System

A writing system in which the shape of the glyphs correlate with distinctive features of the segments of the language.

G11N (Globalization)

Globalization. The process of making a product, or process competitive on a Global scale.

Globalization

See G11N

Hanunoo

This is an abugida, whose writing direction can be in any direction.

Harakat

These are the vowel marks that are used with the Arabic Writing System.


Hebrew

This is an abjad, whose writing direction is from right to left.

Hittite

This is a logosyllabary, whose writing direction can be in any direction.

I18N (internationalization)

Internationalization. Creating documents, software and the like, to make it easy to translate and localize the software,or documents for into other languages, of for use by different cultures.

Input Method Editor

A utility that enables text entry from sources other than a keyboard. These are used for Indic Valley and East Asian language input.

IME

See Input Method Editor

Internationalization

See i18N

Jawi

Writing system used for writing Malay, based upon the Arabic Alphabet.

Kana

Term used to refer to either, or both Hiragana, and Katakana writing systems.

L10N (Localization)

Localization: The process of converting documents, software, and similar items to be easily understood by a specific culture. Whilst this often involves translation, that is not a necessary component.

Language

A dialect with an army behind it.

Latin

This is an alphabet, whose writing direction is left to right. It is used for most West European languages.

Lepcha

This is an abugida, whose writing direction is from top to bottom, right to left. Omniglot classifies it as a syllabic alphabet whose writing direction is left to right. This is one example of how scholars disagree with how to classify languages, and writing systems.

LibO

This is an abbreviation for LibreOffice.

Linear A

This is a logosyllabary, whose writing direction is from left to right.

Localization

See L10N

Logosyllabary

This is a writing system which uses glyphs to denote words, morphemes, or syllables.

Manchu

This is an alphabet, whose writing direction is from top to bottom, left to right.

Mende Kikakui

This is a syllabary, whose writing direction is from right to left.

Meroïtic

This is an abugida, whose writing direction is from right to left. The hieroglyphic form is written from top to bottom, in columns.

Mongolian

This language uses the Arabic writing system, but with vertical, rather than horizontal lines.

N'ko

This is an alphabet, whose writing direction is from right to left.

Nikkudim

These are the vowel points that are used in Hebrew. [Unicode U+05B0 through U+05BD]

  • Patah

  • Segol

  • Hireq

  • Qames

  • Qibbus

  • Qames

  • Sere

  • Holem

  • Qames-He

  • Sere-Yod

  • Hireq-Yod

  • Holem-Vav

  • Sureq

  • Shewa

  • Hatep-Patah

  • Hatep-Segol

  • Hatep-Qames

  • Matheg ֽ ֽֽֽ Unicode 0x5BD

Noun Class Grammar

A language whose grammar uses Noun Classes.

Noun Classes

Nouns are associated with one of ten or more different “classes”.

Nushu

This is a logosyllabary, whose writing direction is from top to bottom, right to left. This language is written by females only.

Ogham

This is an alphabet, whose writing direction is bottom to top, Boustrophedon.

OOo

Abbreviation for OpenOffice.org.

Open Office

A common, but incorrect name for OpenOffice.Org.

Open Office is a registered trade mark for an email utility.

Oriya

This is an abugida, whose writing direction is from left to right.

Orkhon

This is an abjad, whose writing direction is from bottom to top, right to left.

Pahawh Hmong

This is quasi-abugida, whose writing direction is from left to right. [Vowels, not consonants are emphasized.]

Punctuation Marks

Most punctuation marks used by the different writing systems are listed here.

  • Apostrophe ' Ux0027

  • Bang (English) ! Ux0021

  • Colon : Ux003A

  • Comma , Ux002C

  • Comma (Arabic) ، Ux060C

  • Dash ‐ Ux2010

  • Double Acute ̋ Ux030B

  • Em Dash Ux2014

  • En Dash Ux2013

  • Final Quotes " Ux202C

  • Hyphen - Ux002C

  • Initial Quotes " Ux201C

  • Interrobang Ux203D

  • Paseq (Hebrew) ׀ Ux05C0

  • Period . Ux002E

  • Period (Arabic) ۔۔۔ Ux06D4

  • Q Mark (Arabic) ؟ Ux061F

  • Q Mark (Greek) ; Ux037E

  • Q mark (Spanish) ¿ Ux00BF

  • Quotation mark " Ux0022

  • Reversed SemiColon Ux204F

  • Reversed Solidus \ Ux005C

  • SemiColon ; Ux003B

  • SemiColon (Arab) ؛ Ux061B

  • Virgule / Ux002F

The Arabic Period will only be correctly displayed at the end of sentence in the Arabic writing system, hence the series that is displayed here.

Proto-Elamite

This is a logosyllabary, whose writing direction is from top to bottom, left to right.

Rongo-Rongo

This is a boustrophedon writing system, with the distinguishing feature that alternate lines are "upside down".

Ruby

This usually is a pronunciation guide to a word, usually written below, or to the right of the word. Sometimes a definition of the word is provided, instead of the pronunciation.

Syllabary

A writing system whose glyphs denote syllables.

Tagbanwa

This is an abugida, whose writing direction is from the bottom up, left to right.

Tengwar

This is a featural script, whose writing direction is from left to right.

Toki Pona

A conlang that has 118 official words, and roughly 1 500 “borrowed” words, which are mainly place names, or the names of various languages.

Triple O

Rarely used as an abbreviation for OOo, its use is greatly discouraged.

Tsalagi

This is a syllabary, whose writing direction is from left to right.

Ugaritic

This is an abjad, whose writing direction is from left to right.

UI

See User Interface

Uighur

This is an abjad, whose writing direction is from top to bottom, left to right.

User Interface

a) The part of the program that interacts with the user.

b) The icons, text and graphical elements of the program that the user sees.

Vowel

A sound in spoken language that is characterized by an open configuration of the vocal tract.

Vowel Points

These are diacritic marks used to indicate vowels, in abjads. See also: Nikkudim, Harakat.

Xhosa

Bantu language spoken in southern Africa. The most notable feature of this language are the clicks, which were probably borrowed from !kung.

Zulu

Bantu language spoken in Southern Africa, along the Indian Ocean.

!Kung

Khoisan language spoken in Namibia. The most notable feature of this language are the clicks. It is often referred to as "The click language."

LibreOffice in my Language

Localization is the process of configuring software for a specific language, in a specific geographical region.

The usual process of localization is to have the Locale, Writing System, Font(s), Code Range(s) used, User-interface, Help Files, Documentation, Input Method Editor, Spell Checker, Thesaurus, Hyphenation Checker, Grammar Checker, and Templates in the target language.

Jitendra Shah, professor at Veermata Technological Institute (VJTI) and project leader of IndicTrans, wrote:


The localization experience as "being able to communicate in one's language within a culturally familiar environment. As a sibling of internationalization, it is also a way to bring to India's people the winds of world experiences and world's opportunities, thereby giving the local talent a scope to express at the global platform."


He also listed the following as necessary ingredients for a localized experience:

  • Fonts

  • Localized user interface -- i.e. locale, translations

  • Localized theme of the operating system -- colors, icons, etc.

  • Dictionaries and thesaurus

  • Help and documentation in local language

  • Keyboards in local language

  • Ability to make printouts in local language

  • A good collection of useful applications in the local language

  • Localized support resources for local language computing -- hardware and software support, developers, etc.

  • Continuous innovation and improvement!

What OOo Lacks

What OOo Lacks

This is the list of major features that people complain about not having with OOo. (Cyan text was written in 2004. Brown text was written in 2010.)

  • Digital Rights Management Tools

The only recommendation is to encrypt everything using GnuPGP, or similar tool.

DRM has repeatedly shown itself to be a failure that is defective by design. If you do not want unknown third parties to be able to read content created with LibreOffice, password protect it, and then encrypt it using GnuPGP, or similar encryption software.

  • Style Checker

In theory, one, or more of the grammar checkers could be modified to provide this function.

None of the grammar checkers for LibreOffice have modifications for style checking. There are two style checkers for OpenOffice.org 2.x, but they do not work with OpenOffice.org 3.x

  • Calendar

OOExtras had a calendar template for the database component of OOo. I can not currently find it, nor the Calendar template I thought I had downloaded. The recommendation is to use something such as Sunbird.

Some builds of Go-Oo can utilize the Calendaring capabilities that are found in Evolution.

  • Address Book

OOExtras had a PIM template for the database component of OOo. Another option is to use the one that comes with Sunbird.

Some builds of Go-Oo can utilize the PIM capabilities that are found in Evolution.

  • Mail Reader

The recommendation is to use a stand alone mail reader, such as Thunderbird.

  • Web Browser

The recommendation is to use a stand alone web browser, such as Firefox.

  • Stand Alone Presentation Viewer

The theory is that OOo is small enough, that a separate viewer is not necessary.

  • Project Organizer

Once upon a time, OOExtras had a Project Organizer template for the database component of OOo. I couldn't find it, when I needed one in January 2005. I ended up abusing Calc as a Project Organizer.

GanttChart for OOo at http://www.ooomacros.org/user.php#175388 is a macro for OOo 1.x and OOo 2.x.

PERT Chart for OOo at http://www.ooomacros.org/user.php#184651 is a macro for OOo 1.x and OOo 2.x.

Gantt Chart listed at http://extensions.services.openoffice.org/en/project/gantt-chart is an Excel template.

The OpenOffice.org Project Management Tool Project does not appear to have been updated since 2005.

  • A Dictionary - with a *define* button

In certain respects the OOoWikipedia macro provides this functionality.

This functionality is still absent.

  • Bibliographic Tools

LibreOffice contains a built in Bibliography component. I'll grant that it is extremely awkward to use, and lacks both import and export functionality.

What people are really complaining about, is that
OneNote does not work with OpenOffice.org.

The All Singing All Dancing Version.

In 2004 I wrote OOo in a Multi-Lingual Environment: How to have Akkadian, Alibata, Aramaic, Coptic, Devangari, Greek, Hangul, Hebrew, Hittite, Huna, Lepcha, manchu, Meriotic, Mongolian, Nashu, Naxi, Ogham, Orkhon, Pawawh Hmong, Rongo-Rongo, Sanskrit, Tengwar, Thai, Tsalagi, Vai, Xhosa, and Zuni in the same document: The All Singing All Dancing Version. This document was 511 pages long, and covered more than most people wanted to know about how to use OpenOffice.org with different writing systems. As best as I can determine, this document is no longer available on the Internet.

I also wrote Stylist: The Components and their Attributes. This document was almost 1 000 pages long, and covered more than most people wanted to know about creating and modifying styles. As best as I can determine, this document is no longer available on the Internet. I no longer have my master copy.

This blog is the updated version of those two documents.

I'll also cover extensions, style sheets, and other things I found useful.