adobe-fonts / source-code-pro

Monospaced font family for user interface and coding environments
https://adobe-fonts.github.io/source-code-pro/
SIL Open Font License 1.1
19.89k stars 1.63k forks source link

Support for APL characters #114

Open paulotorrens opened 8 years ago

paulotorrens commented 8 years ago

Hello!

I've been looking for a nice monospaced font to use for some projects (which I intend to release under the GPL license), but I need to use APL glyphs as well, (most of) which reside on the Miscellaneous Technical unicode page (and I must also admit that some symbols that are not APL, but are a part of this page, would be welcome...).

The closest I got is the well-known APL385 font (easy to find on the web to download free of charge), which has all the needed characters, and would be perfect if it had a bold version. Sadly, the font won't render nicely on some browsers with simulated bold, which is wider than the regular character size and breaks the monospace... :disappointed:

Any chance to get the APL symbols on this font?

(By the way, some fonts were made with such symbols by authors that were not familiar with the language, so they might look unfamiliar. The APL385 font would be the best reference, as it has all the needed symbols and all of them look familiar and nice to APL programmers, and indeed is usually the preferred font.)

pauldhunt commented 8 years ago

Hello Paulo,

I would be happy to entertain this request if you can compile a list of Unicode code points for the APL characters that are currently missing in Source Code Pro. Ideally, it would be nice to have a text document that is set up in columns that show:

APL Character Unicode code point Unicode name
U+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
paulotorrens commented 8 years ago

Hello, Paul,

Will gladly do! (Not sure what you mean by "entertain", though.)

I've downloaded SCP from github.io to check what it has, which I hope is updated. The following characters used in the APL programming language seem missing, in order:

APL Character Unicode code point Unicode name Picture
U+2207 NABLA
U+220A SMALL ELEMENT OF
U+2218 RING OPERATOR
U+2223 DIVIDES
U+2227 LOGICAL AND
U+2228 LOGICAL OR
U+222A UNION
U+223C TILDE OPERATOR
U+2262 NOT IDENTICAL TO
U+2282 SUBSET OF
U+2283 SUPERSET OF
U+2296 CIRCLED MINUS
U+22A2 RIGHT TACK
U+22A3 LEFT TACK
U+22A4 DOWN TACK
U+22A5 UP TACK
U+22C6 STAR OPERATOR
U+2308 LEFT CEILING
U+230A LEFT FLOOR
U+2336 APL FUNCTIONAL SYMBOL I-BEAM
U+2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
U+2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
U+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
U+233A APL FUNCTIONAL SYMBOL QUAD DIAMOND
U+233B APL FUNCTIONAL SYMBOL QUAD JOT
U+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE
U+233D APL FUNCTIONAL SYMBOL CIRCLE STILE
U+233E APL FUNCTIONAL SYMBOL CIRCLE JOT
U+233F APL FUNCTIONAL SYMBOL SLASH BAR
U+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
U+2341 APL FUNCTIONAL SYMBOL QUAD SLASH
U+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
U+2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
U+2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
U+2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
U+2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
U+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
U+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
U+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
U+234A APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
U+234B APL FUNCTIONAL SYMBOL DELTA STILE
U+234C APL FUNCTIONAL SYMBOL QUAD DOWN CARET
U+234D APL FUNCTIONAL SYMBOL QUAD DELTA
U+234E APL FUNCTIONAL SYMBOL DOWN TACK JOT
U+234F APL FUNCTIONAL SYMBOL UPWARDS VANE
U+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
U+2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR
U+2352 APL FUNCTIONAL SYMBOL DEL STILE
U+2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
U+2354 APL FUNCTIONAL SYMBOL QUAD DEL
U+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
U+2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
U+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
U+2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
U+2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
U+235A APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
U+235B APL FUNCTIONAL SYMBOL JOT UNDERBAR
U+235C APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
U+235D APL FUNCTIONAL SYMBOL UP SHOE JOT
U+235E APL FUNCTIONAL SYMBOL QUOTE QUAD
U+235F U+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
U+2360 APL FUNCTIONAL SYMBOL QUAD COLON
U+2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
U+2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
U+2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
U+2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
U+2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
U+2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
U+2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
U+2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
U+2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
U+236A APL FUNCTIONAL SYMBOL COMMA BAR
U+236B APL FUNCTIONAL SYMBOL DEL TILDE
U+236C APL FUNCTIONAL SYMBOL ZILDE
U+236D APL FUNCTIONAL SYMBOL STILE TILDE
U+236E APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
U+236F APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
U+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
U+2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
U+2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
U+2373 APL FUNCTIONAL SYMBOL IOTA
U+2374 APL FUNCTIONAL SYMBOL RHO
U+2375 APL FUNCTIONAL SYMBOL OMEGA
U+2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
U+2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
U+2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
U+2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
U+237A APL FUNCTIONAL SYMBOL ALPHA
U+2395 APL FUNCTIONAL SYMBOL QUAD

I hope I'm not missing any symbol in the above table! :worried:

Also, I got the pictures above from decodeunicode for easier visualization, but as I mentioned before, the best reference for the symbols is still the APL385 font.

APL programmers also use symbols ranging from U+24B6 (CIRCLED LATIN CAPITAL LETTER A) to U+24CF (CIRCLED LATIN CAPITAL LETTER Z), but those are usually rendered with an underline instead of being circled (this can be seen in APL385 and in the keyboard pic). I would like to request those as well, underlined instead of circled, but I'm not sure if you'll agree with this.

Aside from those, there are some extra math symbols that are sometimes used in Haskell, Coq or Agda (programming languages used for theorem proofing); they are not needed as they are in APL, but some people like to use them. Some that I have seem in the wild (that are not included in the font nor in the above table) follow:

Character Unicode code point Unicode name Picture
U+2200 FOR ALL
U+2202 PARTIAL DIFFERENTIAL
U+2204 THERE DOES NOT EXIST
U+2205 EMPTY SET
U+2208 ELEMENT OF
U+2209 NOT AN ELEMENT OF
U+2210 N-ARY COPRODUCT
U+2220 ANGLE
U+2234 THEREFORE
U+2235 BECAUSE
U+2284 NOT A SUBSET OF
U+2285 NOT A SUPERSET OF
U+2286 SUBSET OF OR EQUAL TO
U+2287 SUPERSET OF OR EQUAL TO
U+2288 NEITHER A SUBSET OF NOR EQUAL TO
U+2289 NEITHER A SUPERSET OF NOR EQUAL TO
U+27E8 MATHEMATICAL LEFT ANGLE BRACKET
U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET

The above are just a suggestion.

So, what do you think? :smile:

kenlunde commented 8 years ago

s/entertain/consider/

pauldhunt commented 8 years ago

@paulotorrens I’m looking into this a bit and find that the some of the glyph names in the APL385 font are quite creative, eg smirk for ⍨ U+2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS. i’m curious if this is standard lingo? or if this is just creativity on the part of the font developer?

paulotorrens commented 8 years ago

@pauldhunt, those names probably came from the unicode guys; we actually call ⍨ the "commute operator", for instance. APL programmers name the symbols based on their actual function/meaning.

You might notice that the names of some functions in the "Unicode Name" column are wrong: check ⍕ and ⍎. That is the official name, I am afraid: the columns are correct, it's the Unicode commitee who got it wrong.

To be honest, a few of the symbols I listed are only part of the unicode standard and actually were never used in an APL compiler/interpreter. I listed them along just in case (here shows which ones are not actually used, but the server seems broken at this moment; Google cached it though). As a compiler developer myself, I'd like to request those symbols as well because (though improbable) I might find use for them for my implementation of the language (as it is the case of the last table with non-APL characters).

pauldhunt commented 8 years ago

I have questions about some characters that seem to be duplicates of others:

Are the Greek letters alpha, iota, rho, & omega duplicates of the actual Greek letters? Or should they be different somehow? I’m guessing they’re duplicates.

How does the symbol for ‘DIVIDES’ differer from the bar symbol? Is this another duplicated shape?

More to follow at a later point...

paulotorrens commented 8 years ago

On the APL385 font, the symbols are a bit different, but nothing special. Maybe this small difference was made to make them recognizable as not being the codepoints for actual greek letters, I guess. Nevertheless, the greek letters on SCP for those would work well as the APL symbols, duplicating those would be ok; I'd feel perfectly fine programming with the SCP symbols for those.

Divides may be equal to the bar (U+7C VERTICAL LINE), no difference here.

I'm sure you already noticed, but lots of symbols have duplicates inside a box (QUAD) and with a circle (CIRCLE). So some of them are just combinations.

ahyangyi commented 8 years ago

Hi, I am also making my own APL monospace font for entertainment. (OK, a weird kind of entertainment, but that's irrelevant here...) I noticed for the following glyphs, APL 385 has significantly different look from all other free fonts over the Internet, as well as the unicode standard: U+236B ⍫ APL FUNCTIONAL SYMBOL DEL TILDE U+2371 ⍱ APL FUNCTIONAL SYMBOL DOWN CARET TILDE U+2372 ⍲ APL FUNCTIONAL SYMBOL UP CARET TILDE

In all of these cases, APL 385 places the tilde over the top of the base glyph, while other fonts place the tilde over the base glyph. But APL 385's treatment to the tildes are not consistent: In "U+236C ⍬ APL FUNCTIONAL SYMBOL ZILDE", APL 385 simply draws a tilde over the base glyph. In "U+236B ⍭ APL FUNCTIONAL SYMBOL STILE TILDE", APL 385 splits the vertical line to avoid crossing the tilde.

In all these cases, APL 385's approach looks more aesthetically pleasing than possible alternatives. However, could some APL user confirm that the glyph shapes in APL 385 are well-received? You don't find the tildes at varying heights annoying, do you?

paulotorrens commented 8 years ago

@ahyangyi, as far as I know, APL385 is the reference font. Though I'm too young to have used one of the original APL implementations, I do remember seeing an APL typewriter in which such characters were actually overstriked, so the tilde would most certainly be placed above the base glyph. I can't say all APL programmers agree, but I personally feel comfortable programming with APL385, and, in almost every APL site I've been, the first font suggested was actually APL385.

ahyangyi commented 8 years ago

@paulotorrens Thanks a lot!

miguelsousa commented 8 years ago

APL support discussion on Noto's repo https://github.com/googlei18n/noto-fonts/issues/751

martyb42 commented 8 years ago

@paulotorrens Responding to two items:

Character Name vs. Function Name

At IBM context was the key. If you were working with people who were designing fonts, the character name as used (as ? is the function "roll" or "deal" - and who wants to say that all the time, just "query" or "question mark"). If you were talking code, it was the function name "A is assigned 52 deal 52", for instance. This is when spoken.

I will accept either, so this is no problem, but I'm apt to use the above.

APL Typewriter (2741 typeball)

This is what I started using when I was first programming. The typeball did "tilde" through del (as well as up and down caret). Note that tilde, (up/down) caret were not "supersigns" for things like Ñ, but were in the middle of the character box. So "~" was in the middle, not above for a character accent.

No biggie, but the 2741 Typewriter terminal was what I first learned programming on, and that was APL (just insert the APL typeball, and you're gold). OK, it was late 1970s. Today I'd say it was a waste of paper. Different times...

bjfrost commented 5 years ago

A very good description of designing an APL font was written by Joey K. Tuttle for the APL '81 conference. At that time, he was in the process of designing an APL font that he used with TeX to produce output for laser printers. The paper discusses the merits of the original APL selectric fonts and other typewriter fonts before talking about the design of his font for devices available at that time. This was done prior to Unicode. This paper is available from the ACM at https://dl.acm.org/citation.cfm?id=805378&dl=ACM&coll=DL