From: Jerome St-Louis Date: Wed, 28 Aug 2013 08:20:07 +0000 (-0400) Subject: documentor: Read-only mode; Fixed 's' added to parameters; Update on changing doc dir X-Git-Tag: 0.44.09~29 X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=sdk;a=commitdiff_plain;h=a8747f5e1110cb90b85def610dae02dd686556ac documentor: Read-only mode; Fixed 's' added to parameters; Update on changing doc dir --- diff --git a/documentor/src/Documentor.ec b/documentor/src/Documentor.ec index 2cc1a7c..fbe3c73 100644 --- a/documentor/src/Documentor.ec +++ b/documentor/src/Documentor.ec @@ -8,7 +8,8 @@ static Context globalContext { }; static OldList defines { }; static OldList imports { }; static NameSpace globalData; -static OldList excludedSymbols { offset = (uint)&((Symbol)0).left }; +static OldList excludedSymbols { offset = (uint)&((Symbol)0).left }; +static bool readOnly; #define UTF8_NUM_BYTES(x) (__extension__({ byte b = x; (b & 0x80 && b & 0x40) ? ((b & 0x20) ? ((b & 0x10) ? 4 : 3) : 2) : 1; })) @@ -396,6 +397,16 @@ public: { page.Generate(f); } + + virtual Module GetModule() + { + return page ? page.GetModule() : null; + } + + virtual NameSpace * GetNameSpace() + { + return page ? page.GetNameSpace() : null; + } }; enum DocumentationType @@ -551,7 +562,7 @@ static char * ReadDoc(Module module, DocumentationType type, void * object, Docu if(!contents[c]) delete contents; } - if(editing && !contents) + if(editing && !contents && !readOnly) contents = CopyString($"[Add Text]"); return contents; } @@ -560,7 +571,17 @@ class APIPageNameSpace : APIPage { NameSpace * nameSpace; Module module; + + Module GetModule() + { + return module; + } + NameSpace * GetNameSpace() + { + return nameSpace; + } + void Generate(File f) { char string[1024]; @@ -635,7 +656,7 @@ class APIPageNameSpace : APIPage if(first) { f.Printf($"

Sub Namespaces



\n"); - f.Printf("\n"); + f.Printf("
\n"); first = false; } f.Printf(""); @@ -673,7 +694,7 @@ class APIPageNameSpace : APIPage if(first) { f.Printf($"

Classes



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } @@ -713,7 +734,7 @@ class APIPageNameSpace : APIPage if(first) { f.Printf($"

Functions



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } f.Printf(""); @@ -748,7 +769,7 @@ class APIPageNameSpace : APIPage if(first) { f.Printf($"

Definitions



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } f.Printf(""); @@ -782,6 +803,16 @@ class APIPageClass : APIPage { Class cl; + Module GetModule() + { + return cl.module; + } + + NameSpace * GetNameSpace() + { + return cl.nameSpace; + } + void Generate(File f) { char string[1024]; @@ -879,7 +910,7 @@ class APIPageClass : APIPage NamedLink item; f.Printf($"

Enumeration Values



\n"); - f.Printf("
\n"); + f.Printf("
\n"); for(item = enumeration.values.first; item; item = item.next) { @@ -948,7 +979,7 @@ class APIPageClass : APIPage if(cl.conversions.first) { f.Printf($"

Conversions



\n"); - f.Printf("
\n"); + f.Printf("
\n"); for(prop = cl.conversions.first; prop; prop = prop.next) { if((prop.memberAccess == publicAccess || (prop.memberAccess == privateAccess && showPrivate)) && prop.name) @@ -999,7 +1030,7 @@ class APIPageClass : APIPage if(first) { f.Printf($"

Properties and Members



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } @@ -1053,7 +1084,7 @@ class APIPageClass : APIPage if(first) { f.Printf($"

Virtual Methods



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } if(!method.dataType) @@ -1091,7 +1122,7 @@ class APIPageClass : APIPage if(first) { f.Printf($"

Non-Virtual Methods



\n"); - f.Printf("
\n"); + f.Printf("
\n"); first = false; } @@ -1146,7 +1177,7 @@ class APIPageClass : APIPage { f.Printf($"

Example


\n"); f.Printf($"\n"); - f.Printf("
\n"); + f.Printf("
\n"); if(editing) { char fileName[MAX_LOCATION]; @@ -1234,6 +1265,17 @@ class APIPageClass : APIPage class APIPageMethod : APIPage { Method method; + + Module GetModule() + { + return method._class.module; + } + + NameSpace * GetNameSpace() + { + return method._class.nameSpace; + } + void Generate(File f) { Class cl = method._class; @@ -1326,7 +1368,7 @@ class APIPageMethod : APIPage FigureFileName(fileName, module, methodDoc, method, parameter, param); f.Printf("\n"); + f.Printf("\n"); } else f.Printf("\n", desc); @@ -1395,7 +1437,7 @@ class APIPageMethod : APIPage { f.Printf($"

Example


\n"); f.Printf($"\n"); - f.Printf("
", fileName); f.Puts(desc); - f.Printf("s %s 
\n"); + f.Printf("
\n"); if(editing) { char fileName[MAX_LOCATION]; @@ -1457,6 +1499,17 @@ class APIPageMethod : APIPage class APIPageFunction : APIPage { GlobalFunction function; + + Module GetModule() + { + return function.module; + } + + NameSpace * GetNameSpace() + { + return function.nameSpace; + } + void Generate(File f) { char string[1024]; @@ -1546,7 +1599,8 @@ class APIPageFunction : APIPage char fileName[MAX_LOCATION]; FigureFileName(fileName, module, functionDoc, function, parameter, param); f.Printf("\n"); } else @@ -1615,7 +1669,7 @@ class APIPageFunction : APIPage { f.Printf($"

Example


\n"); f.Printf($"\n"); - f.Printf("
", fileName); - f.Puts(desc); + if(desc) + f.Puts(desc); f.Printf(" 
\n"); + f.Printf("
\n"); if(editing) { char fileName[MAX_LOCATION]; @@ -2028,7 +2082,12 @@ class MainForm : Window bool NotifySelect(MenuItem selection, Modifiers mods) { - SettingsDialog { master = this }.Modal(); // Open the settings dialog to allow the user to change the directory for the eCdoc files + if(SettingsDialog { master = this }.Modal() == ok) // Open the settings dialog to allow the user to change the directory for the eCdoc files + { + // Refresh docs + view.Destroy(0); + view.Create(); + } return true; } }; @@ -2211,9 +2270,24 @@ class HelpView : HTMLView bool OnCreate() { TempFile f { }; + page = mainForm.browser.currentRow.GetData(null); if(page) { + // Writability test + { + char docFile[MAX_LOCATION]; + Archive archive; + Module module = page ? page.GetModule() : null; + NameSpace * ns = page ? page.GetNameSpace() : null; + + sprintf(docFile, "%s/%s.eCdoc", settings.docDir, (!module || !module.name || (ns && ns->name && !strcmp(ns->name, "namespaces/ecere/namespaces/com"))) ? "ecereCOM" : module.name); + + archive = ArchiveOpen(docFile, { true } ); + readOnly = archive == null; + delete archive; + } + page.Generate(f); f.Seek(0, start); OpenFile(f, null); @@ -2235,12 +2309,13 @@ class HelpView : HTMLView char fileName[MAX_FILENAME]; char directory[MAX_LOCATION]; char * location; - Archive archive; - SplitArchivePath(editString, archiveFile, &location); - GetLastDirectory(location, fileName); - StripLastDirectory(location, directory); - archive = ArchiveOpen(archiveFile, { true } ); - // if(archive) + Archive archive = null; + if(SplitArchivePath(editString, archiveFile, &location)) + { + GetLastDirectory(location, fileName); + StripLastDirectory(location, directory); + archive = ArchiveOpen(archiveFile, { true } ); + } { TempFile f { }; ArchiveDir dir = archive ? archive.OpenDirectory(directory, null, replace) : null; @@ -2301,7 +2376,8 @@ class HelpView : HTMLView if(edit && (!textBlock || overLink != textBlock.parent)) { - SaveEdit(); + if(!readOnly) + SaveEdit(); HTMLView::OnLeftButtonDown(x, y, mods); selPosition = curPosition = 0; selBlock = textBlock; @@ -3082,6 +3158,7 @@ class HelpView : HTMLView } break; case backSpace: + if(readOnly) break; if(textBlock == selBlock && curPosition == selPosition) { if(curPosition) @@ -3136,6 +3213,7 @@ class HelpView : HTMLView DeleteSelection(); break; case del: + if(readOnly) break; if(textBlock != selBlock || curPosition != selPosition) DeleteSelection(); else if(textBlock.textLen > curPosition) @@ -3186,6 +3264,7 @@ class HelpView : HTMLView Block newBlock; int startY, startX; + if(readOnly) break; DeleteSelection(); block = { type = BR, parent = textBlock.parent, font = textBlock.font }; @@ -3220,6 +3299,7 @@ class HelpView : HTMLView } case ctrlX: case Key { del, shift = true }: + if(readOnly) break; // Cut CopySelection(); DeleteSelection(); @@ -3231,76 +3311,77 @@ class HelpView : HTMLView break; case shiftInsert: case ctrlV: - { - ClipBoard clipBoard { }; - if(clipBoard.Load()) - { - int c; - char * text = clipBoard.memory; - char ch; - int start = 0; - Block parent; - FontEntry font; + if(!readOnly) + { + ClipBoard clipBoard { }; + if(clipBoard.Load()) + { + int c; + char * text = clipBoard.memory; + char ch; + int start = 0; + Block parent; + FontEntry font; - DeleteSelection(); + DeleteSelection(); - parent = textBlock.parent; - font = textBlock.font; + parent = textBlock.parent; + font = textBlock.font; - for(c = 0; ; c++) - { - ch = text[c]; - if(ch == '\n' || ch == '\r' || !ch) + for(c = 0; ; c++) { - int len = c - start; - textBlock.text = renew textBlock.text char[textBlock.textLen + 1 + len]; - memmove(textBlock.text + curPosition + len, textBlock.text + curPosition, textBlock.textLen - curPosition + 1); - memcpy(textBlock.text + curPosition, text + start, len); - textBlock.textLen += len; - curPosition += len; - selPosition = curPosition; - selBlock = textBlock; - if(!ch) break; + ch = text[c]; + if(ch == '\n' || ch == '\r' || !ch) { - Block block { type = BR, parent = parent, font = font }; - Block newBlock { type = TEXT, parent = parent, font = font }; - int startY = textBlock.startY, startX = textBlock.startX; - int tw = 0, th = 0; - - display.FontExtent(textBlock.font.font, " ", 1, null, &th); - textBlock.parent.subBlocks.Insert(textBlock, block); - textBlock.parent.subBlocks.Insert(block, newBlock); - - startY += th; - - newBlock.textLen = textBlock.textLen - curPosition; - newBlock.text = new char[newBlock.textLen+1]; - memcpy(newBlock.text, textBlock.text + curPosition, textBlock.textLen - curPosition + 1); - textBlock.textLen = curPosition; - textBlock.text[curPosition] = 0; - - newBlock.startY = startY; - newBlock.startX = startX; - selPosition = curPosition = 0; + int len = c - start; + textBlock.text = renew textBlock.text char[textBlock.textLen + 1 + len]; + memmove(textBlock.text + curPosition + len, textBlock.text + curPosition, textBlock.textLen - curPosition + 1); + memcpy(textBlock.text + curPosition, text + start, len); + textBlock.textLen += len; + curPosition += len; + selPosition = curPosition; selBlock = textBlock; - textBlock = newBlock; + if(!ch) break; + { + Block block { type = BR, parent = parent, font = font }; + Block newBlock { type = TEXT, parent = parent, font = font }; + int startY = textBlock.startY, startX = textBlock.startX; + int tw = 0, th = 0; + + display.FontExtent(textBlock.font.font, " ", 1, null, &th); + textBlock.parent.subBlocks.Insert(textBlock, block); + textBlock.parent.subBlocks.Insert(block, newBlock); + + startY += th; + + newBlock.textLen = textBlock.textLen - curPosition; + newBlock.text = new char[newBlock.textLen+1]; + memcpy(newBlock.text, textBlock.text + curPosition, textBlock.textLen - curPosition + 1); + textBlock.textLen = curPosition; + textBlock.text[curPosition] = 0; + + newBlock.startY = startY; + newBlock.startX = startX; + selPosition = curPosition = 0; + selBlock = textBlock; + textBlock = newBlock; + } + if(ch == '\r' && text[c+1] == '\n') c++; + start = c + 1; } - if(ch == '\r' && text[c+1] == '\n') c++; - start = c + 1; } + ComputeMinSizes(); + ComputeSizes(); + PositionCaret(true); + Update(null); } - ComputeMinSizes(); - ComputeSizes(); - PositionCaret(true); - Update(null); + delete clipBoard; } - delete clipBoard; break; - } default: { // eC BUG HERE: (Should be fixed) - if(!key.ctrl && !key.alt && ch >= 32 && ch != 128 /*&& ch < 128*/) + if(!readOnly && !key.ctrl && !key.alt && ch >= 32 && ch != 128 /*&& ch < 128*/) { char string[5]; int len = UTF32toUTF8Len(&ch, 1, string, 5); diff --git a/documentor/src/SettingsDialog.ec b/documentor/src/SettingsDialog.ec index de1bf83..7b05f38 100644 --- a/documentor/src/SettingsDialog.ec +++ b/documentor/src/SettingsDialog.ec @@ -42,7 +42,7 @@ class SettingsDialog : Window { settings.docDir = pathEditBox.contents; // Store the path entered into the edit box settingsContainer.Save(); // write that path to the ini file - Destroy(0); // close the window + Destroy(DialogResult::ok); // close the window return true; } }; @@ -53,7 +53,7 @@ class SettingsDialog : Window bool NotifyClicked(Button button, int x, int y, Modifiers mods) { - Destroy(0); // close the window without making any changes + Destroy(DialogResult::cancel); // close the window without making any changes return true; } }; diff --git a/ecere/src/sys/TempFile.ec b/ecere/src/sys/TempFile.ec index 708873b..a009e2e 100644 --- a/ecere/src/sys/TempFile.ec +++ b/ecere/src/sys/TempFile.ec @@ -68,7 +68,7 @@ public class TempFile : File bool Puts(char * string) { - int len = strlen(string); + int len = string ? strlen(string) : 0; int written = Write(string, 1, len); return written == len; }