summary refs log tree commit diff stats
path: root/lib/packages
Commit message (Collapse)AuthorAgeFilesLines
* lib/packages/docutils - Dropped 'T' from typespdw2015-06-044-235/+253
|
* Turn some test outputs into actual testsOleh Prypin2015-04-211-3/+4
|
* Don't run non-test code when defined(testing)Oleh Prypin2015-04-211-1/+1
|
* Merge branch 'devel' of https://github.com/Araq/Nim into develAraq2015-04-201-1/+1
|\
| * Make RST recognize hyperlinks with two underscoresOleh Prypin2015-04-131-1/+1
| | | | | | | | Fixes #2538
* | fixes #2476Araq2015-04-191-132/+132
|/
* docutils are gcsafeAraq2015-04-042-497/+498
|
* breaking change: 'concept' is now a keyword and used instead of 'generic'Araq2015-03-231-222/+224
|
* rstgen: Unique reference names in TOCdef2015-03-131-1/+8
| | | | | - Fixes #2269 - Keeps track of higher level section to create unique reference names
* Replaced deprecated repeatStr() with repeat().Hans Raaf2015-03-041-2/+2
|
* Replaced deprecated repeatChar() with repeat() or spaces().Hans Raaf2015-03-043-8/+8
|
* Fix typosFederico Ceratto2015-02-151-1/+1
|
* Replace other common expressions with defined variableDustin Lacewell2015-01-121-2/+2
|
* Add named anchor links to procs in the documentation indexDustin Lacewell2015-01-121-2/+4
|
* Improved nimdoc styling.Nick Greenfield2014-12-191-2/+2
| | | | | | | This updates the inlined CSS in nimdoc.cfg, adds several helper classes (and a few divs) to the generated HTML (some in nimdoc.cfg, one in rstgen.nim), and tweaks the anchor linking scheme for headers in rstgen.nim.
* destuctors are experimental; 'func' is now a keywordAraq2014-12-101-1/+2
|
* Merge branch 'devel' of https://github.com/Araq/Nimrod into develAraq2014-12-081-5/+3
|\
| * Moved smiliey format to config hash table.Dominik Picheta2014-12-041-5/+3
| |
* | implements 'defer'Araq2014-12-041-2/+3
|/
* smileys configurable; safer image attribute handlingAraq2014-11-292-21/+27
|
* fixes #1055Araq2014-11-161-4/+4
|
* Merge branch 'pr_adds_code_directive_to_rst' into ↵Grzegorz Adam Hankiewicz2014-11-032-25/+178
|\ | | | | | | | | | | | | | | | | pr_bigbreak_adds_code_directive_to_rst Conflicts: doc/tut2.txt lib/packages/docutils/rstgen.nim lib/system.nim
| * Fixes line numbering.Grzegorz Adam Hankiewicz2014-10-021-1/+1
| |
| * Handles :file: option for code blocks to avoid warnings.Grzegorz Adam Hankiewicz2014-07-262-0/+11
| |
| * Adds support for the ``.. code::`` rst directive.Grzegorz Adam Hankiewicz2014-07-192-25/+167
| | | | | | | | | | | | This modifies the existing ``.. code-block::`` to be treated as spec extension with a specific default language syntax. Also implements line numbering.
* | support nimrod as an alias for nim for compatibility (nimforum!)Araq2014-09-171-4/+4
| |
* | updated the compiler to use the new symbol namesAraq2014-08-283-16/+16
| |
* | Nimrod renamed to NimAraq2014-08-282-3/+3
| |
* | renamefestAraq2014-08-233-10/+10
| |
* | the big renamefest: first stepsAraq2014-08-222-15/+15
| |
* | 'lambda' is no keyword anymoreAraq2014-08-081-1/+1
| |
* | Escapes properly code blocks without highlite support.Grzegorz Adam Hankiewicz2014-07-281-1/+1
|/
* Computes TIndexEntry hash without temporary strings.Grzegorz Adam Hankiewicz2014-05-241-5/+6
|
* Adds colon to symbols in the index.Grzegorz Adam Hankiewicz2014-04-211-1/+1
| | | | | The colon makes it easier to get a unique match searching for symbols using words which may also appear as substrings or elsewhere.
* Inserts the title index term at the beginning of the buffer.Grzegorz Adam Hankiewicz2014-04-211-21/+34
|
* Removes text TOCs from the symbol index.Grzegorz Adam Hankiewicz2014-04-211-1/+6
|
* Assigns default title to module documentation.Grzegorz Adam Hankiewicz2014-04-211-4/+12
|
* Reduces length of lines to remove compilation warnings.Grzegorz Adam Hankiewicz2014-04-211-14/+16
|
* Fixes title and subtitle not setting the current section.Grzegorz Adam Hankiewicz2014-04-211-2/+2
|
* Fixes repeated index terms leading to same HTML anchor.Grzegorz Adam Hankiewicz2014-04-211-2/+18
| | | | | Instead of a hash for the rst node tree (which will always be the same) a simple counter table is used.
* Indexes tocs of documents even if they don't show any.Grzegorz Adam Hankiewicz2014-04-211-6/+6
|
* Generates quick jump list to modules.Grzegorz Adam Hankiewicz2014-04-211-4/+24
|
* Generates quick jump list to documentation files.Grzegorz Adam Hankiewicz2014-04-211-4/+26
|
* Refactors adhoc table of sequences into TIndexedDocs type.Grzegorz Adam Hankiewicz2014-04-211-59/+87
|
* Picks the correct symbol text for theindex embedded tocs.Grzegorz Adam Hankiewicz2014-04-211-2/+3
|
* Moves TOC index entry generation to rstgen module.Grzegorz Adam Hankiewicz2014-04-211-1/+23
| | | | | We want it there so that index entries appear in the same order as they are found in the input text.
* Splits index into documents and APIs.Grzegorz Adam Hankiewicz2014-04-211-45/+193
|
* Adds explicit titles to documentation index.Grzegorz Adam Hankiewicz2014-04-211-5/+8
|
* New concurrency model: next stepsAraq2014-04-191-2/+2
|
* new concurrency model: first steps; shared is not a keyword anymoreAraq2014-04-141-2/+4
|
p">, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); } else XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); } static Bool isprotodel(Client *c) { int i, n; Atom *protocols; Bool ret = False; if(XGetWMProtocols(dpy, c->win, &protocols, &n)) { for(i = 0; !ret && i < n; i++) if(protocols[i] == wmatom[WMDelete]) ret = True; XFree(protocols); } return ret; } static void setclientstate(Client *c, long state) { long data[] = {state, None}; XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, PropModeReplace, (unsigned char *)data, 2); } static int xerrordummy(Display *dsply, XErrorEvent *ee) { return 0; } /* extern */ void attach(Client *c) { if(clients) clients->prev = c; c->next = clients; clients = c; } void configure(Client *c) { XConfigureEvent ce; ce.type = ConfigureNotify; ce.display = dpy; ce.event = c->win; ce.window = c->win; ce.x = c->x; ce.y = c->y; ce.width = c->w; ce.height = c->h; ce.border_width = c->border; ce.above = None; ce.override_redirect = False; XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); } void detach(Client *c) { if(c->prev) c->prev->next = c->next; if(c->next) c->next->prev = c->prev; if(c == clients) clients = c->next; c->next = c->prev = NULL; } void focus(Client *c) { if(c && !isvisible(c)) return; if(sel && sel != c) { grabbuttons(sel, False); XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]); } if(c) { detachstack(c); attachstack(c); grabbuttons(c, True); } sel = c; drawstatus(); if(!selscreen) return; if(c) { XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); } else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); } void killclient(const char *arg) { if(!sel) return; if(isprotodel(sel)) sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]); else XKillClient(dpy, sel->win); } void manage(Window w, XWindowAttributes *wa) { Client *c, *t; Window trans; XWindowChanges wc; c = emallocz(sizeof(Client)); c->tags = emallocz(ntags * sizeof(Bool)); c->win = w; c->x = wa->x; c->y = wa->y; c->w = wa->width; c->h = wa->height; if(c->w == sw && c->h == sh) { c->border = 0; c->x = sx; c->y = sy; } else { c->border = BORDERPX; if(c->x + c->w + 2 * c->border > wax + waw) c->x = wax + waw - c->w - 2 * c->border; if(c->y + c->h + 2 * c->border > way + wah) c->y = way + wah - c->h - 2 * c->border; if(c->x < wax) c->x = wax; if(c->y < way) c->y = way; } updatesizehints(c); XSelectInput(dpy, w, StructureNotifyMask | PropertyChangeMask | EnterWindowMask); XGetTransientForHint(dpy, w, &trans); grabbuttons(c, False); wc.border_width = c->border; XConfigureWindow(dpy, w, CWBorderWidth, &wc); XSetWindowBorder(dpy, w, dc.norm[ColBorder]); configure(c); /* propagates border_width, if size doesn't change */ updatetitle(c); for(t = clients; t && t->win != trans; t = t->next); settags(c, t); if(!c->isuntiled) c->isuntiled = (t != NULL) || c->isfixed; attach(c); attachstack(c); c->isbanned = True; XMoveWindow(dpy, w, c->x + 2 * sw, c->y); XMapWindow(dpy, w); setclientstate(c, NormalState); if(isvisible(c)) focus(c); lt->arrange(); } void resize(Client *c, int x, int y, int w, int h, Bool sizehints) { float actual, dx, dy, max, min; XWindowChanges wc; if(w <= 0 || h <= 0) return; if(sizehints) { if(c->minw && w < c->minw) w = c->minw; if(c->minh && h < c->minh) h = c->minh; if(c->maxw && w > c->maxw) w = c->maxw; if(c->maxh && h > c->maxh) h = c->maxh; /* inspired by algorithm from fluxbox */ if(c->minay > 0 && c->maxay && (h - c->baseh) > 0) { dx = (float)(w - c->basew); dy = (float)(h - c->baseh); min = (float)(c->minax) / (float)(c->minay); max = (float)(c->maxax) / (float)(c->maxay); actual = dx / dy; if(max > 0 && min > 0 && actual > 0) { if(actual < min) { dy = (dx * min + dy) / (min * min + 1); dx = dy * min; w = (int)dx + c->basew; h = (int)dy + c->baseh; } else if(actual > max) { dy = (dx * min + dy) / (max * max + 1); dx = dy * min; w = (int)dx + c->basew; h = (int)dy + c->baseh; } } } if(c->incw) w -= (w - c->basew) % c->incw; if(c->inch) h -= (h - c->baseh) % c->inch; } if(w == sw && h == sh) c->border = 0; else c->border = BORDERPX; /* offscreen appearance fixes */ if(x > sw) x = sw - w - 2 * c->border; if(y > sh) y = sh - h - 2 * c->border; if(x + w + 2 * c->border < sx) x = sx; if(y + h + 2 * c->border < sy) y = sy; if(c->x != x || c->y != y || c->w != w || c->h != h) { c->x = wc.x = x; c->y = wc.y = y; c->w = wc.width = w; c->h = wc.height = h; wc.border_width = c->border; XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc); configure(c); XSync(dpy, False); } } void toggletiled(const char *arg) { if(!sel || lt->arrange == untile) return; sel->isuntiled = !sel->isuntiled; lt->arrange(); } void updatesizehints(Client *c) { long msize; XSizeHints size; if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags) size.flags = PSize; c->flags = size.flags; if(c->flags & PBaseSize) { c->basew = size.base_width; c->baseh = size.base_height; } else c->basew = c->baseh = 0; if(c->flags & PResizeInc) { c->incw = size.width_inc; c->inch = size.height_inc; } else c->incw = c->inch = 0; if(c->flags & PMaxSize) { c->maxw = size.max_width; c->maxh = size.max_height; } else c->maxw = c->maxh = 0; if(c->flags & PMinSize) { c->minw = size.min_width; c->minh = size.min_height; } else c->minw = c->minh = 0; if(c->flags & PAspect) { c->minax = size.min_aspect.x; c->minay = size.min_aspect.y; c->maxax = size.max_aspect.x; c->maxay = size.max_aspect.y; } else c->minax = c->minay = c->maxax = c->maxay = 0; c->isfixed = (c->maxw && c->minw && c->maxh && c->minh && c->maxw == c->minw && c->maxh == c->minh); } void updatetitle(Client *c) { char **list = NULL; int n; XTextProperty name; name.nitems = 0; c->name[0] = 0; XGetTextProperty(dpy, c->win, &name, netatom[NetWMName]); if(!name.nitems) XGetWMName(dpy, c->win, &name); if(!name.nitems) return; if(name.encoding == XA_STRING) strncpy(c->name, (char *)name.value, sizeof c->name); else { if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { strncpy(c->name, *list, sizeof c->name); XFreeStringList(list); } } XFree(name.value); } void unmanage(Client *c) { Client *nc; /* The server grab construct avoids race conditions. */ XGrabServer(dpy); XSetErrorHandler(xerrordummy); detach(c); detachstack(c); if(sel == c) { for(nc = stack; nc && !isvisible(nc); nc = nc->snext); focus(nc); } XUngrabButton(dpy, AnyButton, AnyModifier, c->win); setclientstate(c, WithdrawnState); free(c->tags); free(c); XSync(dpy, False); XSetErrorHandler(xerror); XUngrabServer(dpy); lt->arrange(); }