Передача текста Raw Markdown в Jade

Я играю с моим первым приложением Node.js Express , и, как знает каждый программист, первое, что вы должны построить при тестировании новой рамки - блог! В любом случае, я бы хотел написать статьи в Markdown, а затем сделать это в представлении. Я видел, что Джейд позволяет делать это внутри самого вида, используя фильтры, но я не могу получить это работать.

Чтобы упростить ситуацию, вот пример того, о чем я говорю.

//app.js
res.render("article", {
    md : "Hello World!\n\n*Woo*"
});

//article.jade
section
    :markdown
        #{md}

Но это выводит следующее: {md} ... он не заменяет переменные, которые я передал ему.

Тогда я попробовал это:

//article.jade
section
    :markdown
        !{md}

И выход такой:

Hello World! *Woo*

Итак, теперь это не разбор уценки!

Я смог заставить это работать, проанализировав уценку в файле app.js и затем передав HTML в представление, чтобы дисплей, но я не знаю, это кажется немного смешнее.

Есть ли способ передачи переменных в фильтры Jade?

-121--736906-

Перенаправление потока и каналы при создании оболочки Linux У меня есть назначение на создание оболочки Linux в C. В настоящее время я застрял на реализации перенаправлений и каналов. Код, который у меня есть, ниже. Основной () анализирует входные данные пользователя. Если команда...

У меня есть задание создать оболочку Linux в C. В настоящее время я застрял на реализации перенаправлений и каналов. Код, который у меня есть, ниже. Основной () анализирует входные данные пользователя. Если команда встроена, то эта команда выполняется. В противном случае, токенизированный вход передается для выполнения () (я знаю, что я, вероятно, должен включить встроенные команды в их собственную функцию).

Выполнение () выполняется по циклу массива. При обнаружении , > или | необходимо выполнить соответствующие действия. Первое, что я пытаюсь правильно работать - это трубопроводы. Я определенно делаю что-то не так, потому что я не могу заставить его работать даже для одной трубы. Например, пример ввода/вывода:

/home/ad/Documents> ls -l | grep sh
|: sh: No such file or directory
|

Моя идея состояла в том, чтобы получить каждое из направлений и трубопроводов работает только для одного случая, и затем, сделав функцию рекурсивной, я мог бы, надеюсь, использовать несколько перенаправлений/труб в одной командной строке. Например, можно выполнить program1 output1.txt или ls -l | grep sh > output2.txt .

Я надеялся, что кто-то может указать на мои ошибки в попытке передачи и, возможно, предложить некоторые указатели в том, как подойти к случаю, когда несколько перенаправлений/каналов вводятся пользователем.

#include 
#include 
#include 
#include 
#include 

int MAX_PATH_LENGTH = 1024; //Maximum path length to display.
int BUF_LENGTH = 1024; // Length of buffer to store user input
char * delims = " \n"; // Delimiters for tokenizing user input.
const int PIPE_READ = 0;
const int PIPE_WRITE = 1;

void execute(char **argArray){

  char **pA = argArray;
  int i = 0;
  while(*pA != NULL) {
    if(strcmp(argArray[i],"<") == 0) { 
        printf("<\n"); 
    }
    else if(strcmp(argArray[i],">") == 0) { 
        printf(">\n"); 
    }
    else if(strcmp(argArray[i],"|") == 0) {
        int fds[2];
        pipe(fds);
        pid_t pid;
        if((pid = fork()) == 0) {
            dup2(fds[PIPE_WRITE], 1);
            close(fds[PIPE_READ]);
            close(fds[PIPE_WRITE]);
            char** argList;
            memcpy(argList, argArray, i);
            execvp(argArray[0], argArray);            
        }
        if((pid = fork()) == 0) {
            dup2(fds[PIPE_READ], 0);
            close(fds[PIPE_READ]);
            close(fds[PIPE_WRITE]);
            execvp(argArray[i+1], pA);            
        }
        close(fds[PIPE_READ]);
        close(fds[PIPE_WRITE]);
        wait(NULL);
        wait(NULL);
        printf("|\n");
    }
    else { 
        if(pid == 0){
            execvp(argArray[0], argArray);
            printf("Command not found.\n");
        }
        else
            wait(NULL);*/
    }
    *pA++;
    i++;
  }
}

int main () {

  char path[MAX_PATH_LENGTH];
  char buf[BUF_LENGTH];
  char* strArray[BUF_LENGTH];
  /**
   * "Welcome" message. When mash is executed, the current working directory
   * is displayed followed by >. For example, if user is in /usr/lib/, then
   * mash will display :
   *      /usr/lib/> 
   **/
  getcwd(path, MAX_PATH_LENGTH);
  printf("%s> ", path);
  fflush(stdout);

  /**
   * Loop infinitely while waiting for input from user.
   * Parse input and display "welcome" message again.
   **/ 
  while(1) {
    fgets(buf, BUF_LENGTH, stdin);
    char *tokenPtr = NULL;
    int i = 0;
    tokenPtr = strtok(buf, delims);

    if(strcmp(tokenPtr, "exit") == 0){

        exit(0);
    }
    else if(strcmp(tokenPtr, "cd") == 0){
        tokenPtr = strtok(NULL, delims);
        if(chdir(tokenPtr) != 0){
            printf("Path not found.\n");
        }
        getcwd(path, MAX_PATH_LENGTH);
    }
    else if(strcmp(tokenPtr, "pwd") == 0){
        printf("%s\n", path);
    }
    else {
        while(tokenPtr != NULL) {
            strArray[i++] = tokenPtr;
            tokenPtr = strtok(NULL, delims);
        }
        execute(strArray);
    }

    bzero(strArray, sizeof(strArray)); // clears array
    printf("%s> ", path);
    fflush(stdout);
  }

}

5
задан Jonathan Leffler 26 March 2012 в 19:48
поделиться